
    Αiy>                        S r SSKrSSKJr  SSKJr  SSKJrJr  SSK	J
r
Jr  SSKJrJr  SSKJr  SS	KJrJrJr  S
SKJrJrJr  \R2                  R5                  5       =rr\R2                  R:                  R<                  r " S S\5      r g)a  
Steps to transpile trainer:
1. split variable to multiple blocks, aligned by product(dim[1:]) (width).
2. create delta variable in global scope which used to send
3. add send op to send sparse ids to communicator

Steps to transpile pserver:
1. create new program for parameter server.
2. create params variables that assigned to current server instance.
3. create a sub-block in the server side program
4. append sum ops that should run on current server instance.
5. add listen_and_serv op
    N)	framework)find_distributed_lookup_table)VarsDistributedwait_server_ready)Programcore)PSDispatcher
RoundRobin)DistributedMode)	Parameterdefault_main_programdefault_startup_program   )DistributeTranspilerDistributeTranspilerConfigslice_variablec                   V    \ rS rSrSS jr      SS jrS rSS jrS rS r	S	 r
S
rg)GeoSgdTranspiler@   Nc                 @   Ub  Xl         O[        5       U l         U R                  5         U R                   R                  c  [        U R                   l        U R                   R
                  S:  d   eU R                   R                  R                  S   [        :X  d   eg )Ni    r   )configr   _set_server_configsplit_methodr
   min_block_size	__bases__r	   )selfr   s     p/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/distributed/transpiler/geo_sgd_transpiler.py__init__GeoSgdTranspiler.__init__A   sz     K46DK!;;##+'1DKK${{))T111{{''11!4DDD    c           	      d   Uc
  [        5       nUc
  [        5       nX l        X`l        U R                  R	                  5       U l        X@l        SU l        Xl        UR                  S5      nXl
        [        5       U l        U R                  5       u  U l        U l        U R                   R#                  U R                  5      n	0 U l        0 U l        U R                   HK  u  pUR(                  U R$                  U
R(                  '   U
R(                  U R&                  UR(                  '   MM     [+        U R                  5      U l        U R,                  S LU l        U R,                  (       a  U R,                  OS U R                  l        SU R                  l        U R                  U R                  l        XpR                  l        U R                  S:H  U R                  l        [:        R<                  " 5       U l        [:        R<                  " 5       U l         / U l!        / U l"        / U l#        U RI                  5         / nU	RK                  5         [M        U RN                  RQ                  5       5      nU H+  u  p[S        U5       H  u  nnURU                  U5        M     M-     UnU	RK                  5         U	RW                  U5      n[S        U5       H  u  nnU RX                  U   S   RU                  UU   5        U R                  R[                  UU   R(                  5      nUUl.        U R@                  UU   R(                     nU R>                  U   S   RU                  U5        M     U R                  U R                  l/        / U l0        / U l1        0 nU R                  Re                  5       Rf                   H  nSURi                  5       ;   d  M  URj                  S:X  a  URm                  S	S5        [o        URq                  S
5      URq                  S5      5       H  u  nnUU RD                  ;   d  M  UU;   a  UU   U:X  a  M)  URe                  5       Rs                  U5      nU R`                  RU                  U5        U Rb                  RU                  U5        UUU'   M     M     URe                  5       Ru                  [v        Rx                  " 5       S9nURe                  5       R{                  SSU R`                  0SU0SU Rb                  0S9  U R}                  UUS9U l?        U RB                   H`  nU R~                  Re                  5       Ru                  UR(                  UR                  UR                  URj                  UR                  S9  Mb     U R~                  Re                  5       Ru                  [v        Rx                  " 5       S9nU R~                  Re                  5       Ru                  SS9nU R~                  Re                  5       R{                  SSU/0SU0SUR(                  /0S9  g )NF,Tr   paramsepmap	is_sparselookup_tableremote_prefetchIdsW)namesendXOutsend_varnamestypeinputsoutputsattrs)	recv_varseplistr*   persistabledtyper0   shape
param_init)Cr   r   origin_programstartup_programcloneorigin_startup_programtrainer_num	sync_mode
trainer_idsplitpserver_endpointsr   vars_overview_get_optimize_passoptimize_opsparams_gradsr   r   param_name_to_grad_namegrad_name_to_param_namer*   r   
table_namehas_distributed_lookup_table_distributed_lookup_table_is_distributed
_endpoints_ps_endpoint	_is_chiefcollectionsOrderedDict	vars_infosplit_to_origin_mappingdelta_vars_listsparse_var_listsparse_var_splited_list_init_splited_varsresetlistparam_var_mappingitems	enumerateappenddispatchparam_opt_ep_mappingget_distributed_var_by_sliceendpoint_parameters_on_pservers
sparse_varsparse_tablesglobal_blockops	all_attrsr0   	_set_attrzipinputvar
create_varr   generate_control_dev_var_name	append_op_get_trainer_startup_programtrainer_startup_programr7   r8   r9   )r   rA   programpserverstrainersr@   r<   current_endpointrC   ps_dispatcher	param_vargrad_var	send_varsparam_var_mapping_items_splited_varsrl   r4   r5   iepdistributed_varorigin_nameunique_sparse_varopinput_var_namesparse_var_name	input_vardummy_output	delta_varr:   s                                  r   	transpileGeoSgdTranspiler.transpileN   s    ?*,G"57O%.&*&:&:&@&@&B##$$NN3/!2,./3/F/F/H,4,001G1GH')$')$#'#4#4I;C==D((8:C..D((7 $5
 88K8KL,0OO4,G)#DOOD 	5
 /3+)-)?)?&+;((,1(<% %002'2'>'>'@$!!')$ 	! 	"&t'='='C'C'E"F6OA#L13  % 2  7 	''	2v&EAr%%b)(3::9Q<H"00MM!!!O (*O$66y|7H7HIKNN;'077; ' 7;6H6H3 %%22488Bblln,77n,LL!2E:7:HHUORXXc]83NO '$*>*>>)->> 1. A#2!3 !)$+$8$8$:$>$>~$N	..y9**11/B<K).98	 9( ++-8888: 9 
 	(()L)"D$6$67	 	) 	
 (,'H'H (I (
$ --I((557BB^^%11oo^^oo C  . 33@@BMM88: N 
 11>>@KK L 

 	$$113==*&L)"Z__$56	 	> 	
r    c                     U R                   $ N)rS   )r   s    r   _get_vars_infoGeoSgdTranspiler._get_vars_info   s    ~~r    c                 R    U(       a  [        U R                  5        U R                  $ r   )r   rC   r;   )r   	wait_ports     r   get_trainer_program$GeoSgdTranspiler.get_trainer_program   s    d445"""r    c                 j    U R                  U5      nU R                  U l        U R                  XS9nX#4$ )N)pserver_program)get_pserver_programr`   param_grad_ep_mappingget_startup_program)r   rb   pserver_progpserver_startups       r   get_pserver_programs%GeoSgdTranspiler.get_pserver_programs   sC    //9%)%>%>"22 3 
 ,,r    c           
         [        5       nU R                  R                  Ul        UR                  U R                  5        / nU R                  U   S    H#  nU R                  UR                  5       U5        M%     / n/ n/ nUR                  S-
  nU R                  U   S    GHH  n	UR                  U5      n
UR                  U
5        U	R                  nU
R                  R                  5       nUR                  U   nUR                   S3nU	R                  U R                  ;   aP  [        R                  R                   R"                  nUR                  SR%                  XR                  /5      5        OUR&                  nUR)                  USUUR*                  UR,                  S9nU
R/                  SSUU/0S	U0S
9  UR                  US-   [1        U
R2                  5      -   5        GMK     UUU R4                  [6        R8                  UUU R:                  R<                  U R:                  R>                  U R:                  R@                  S.	nUR                  5       R/                  SSU00 US9  URC                  5         X l"        U$ )Nr#   r   z.delta:F)r*   r7   r0   r8   r9   sumr,   r-   )r0   r1   r2   )	optimize_blocksrb   Fanindistributed_modegrad_to_block_idsparse_grad_to_paramrpc_get_thread_numrpc_send_thread_numrpc_prefetch_thread_numlisten_and_servr/   )#r   r;   random_seed_copy_dist_param_info_fromr`   
_clone_varrf   
num_blocks_create_blockr^   r*   rr   varsrW   r   VarDescVarTypeSELECTED_ROWSjoinr0   rm   r8   r9   ro   stridxr?   r   GEOserver_config_rpc_get_thread_num_rpc_send_thread_num_rpc_prefetch_thread_num_sync_with_cppr   )r   rb   r   recv_inputsvoptimize_blockparam_to_block_idr   pre_block_idxrl   per_opt_blockvar_namepserver_blockparamdelta_var_name
delta_typer   r3   s                     r   r   $GeoSgdTranspiler.get_pserver_program   su   !)&*&9&9&E&E#2243F3FG **84X>AOOO88:A> ? ! (22Q6,,X6x@C+99-HM!!-0xxH)11>>@M!&&x0E %

|62Nxx4777!\\11??
$++HHnjj9: #ZZ
%00#!kkkk 1 I ##eY/0 $ 
 $$$s=+<+<'==9 AB  . %% / 3 3 1$8"&"4"4"H"H#'#5#5#J#J'+'9'9'R'R

 	$$&00"%	 	1 	
 	&&(.r    c                 x	   / n/ n[        5       nU R                   H  u  pE[        U5      [        :X  a  UR                  SL a  M)  UR
                  U;  a,  UR                  U5        UR                  UR
                  5        UR
                  U;  a,  UR                  U5        UR                  UR
                  5        UR                  [        R                  R                  R                  :X  d  M  U R                  R                  UR
                  5        M     [        U[        U R                  5      U R                   R"                  5      nU R%                  U R&                  U5      U l        [*        R,                  " 5       U l        U R                   Vs/ s H"  nU R.                  R1                  US/ 005      PM$       nU R(                  R3                  5        GH  u  pU R&                  R5                  5       R7                  U5      n
[*        R,                  " 5       U R8                  U'   / U R8                  U   S'   U R;                  U	5      nU Vs/ s H  n[=        U5      PM     snU R8                  U   S'   / U R8                  U   S'   / U R8                  U   S'   XR                  ;   aF  [        R                  R                  R                  nU R8                  U   S   R                  S5        O-U
R                  nU R8                  U   S   R                  S5        U R&                  R5                  5       R?                  S	RA                  US
/5      SU
RB                  UU
RD                  S9nU RF                  R                  U5        U	 GH  nU RI                  U5      u  nnnU RJ                  RM                  U
UUUUSS9  XRN                  UR
                  '   XR                  ;   a%  U RP                  R                  UR
                  5        U R8                  U   S   R                  UR
                  5        [        U	5      S:w  d  M  U R&                  R5                  5       R?                  S	RA                  UR
                  S
/5      SURB                  UURD                  S9  GM     GM     g s  snf s  snf )NFr#   	var_namessectionsr$   r%   TrueFalse.deltar6   Param)
origin_var	slice_varblock_idoffsetis_slicevtyper   ))setrG   r0   r   	trainabler*   r^   addr   r   r   r   rV   r   lenrC   r   r   _create_vars_from_blocklistr;   r[   rQ   rR   r`   updater\   rf   rl   rS   _get_splited_var_sectionsr   rm   r   r8   r9   rU   _get_slice_var_inforD   add_distributed_varrT   rW   )r   
param_list	grad_listparam_grad_setpgparam_blocksr~   r   r|   r   vars_sectionr}   r   r   splited_varr   r   r   s                      r   rX   #GeoSgdTranspiler._init_splited_vars3  s    
	%%DAAw)#u(<vv^+!!!$""166*vv^+  #""166*vv--;;;$$++AFF3 & &D223T[[5O5O
 "&!A!A"

 %0$;$;$=! ,,		
 - %%,, " -		
 *.)?)?)E)E)G%K,,99;??LJ*5*A*A*CDNN;'79DNN;'499,GL ,7 ,1A7DNN;'
3 46DNN;'079DNN;'4222!\\11??
{+K8??G'__
{+K8??H++88:EEXX{G45! && && F I   ''	2+-1-E-E.*(F ""66))%!%! 7  BM,,[-=-=>"6"6600778H8HI{+K8??$$ |$)''446AA XX{'7'7&AB$))//')// B '  ,9 *H		
"7s   )R2R7)r   rU   rI   rK   rF   r;   r>   r   rH   r`   r[   rG   rC   r   re   rd   rV   rW   rT   r<   r@   rJ   rA   r?   rq   rS   rD   r   )N127.0.0.1:6174r   FNr   )T)__name__
__module____qualname____firstlineno__r   r   r   r   r   r   rX   __static_attributes__ r    r   r   r   @   s?    E  !)I
V#
-HTbr    r   )!__doc__rQ   paddler   *paddle.distributed.distribute_lookup_tabler   %paddle.distributed.transpiler.detailsr   r   paddle.frameworkr   r   Cpaddle.incubate.distributed.fleet.parameter_server.ir.ps_dispatcherr	   r
   7paddle.incubate.distributed.fleet.parameter_server.moder   paddle.staticr   r   r   distribute_transpilerr   r   r   op_proto_and_checker_makerkOpRoleAttrNameRPC_OP_ROLE_ATTR_NAMEop_role_attr_nameOpRoleRPCRPC_OP_ROLE_ATTR_VALUEr   r   r    r   <module>r      s      +   	##335 ) 88??CC U+ Ur    