
    zj*5                       U d dl mZ d dlZd dlZd dlmZmZ d dlmZ d dl	Z	d dl
mZ d dlmZ ddlmZmZmZ dd	lmZmZmZmZmZmZmZmZmZmZmZmZmZ ered
         Z de!d<   d dl"m#Z# g Z$da%d Z&i a'd Z(i a)i a*da+g dZ,da-da. ej/        d          Z0d a1d Z2d Z3d Z4d Z5d Z6d Z7d Z8d Z9d Z:d Z;	 	 	 d8dZ<da=d Z>dde0d dfd9d+Z?d:d-Z@d;d/ZAi aBd0 ZCd1 ZDd2 ZEd3 ZFd<d=d6ZGd<d=d7ZHdS )>    )annotationsN)TYPE_CHECKINGLiteral)	TypeAlias)core)in_dynamic_mode   )Group_add_new_groupis_initialized)	_c_concat_c_identity_c_lookup_table_c_softmax_with_cross_entropy)_c_softmax_with_multi_label_cross_entropy_c_split_Linear_linear_mp_allreduce_parallel_embedding_parallel_linear_set_var_distributedsplit)glooncclxcclbkclflagcxr   _BackendList)
NCCLConfigc                 Z    t           st          j                                        a t           S N)_global_envpaddledistributedParallelEnv     m/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/paddle/distributed/collective.py_get_global_envr*   :   s$     7(4466r(   _default_pg)r   r   heterr   r   r   i  )secondsc                
    | a d S r"   )_default_backend)backends    r)   _set_default_backendr1   X   s    r(   c                
    | a d S r"   )_default_store)stores    r)   _set_default_storer5   ]   s    NNNr(   c            	         t           t          vrPt                      } t          | j        dt          t          | j                                      t          t           <   t          S )Nr   )_global_env_gid
_group_mapr*   r
   ranklistrange
world_size)genvs    r)   _get_group_mapr>   b   sO    j((  &+Iq$uT_5566'
 '

?# r(   c                 4    t                      t                   S r"   )r>   r7   r'   r(   r)   _get_global_groupr@   l   s    O,,r(   c                     t           S r"   _group_map_by_namer'   r(   r)   _get_group_map_by_namerD   p   s    r(   c                 d    t                      s
J d            t                      t                   S )NzZCall paddle.distributed.init_parallel_env first to initialize the distributed environment.)r   rD   _default_group_namer'   r(   r)   _get_default_grouprG   u   s;      	5  "##$788r(   c                0    | t           vsJ |t           | <   d S r"   )r8   )gidgroups     r)   _set_group_maprK   ~   s     j    JsOOOr(   c                0    | t           vsJ |t           | <   d S r"   rB   )namerJ   s     r)   _set_group_map_by_namerN      s%    )))))$tr(   c                0    | t           vsJ |t           | <   d S r"   )_group_map_backend)rJ   r0   s     r)   _set_group_map_backendrQ      s%    ***** 'ur(   c                     t                      r3t          dz  at          t          t                      j        d          z   S t          t                                t          t                      j        d          z   S )Nr	   	   )r   _start_ring_idmaxr*   nringslenr>   r'   r(   r)   _new_ring_idrX      se     H!O$5$5$<a @ @@@>##$$s?+<+<+CQ'G'GGGr(   c	           	        d }	t                      }
| t          v sJ d|  d            | dk    r#t          j                            ||||          }	n| dk    r+t          j                            |||||
j        ||          }	n| dk    r)t          j                            ||
j        |||          }	nX| dk    r#t          j	                            ||||          }	n/| dk    r)t          j
                            |||||
j        |          }	|	S )NzUnsupported backend: .r   r   r   r   r   )r*   _valid_backend_listr   ProcessGroupGloocreateProcessGroupNCCL
pg_timeoutProcessGroupCustomdevice_typeProcessGroupBKCLProcessGroupFlagcx)r0   r4   r9   r<   
group_name
pg_optionsgroup_idnccl_comm_init_optionnccl_configpgr=   s              r)   _new_process_group_implrj      s=    
BD))))+M7+M+M+M)))&"))%z8LL	F		"))O!
 
 
F		$++4#T:x
 
 
F		"))%z8LL	H		$++O!
 
 Ir(   c                
    | a d S r"   )_custom_gid)rI   s    r)   _set_custom_gidrm      s    KKKr(   rankslist[int] | Noner0   Literal['nccl'] | Nonetimeoutdatetime.timedeltarg   intrh   NCCLConfig | Nonereturnr
   c                   t                      rMt          rt          nt                      }t          t	          |          z   }|dk    rj| t          |           dk    rUt                      }|j        }|j        }	|t          n|}| |	} t          |           t          |	          k    s
