o
    ॵi                     @   sz   d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZ ejejdG d	d
 d
eZdS )    )Hooks)HOOKS)Hook)Priority)DistributedParallelType)create_device)get_local_rank	init_dist)module_namec                   @   s:   e Zd ZejZdd Zdd Zdd Zdd Z	d	d
 Z
dS )DDPHookc                 C   s   |dusJ || _ d| _dS )zThe DDP Hook for data parallel

        Args:
            launcher(str, required): The launcher info, can be 'pytorch' or 'mpi' or 'slurm'
        NF)launcherwrapped)selfr    r   b/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/trainers/hooks/distributed/ddp_hook.py__init__   s   
zDDPHook.__init__c                 C   s>   t | j t }td| |_|j|j d |jtj	< d S )Nzcuda:)
r	   r   r   r   devicemodeltoparallel_groupsr   DP)r   trainer
local_rankr   r   r   
after_init   s
   
zDDPHook.after_initc                 C      |  | d S Nwrap_moduler   r   r   r   r   
before_run"      zDDPHook.before_runc                 C   r   r   r   r   r   r   r   
before_val%   r    zDDPHook.before_valc                 C   s"   | j s||j|_d| _ d S d S )NT)r   to_parallelr   r   r   r   r   r   (   s   
zDDPHook.wrap_moduleN)__name__
__module____qualname__r   LOWPRIORITYr   r   r   r!   r   r   r   r   r   r      s    r   N)modelscope.metainfor   !modelscope.trainers.hooks.builderr   modelscope.trainers.hooks.hookr   "modelscope.trainers.hooks.priorityr   modelscope.utils.constantr   modelscope.utils.devicer   modelscope.utils.torch_utilsr   r	   register_moduler   r   r   r   r   <module>   s   