o
    "j`)                     @   s   d dl Z d dlmZ d dlZd dlmZ ddlmZmZ ddl	m
Z
 ddlmZ e
d	eZd
d ZdddZdd Zdd Zdd Z	dddZG dd dZe aed g td < dS )    N)OrderedDict)core   )_get_global_env_new_ring_id)
get_logger   )dygraph_guardINFOc                   C   s   t  S N)_g_process_group_mapvalues r   r   v/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/distributed/auto_parallel/static/process_group.pyget_all_process_groups      r   c                 C   s    |d u r
t | d S || d S r   )r   get)group_idZg_process_group_mapr   r   r   get_process_group!   s
   

r   c                   C   s   t d S Nr   )r   r   r   r   r   get_world_process_group*   r   r   c                   C   s   i a tdg t d< d S r   )r   ProcessGroupr   r   r   r   clear_all_process_groups/   s   r   c                 C   s   | t v rt |  d S d S r   )r   pop)ring_idr   r   r   remove_process_group5   s   r   Fc           
      C   s   |s(d tt| }t D ]\}}d tt|j}|dkr'||kr'|  S qtt}|d u r7t | d }t|| |}	|	t|< |	S )N_r   r   )	joinmapstrr   itemsrankslenr   r   )
r!   r   Zforce_new_group
group_typeZnew_keyZpg_idZpgZcur_keyZ
num_groupsZnew_pgr   r   r   new_process_group;   s   r$   c                   @   s   e Zd ZdddZedd Zedd Zedd	 Zed
d Zdd Z	dd Z
dd Zedd Zdd Zdd Zdd Zdd Zdd ZdS )r   Nc                 C   sV   |dkrt dd ur|dksJ d|| _|| _|dkr#td | d| _|| _d S )Nr   z-Process group id 0 is reserved for all ranks.F)r   	_group_id_ranksr   	add_ranks_is_instantiate_group_type)selfr   r!   r#   r   r   r   __init__Z   s   

zProcessGroup.__init__c                 C      | j S r   )r%   r*   r   r   r   idh      zProcessGroup.idc                 C   r,   r   )r&   r-   r   r   r   r!   l   r/   zProcessGroup.ranksc                 C   s
   t | jS r   )r"   r&   r-   r   r   r   nranksp   s   
zProcessGroup.nranksc                 C   r,   r   )r)   r-   r   r   r   r#   t   r/   zProcessGroup.group_typec                 C   sF   t |t | jkrd S |  rJ d| j| tt | j| _d S )Nz:Cannot add new ranks after instantiating the process group)setr!   is_instantiater&   extendlist)r*   Z	new_ranksr   r   r   r'   x   s   zProcessGroup.add_ranksc                 C   s&   || j v r| j |S td| d)NzRank z doesn't belong to this group)r!   indexAssertionError)r*   global_rankr   r   r   
local_rank   s
   

zProcessGroup.local_rankc                 C   r,   r   )r(   r-   r   r   r   r2      s   zProcessGroup.is_instantiatec              
      sD  | j rd S | j}t   j}| jdkr|| jv rtd| j d| j d| j d j  t	
 }| j|_| ||_ fdd| jD |_ j|_d|_t	 rt	 j}td	d	 }|rt	 }d
}|jD ]}||7 }qk|d| 7 }t|jdd }	t	j j t	j|t||j|j|	 n}t	||| nst	 rt	 j}td	d	 }|rt	 }d
}|jD ]}||7 }q|d| 7 }t|jdd }	t	j j t	j |t||j|j|	 n(t	!||| n j"t	# v rt	$ j" j}t	%||| nt&dt	 r(t'dtj() j*  n*t	 r9t'dtj() j*  n j"t	# v rRt'dtj() j"tj() j*f  tj+dgddd}
tj,-|
|
d| | j.dkrtj/| j| jgdd}tj,0|ddd| tj1j23  | jdkrtj+dgddd}
tj,-|
|
dd d| _ d S )N   z
group_id: z	, ranks: z
, nranks: z, trainer_endpoints: c                    s   g | ]} j | qS r   )trainer_endpoints).0iZgenvr   r   
<listcomp>   s    
z,ProcessGroup.instantiate.<locals>.<listcomp>r   Z!FLAGS_dynamic_static_unified_comm zring_id:zUTF-8)encodingzNo CUDA device foundzgpu:%dzxpu:%dz%s:%dZint32)dtyper   Zp2p)shaperA   Zuse_calc_streamTr   )4r(   r.   r   rankr0   r!   loggerinfoZcurrent_endpointr   ZParallelStrategyr8   r:   ZnringsZis_compiled_with_cudaZ	CUDAPlaceZ	device_idpaddleZ	get_flagsZcreate_or_get_global_tcp_storehashlibmd5encode	hexdigestZCommContextManagerZset_device_idZcreate_nccl_comm_contextr   ZNCCLParallelContextZinit_with_ring_idZis_compiled_with_xpuZXPUPlaceZcreate_bkcl_comm_contextZBKCLParallelContextZdevice_typeZget_all_custom_device_typeZCustomPlaceZXCCLParallelContextr6   Z
set_devicedistributedZParallelEnvZdev_idfullZ_legacy_C_opsZbarrierr)   emptyZalltoallZdevicecudaZsynchronize)r*   r   r7   ZstrategyZplaceZuse_new_commstoreZendpoints_strZendpointZendpoints_str_hashZbarrier_tensorZalltoall_tmpr   r=   r   instantiate   s   "













zProcessGroup.instantiatec                 C   s   dS )NTr   r-   r   r   r   	is_member	  s   zProcessGroup.is_memberc                 C   s"   t |tsdS | j|jkrdS dS )NFT)
isinstancer   r.   r*   otherr   r   r   __eq__  s
   
zProcessGroup.__eq__c                 C   s   |  | S r   )rU   rS   r   r   r   __ne__     zProcessGroup.__ne__c              	   C   s$   d | j| jdtt| j}|S )Nzid: {}, nranks: {}, ranks: {}.z, )formatr.   r0   r   r   r   r!   )r*   stringr   r   r   __str__  s   zProcessGroup.__str__c                 C   s   t |  S r   )hashrZ   r-   r   r   r   __hash__  rW   zProcessGroup.__hash__r   )__name__
__module____qualname__r+   propertyr.   r!   r0   r#   r'   r8   r2   r	   rP   rQ   rU   rV   rZ   r\   r   r   r   r   r   Y   s(    






{r   r   )NFN)rG   collectionsr   rF   Zpaddle.frameworkr   Z
collectiver   r   Zutils.log_utilsr   utilsr	   r]   rD   r   r   r   r   r   r$   r   r   r   r   r   r   <module>   s&   

	
 J