J d            t          |           }
t          |           } |
dk    r?|| v r;|dk    rdn|                     |          }t          |t          ||
|d|||	  	        }nd}d}t          ||| ||          }|t          |<   |t           |<   |t"          |<   t%          |           |S |sd	}|d	k    s
J d
            t'                      j        }t                      }|| vrt          d||           }|t           |<   nWt          |           } |                     |          }t          |           }t          |||           }|t           |<   |dk    r t)          j                    }||_        ||_        fd| D             |_        j        |_        d|_        t)          j                    rBt)          j        j                  }t)          j        ||                              |           nft)          j                     rBt)          j!        j                  }t)          j"        ||                              |           ntG          d          |S t                      rtI          j%        dgd          ntI          j&        dgdd          }tH          j'        (                    |d           tH          j'        )                    |           |S )a  

    Creates a new distributed communication group.

    Args:
        ranks (list): The global ranks of group members.
        backend (str): The backend used to create group, only nccl is supported now.
        timeout (datetime.timedelta, optional): The waiting timeout for store relevant options, default is 30 minutes.

    Returns:
        Group: The group instance.

    Examples:
        .. code-block:: python

            >>> # doctest: +REQUIRES(env: DISTRIBUTED)
            >>> import paddle

            >>> paddle.distributed.init_parallel_env()
            >>> tindata = paddle.randn(shape=[2, 3])
            >>> gp = paddle.distributed.new_group([2, 4, 6])
            >>> paddle.distributed.all_reduce(tindata, group=gp, sync_op=False)

    r,   Nr	   zQSize of new group must be less than or equal to that of the default global group.r   )re   rf   rg   rh   )ri   rM   r   z,backend other than nccl is not supported yet   c                *    g | ]}j         |         S r'   )trainer_endpoints).0ir=   s     r)   
<listcomp>znew_group.<locals>.<listcomp>3  s.     * * *./&q)* * *r(   zno cuda device foundint32)dtypeT)sync_op)*r   rl   rX   rF   strrW   rG   r9   rn   r/   sortedindexrj   r3   r
   rC   r8   rP   r   r*   r   ParallelStrategynranks
local_rankrz   current_endpointrV   is_compiled_with_cuda	CUDAPlace	device_idNCCLParallelContextinit_with_ring_idis_compiled_with_xpuXPUPlaceBKCLParallelContextAssertionErrorr$   	to_tensorfullr%   
all_reducewait)rn   r0   rq   rg   rh   rI   rd   global_groupglobal_rankglobal_rankssizer9   ri   rJ   ring_idgp
group_rank
group_sizestrategyplacetmpr=   s                        @r)   	new_groupr      s   B  ((<kklnn(3s883
g5=CJJNN-//L&+K'-L*1/&&wG}$u::\!2!2222= 322 5zzu!88u,,7**11K0H0HD(&;'
 
 
BB DBdC2J???).:&
3$+5! 	u fLD)KnnG%2w&& 
7u[[--
ZZ
:w.. 
7??,..H(HO",H* * * *38* * *H& )-(=H%HO)++ =t~66(599KK    *,, =dn55(599KK    %%;<<<I 	0!G,,,,[!aw/// 
 !!#t!444
C   Ir(   boolc                 (    t          j                    S )a!  
    Check whether the distributed package is available.

    Returns:
        Returns True if the distributed package is available, otherwise False.

    Examples:
        .. code-block:: python

            >>> import paddle
            >>> print(paddle.distributed.is_available())

    )r   is_compiled_with_distr'   r(   r)   is_availabler   T  s     %'''r(   Nonec                &   t          j                    }t                      }|j        }|j        }|j        }| dk    r$t           j                            |d||           d S | dk    rd}|j        D ]}||z  }|d	                    d          z  }t          j        |                    d                                                    }t           j                            |           t           j                            |d|||           d S | dk    rP|j        }	t"          j                            |	 d	|            t           j                            |d|||	           d S | d
