o
    *j                     @   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   o/var/www/html/Deteccion_Ine/venv/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   ZdevicemodeltoZparallel_groupsr   ZDP)r   trainerZ
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   Zto_parallelr   r   r   r   r   r   (   s   
zDDPHook.wrap_moduleN)__name__
__module____qualname__r   ZLOWZPRIORITYr   r   r   r   r   r   r   r   r   r      s    r   N)Zmodelscope.metainfor   Z!modelscope.trainers.hooks.builderr   Zmodelscope.trainers.hooks.hookr   Z"modelscope.trainers.hooks.priorityr   Zmodelscope.utils.constantr   Zmodelscope.utils.devicer   Zmodelscope.utils.torch_utilsr   r	   Zregister_moduler   r   r   r   r   <module>   s   