
    Αi1                         S SK r S SKrS SKrS SKJr  S SKrS SKJr  SSK	J
r
  SSKJr  SSKJr  S rS rS	 rS
 rS rS rS rS rS rg)    N)deque   )
DeviceType)Graph)get_process_groupc                 F   / SQn[         R                  R                  [         R                  R                  [         R                  R                  [         R                  R
                  /nU R                  S:X  a  U R                  S5      U;   a  gU R                  U;   a  gg)N)
all_gather
all_reduce	broadcastreducereduce_typeTF)distReduceOpSUMMINMAXPRODtypeattr)op	comm_listr   s      n/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/distributed/auto_parallel/static/mapper.pyis_collective_comm_opr      sy    I 		K 
ww(rww}5D	ww)    c                 .    SS/nU R                   U;   a  gg)Nsend_v2recv_v2TF)r   )r   r   s     r   is_p2p_comm_opr   0   s    I&I	ww)r   c                    SnU [         R                  :X  a  SnU$ U [         R                  :X  a  SnU$ U [         R                  :X  a  SnU$ U [         R                  :X  a  SnU$ U [         R
                  :X  a  SnU$ U [         R                  :X  a  SnU$ U [         R                  :X  a  SnU$ U [         R                  :X  a  SnU$ U [         R                  :X  a  SnU$ [        SU  S35      e)Nr            r   zUnrecognized dtype .)paddlefloat64float32float16bfloat16int64int32int16int8uint8
ValueError)dtype	num_bytess     r   get_dtype_bytesr1   8   s   I	& % 
&..	 	" ! 
&..	 	  
&//	!	  
&,,		  
&,,		  
&,,		  
&++		
 	 
&,,		  .ugQ788r   c                 N   S nX:X  a  U$ U R                   nUS:w  a  U R                  S   nOU R                  S   nU R                  R	                  U5      nUc   eUR
                  n/ nU H8  n	U	S:X  a  [        S5        UR                  S5        M'  UR                  U	5        M:     [        R                  " [        R                  US5      n
U
[        UR                  5      -  nSU;   d  SU;   a  SU-  nU$ S	U;   a  UnU$ S
U;   a  U R                  S5      U:X  a  UnU$ S n U$ SU;   a  U R                  S5      U:X  a  S nU$ Un U$ SU:X  a  U R                  S5      U:X  a  S nU$ Un U$ SU;   a  U R                  S5      U:X  a  UnU$ S n U$ SU;   a  S nU$ [        S5      e)Nr   r   z Warning: -1 in the tensor shape.r   c_allreducer
   r"   r	   r   rootc_reduceroot_idr   r   peerz$Unrecognized communication operator.)r   input_arg_namesoutput_arg_namesblock_find_var_recursiveshapeprintappend	functoolsr   operatormulr1   r/   r   r.   )comm_opsrc_ranktgt_rankcomm_volumecomm_op_typetensor_nametensortensor_shapenew_tensor_shapevaltensor_sizetensor_bytess               r   get_comm_volumerO   Q   s   K<<Ly --a0..q1]]..{;F<<L"945##A&##C(  ""8<<1A1EK!>>L$(D,&6 5 
	%"2 1 
	$<<8+&K, ) K( ' 
|	#<<	"h.K"  'K  
\	!<<	"h.K  'K  
l	"<<8+&K  K
 	 
l	"  ?@@r   c                 d   0 n[        U 5      (       a^  U R                  S5      n[        XB5      nXR                  ;  a  U$ UR                   H  n[	        XU5      nUc  M  0 X6'   UX6   S'   M!     U$ [        U 5      (       a-  U R                  S5      n[	        XU5      nUb  0 X6'   XsU   S'   U$ 0 nU$ )Nring_idrF   r8   )r   r   r   ranksrO   r   )r   rankg_process_group_mapcomm_requirements_to_ranksprocess_group_idprocess_grouprE   rF   s           r   !analyze_comm_requirements_from_oprX      s    !#R  779-)*:P***--%++H)"H=K&79*4 +4]C	 , &% 
		776?%b9"35&0BMx0? &% &("%%r   c                 .   U S   nU S   n0 n0 n[         R                  US'   UR                   Hb  nUR                   HO  n[	        XqU5      nUR                  5        H,  u  pX;   a  XY   S==   U
S   -  ss'   M  0 XY'   U
S   XY   S'   M.     MQ     Md     XE4$ )Nr   r   device_typerF   )r   GPUblocksopsrX   items)src_inforS   programrT   resource_requirementsrU   r;   r   cur_comm_requirements_to_ranksrE   	link_infos              r    analyze_requirements_for_programrd      s    qkG"1+!#+5>>-())B-N-.* (F'K'K'M#9.8G!-0G <>.8!-0 /8G (N	    !<<r   c                     [        5       nU R                  5        HK  u  p#[        X25      u  nnUR                  X$S9  UR                  5        H  u  pgUR	                  X&US9  M     MM     U$ )N)ra   )comm_requirements)r   r^   rd   add_nodeadd_edge)distributed_programgraphrD   r_   ra   rU   rE   rf   s           r   build_process_graphrk      sw    GE1779 -X@	
!&xM+E+K+K+M'HNN6G   ,N : Lr   c                    [        5       n[        R                  " S5      n/ nUb>  US:w  a8  UR                  S5       Vs/ s H  n[	        UR                  5       5      PM     nnU R                  R                  5        H  nUR                  R                  5        Hn  nUR                  UR                  US9  U(       a.  UR                  U;  a  SUR                  UR                     S'   MR  SUR                  UR                     S'   Mp     UR                  R                  5        H<  nUR                  UR                  R                  UR                   R                  US9  M>     M     U$ s  snf )	NCUDA_VISIBLE_DEVICES ,)deviceToccupiedF)link)r   osgetenvsplitintstripmachinesvaluesdevicesrg   	global_idlocal_idnodeslinksrh   sourcetarget)clusterrj   cuda_visible_devices_envcuda_visible_devicesdmachinerp   rr   s           r   build_cluster_graphr      s:   GE!yy)?@+0HB0N$<$B$B3$G 
$GqC	N$G 	  
 ##**,oo,,.FNN6++FN;$OO+??<@F,,-j9<AF,,-j9 / MM((*DNN%%t{{'<'<4   + - L# 
s   #E-c                 	   [        U 5      n[        U5      nU H  nSUS'   M
     S nS nS n[        5       nU" [        UR                  R                  5       5      5      n	U	Gbm  UR                  U	5        U(       Ga%  UR                  5       nUS   (       a  M$  US   S   n
S nUR                  R                  5        H8  nUS   R                  U
:X  d  M  US	   (       a  M$  S
US	'   S
US'   US   US'   Un  O   U(       d   S5       e/ nUR                  UR                     R                  5        H`  u  pUR                  UR                  :X  a  UR                  U:X  d   eUR                  UR                  U   5        UR                  U5        Mb     UR                  US9  / nUR                  UR                     R                  5        H  nUR                  U5        M     UR                  US9  U H  nUR                  UR                     S   nU(       a  M(  US   S   n
UR                  UR                     nU HP  nUR                  UR                     nUS   R                  U
:X  d  M1  US	   (       a  M=  S
US	'   S
US'   US   US'     M     M     U(       a  GM%  U" [        UR                  R                  5       5      5      n	U	b  GMm  0 nUR                  R                  5        GH  u  nnUS   nUR                  nUR                  U;   a  UR                   UUR                     S'   UR"                  UUR                     S'   UR$                  UUR                     S'   UUUR                     S   ;  aE  / UUR                     S   U'   UUR                     S   U   R                  UR&                  5        M  UUR                     S   U   R                  UR&                  5        GM  0 UUR                  '   UR                   UUR                     S'   UR"                  UUR                     S'   UR$                  UUR                     S'   0 UUR                     S'   / UUR                     S   U'   UUR                     S   U   R                  UR&                  5        GM     UR                  5        H-  nUS   R                  5        H  nUR                  5         M     M/     U$ )NFvisitedc                     U S   S   $ )Nrf   rF    )	rank_edges    r   sort_by_comm_volume$mapping.<locals>.sort_by_comm_volume   s    ,-m<<r   c                      U S   R                   $ )Nrr   )	bandwidth)device_edges    r   sort_by_comm_bandwidth'mapping.<locals>.sort_by_comm_bandwidth   s    6",,,r   c                 4    S nU  H  nUS   SL d  M  UnM     U$ )Nr   Fr   )rank_node_listselected_rank_node	rank_nodes      r   select_unvisited_rank_node+mapping.<locals>.select_unvisited_rank_node   s-    !'I#u,%." ( "!r   ra   rZ   rp   rq   Tz0Cannot find a device to satisfy the requirement.)keyhostnameaddrportrR   )rk   r   r   listr}   ry   r?   popleftr   adjsidr^   src_idtgt_idsortr   r   r   r   r|   )ri   r   process_graphcluster_graphcur_rank_noder   r   r   queueroot_rank_noderZ   cur_device_nodedevice_nodenbr_rank_edgesnbr_rank_node_idnbr_rank_edgenbr_device_edgesnbr_device_edgesrc_rank_nodenbr_rank_nodenbr_device_noderank_mappingrS   r   rp   r   machine_mappingrank_devicess                               r   mappingr      s    ((;<M'0M&#(i  '=-" GE/]  '')*N 
$^$!MMOMY''(?@OK"O,2299;)..+=#J//.2K
+/3M),.9(.CM(+&1O  < # B?  N3@3E3E  4eg4/  "((M,<,<<%,,0@@A ]001ABC%%m44 $78!#0#5#5""$fh$ !''8$ !!&<!=!/ - 3 3M4H4H I! !+,CD! !. 3 3M4H4H I'7O&3&9&9'..'O (166+E+J776:
337i02A(2Kh/ (8 "0M ev 4$$++-.
{ 
$B L(..446i8$..::%3:3C3CL$Z0/6||L$V,/6||L$V,<

3G<<:<WZZ(1$7WZZ(1$7>>vOWZZ(1$7>>vO')L$3:3C3CL$Z0/6||L$V,/6||L$V,02L$W-68L$W-d3$W-d3::6??K' 7( (..0+G4;;=L > 1 r   )r@   rA   rs   collectionsr   r$   paddle.distributeddistributedr   r   r   rj   r   rW   r   r   r   r1   rO   rX   rd   rk   r   r   r   r   r   <module>r      sQ      	   !   ,(22j&2=22vr   