k    rd}|j        D ]}||z  }|d	                    d          z  }t          j        |                    d                                                    }t           j                            |           t           j                            |d|||           d S d S )Nr   0r    z
ring_id:{}zUTF-8)encodingr   :r   )r   create_or_get_global_tcp_storer*   r9   r<   r   CommContextManagercreate_gloo_comm_contextrz   formathashlibmd5encode	hexdigestset_device_idcreate_nccl_comm_contextra   r$   device
set_devicecreate_xccl_comm_contextcreate_bkcl_comm_context)
r0   r4   
global_envr9   r<   dev_idendpoints_strendpointendpoints_str_hashdev_types
             r)   _init_parallel_envr   e  sb   /11E ""J?D&J!F&883j	
 	
 	
 	
 	
 
F		"4 	& 	&HX%MM,,S111$[  ' 22
 

)++ 	 	--f555883j*<	
 	
 	
 	
 	
 
F		)  H!7!7v!7!7888883j(	
 	
 	
 	
 	
 
F		"4 	& 	&HX%MM,,S111$[  ' 22
 

)++ 	 	--f555883j*<	
 	
 	
 	
 	
 
	r(   c                     t           S r"   _shutdown_group_map_by_namer'   r(   r)   _get_shutdown_group_map_by_namer     s    &&r(   c                    |t           | <   d S r"   r   )pg_namerJ   s     r)   "_update_shutdown_group_map_by_namer     s    +0(((r(   c                    t           | = d S r"   r   )r   s    r)   "_delete_shutdown_group_map_by_namer     s    #G,,,r(   c                 8    t                                            d S r"   )r   clearr'   r(   r)   !_clear_shutdown_group_map_by_namer     s    %%'''''r(   rJ   Group | Nonec                x   t                      }| gt                                                      D ]D\  }}|j        8||vr4|t          k    r)|j                                         t          ||           Ed S | j        9| j        |vr2| j                                         t          | j        |            d S d S d S r"   )r   rD   itemsprocess_grouprF   shutdownr   rM   )rJ   shutdown_groupsr   ri   s       r)   shutdown_process_groupr     s    577O}13399;; 	@ 	@KGR ,?22222 ))+++27B???	@ 	@ +
/11((***.uz5AAAAA	 ,+11r(   c                (   t                      }| @|                                D ]}|j                                         t	                       d S | j        8| j        |v r1| j                                         t          | j                   d S d S d S r"   )r   valuesr   restartr   rM   r   )rJ   r   ri   s      r)   restart_process_groupr     s    577O}!((** 	' 	'B$$&&&&)+++++*uz_/L/L''))).uz::::: +*/L/Lr(   )r   r   N)rn   ro   r0   rp   rq   rr   rg   rs   rh   rt   ru   r
   )ru   r   )r0   r   ru   r   r"   )rJ   r   ru   r   )I
__future__r   datetimer   typingr   r   typing_extensionsr   r$   paddle.baser   paddle.frameworkr   communication.groupr
   r   r   fleet.layers.mpu.mp_opsr   r   r   r   r   r   r   r   r   r   r   r   r   r   __annotations__paddle.base.libpaddler    __all__r#   r*   r8   r7   rC   rP   rF   r[   r3   r/   	timedelta_default_timeoutrT   r1   r5   r>   r@   rD   rG   rK   rN   rQ   rX   rj   rl   rm   r   r   r   r   r   r   r   r   r   r   r'   r(   r)   <module>r      s   # " " " " " "         
 ( ' ' ' ' '        , , , , , , F F F F F F F F F F                                1%&NOLOOOO000000
   
     $ III  %8%d333   
  
  - - -  
9 9 9  % % %( ( (H H H" ) ) ) )^    #&*"2!"%)@ @ @ @ @F( ( ( ("(
 (
 (
 (
V ! ' ' '
1 1 1
- - -
( ( (
B B B B B,
; 
; 
; 
; 
; 
; 
;r(   