
    ͑ii                         S r SSKr/ r " S S5      r " S S\5      r " S S\5      r " S	 S
\5      r " S S\5      r " S S\5      r " S S\5      r	 " S S5      r
g)zDefinition of device workers.    Nc                   :    \ rS rSrSrS rS
S jrS rS rS r	Sr
g	)DeviceWorker   z
DeviceWorker is an abstract class, which generates worker desc.
This class is an inner class that we do computation logics within
the implementation. For example, execution of a program or a graph.
c                      SU l         SU l        gzInit.N)_program_infer)selfs    Y/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/base/device_worker.py__init__DeviceWorker.__init__   s        c                     Xl         g)z^
set inference flag for current device worker

Args:
    infer(bool): whether to do inference
N)r	   )r
   infers     r   
_set_inferDeviceWorker._set_infer!   s	     r   c                     Xl         g)zN
Set fleet desc.

Args:
    fleet_desc(PSParameter): pslib.PSParameter object
N)_fleet_desc)r
   
fleet_descs     r   _set_fleet_descDeviceWorker._set_fleet_desc*   s
     &r   c                     Xl         g)z<
Set program.

Args:
    program(Program): a Program object
N)r   )r
   programs     r   _set_programDeviceWorker._set_program3   s	      r   c                     [        S5      e)zS
Generator worker desc.

Args:
    trainer_desc(TrainerDesc): a TrainerDesc object
zXDeviceWorker does not implement gen_worker_desc, please use Hogwild or DownpourSGD, etc.)NotImplementedError)r
   trainer_descs     r   _gen_worker_descDeviceWorker._gen_worker_desc<   s     "6
 	
r   )r   r	   r   N)F)__name__
__module____qualname____firstlineno____doc__r   r   r   r   r   __static_attributes__ r   r   r   r      s     
& 

r   r   c                   2   ^  \ rS rSrSrU 4S jrS rSrU =r$ )HogwildI   z&
Hogwild is a kind of SGD algorithm.

c                 "   > [         TU ]  5         gr   superr   r
   	__class__s    r   r   Hogwild.__init__O       r   c                 :   SUl         U R                  (       a'  UR                  R                  R	                  / SQ5        [        5       n[        [        U R                  5      5      n[        SU5        U R                  c!  [        S5        [        R                  " S5        U R                  R                  nU(       d  gUR                  nUR                  nUS   (       aD  US    H;  nUR                  R	                  U/5        UR                  R	                  U/5        M=     SS	KJn  UR#                  5       (       a  S
U;  a  SU;  a  gUS   n	[        SU	5        U	 GH  n
[        SX5        X:X  d  M  UR$                  R'                  5       nX;l        [        SX   S   5        X   S    H  nUR*                  R	                  U/5        M!     X   S    H0  nUR,                  R	                  U/5        UR'                  U5        M2     X   S    H  nUR.                  R	                  U/5        M!     X   S    H0  nUR0                  R	                  U/5        UR'                  U5        M2       O   SUl         UR2                  nUR4                  Ul        UR9                  S5      c  UR9                  S5      c  [;        S5      eUR9                  S5      Gb  US   nUR9                  U5      c  [;        U S35      eUS   U   nUR=                  5       R>                   He  nUR@                  U;   d  M  UR>                  R'                  5       nURB                  R	                  URD                  5        UR@                  Ul         Mg     [G        UR=                  5       RH                  5      n[K        U5       GH^  nURH                  R'                  5       nUR=                  5       RH                  U   R@                  Ul         URL                  R	                  UR=                  5       RH                  U   RN                  5        URP                  R	                  UR=                  5       RH                  U   RR                  5        URT                  R	                  UR=                  5       RH                  U   RV                  5        U RX                  RZ                  R\                  R^                  U   R`                  Rb                  Ul1        SUl2        SUl3        GMa     UR=                  5       R>                   H  nUR@                  U;   d  M  UR>                  R'                  5       nUR@                  Ul         URB                  R	                  URD                  5        URh                  R	                  URj                  5        M     UR                  R	                  UR=                  5       Rl                  5        OsUR9                  S5      n[        SU5        URo                  5        HB  u  nnUR>                  R'                  5       nURB                  R	                  U5        UUl         MD     U R                  (       a  UR                  R	                  / SQ5        gg)zy
Generator worker desc, which device worker is HogwildWorker.

Args:
    trainer_desc(TrainerDesc): a TrainerDesc object
HogwildWorker)feedpush_sparse_v2
push_densedistributed_push_sparsesenddevice worker program id:N2program of current device worker is not configuredstat_var_namesr   versionr   program_configsdevice worker program_configs:device workerdevice worker pull dense:
pull_densepush_sparser6   pull_sparseprogram_id_to_workerdense_table_config=opt_info must have program_id_to_worker or dense_table_config" not found in program_id_to_worker !device worker dense_table_config:rD   r5   r6   )8device_worker_namer	   hogwild_paramskip_opsextendsetstridr   printsysexit
_fleet_optdownpour_paramr<   2paddle.incubate.distributed.fleet.parameter_serverr>   is_transpilerprogram_configadd
program_idpush_sparse_table_idpush_dense_table_idpull_sparse_table_idpull_dense_table_idpull_dense_param
thread_num
device_numget
ValueErrorget_descdense_tabletable_iddense_value_namedense_variable_namelensparse_tablerangesparse_key_nameslot_keysparse_value_name
slot_valuesparse_grad_nameslot_gradientr   server_paramdownpour_server_paramdownpour_table_paramaccessorfea_dimemb_dimlabel_var_namedense_grad_namedense_gradient_variable_nameskip_opitems)r
   r   dense_table_setr]   opt_infodownpourhogwildir>   r?   pidpcpull_threadprog_id_to_workerworkerrh   
sparse_lenrm   rG   ri   varnamess                        r   r   Hogwild._gen_worker_descS   s    +:';;&&//66 %DMM*+
):6== FGHHRL==++..,,$%./&&--qc2''..s3 0 	O !!##H,!1"#45.@"C/33 ,,002 */#/= )4]CA++22A37 D(4\BA**111#6#''* C )4]CA++22A37 D(4\BA**111#6#''* C ' #* +:'"33!-!8!8LL/0812:O  <<./; ()? @ $$Z08 !l"DE  45jAF__&22::0"-"9"9"="="?K00778M8MN+,::K(	 3
 V__.;;<J:&'4488:OO%2215>> % ,,33OO%2215>> ..55OO%2215@@ --44OO%2215CC (,'7'7'D'D'Z'Z'o'o((77 $ (*$.0+) ', __&22::0"*"6"6":":"<K+,::K(00778M8MN//6666 3 ##FOO$5$=$=>!).B!C57IJ&8&>&>&@"()5599;,,33H='/$ 'A
 ;;##? r   r'   	r!   r"   r#   r$   r%   r   r   r&   __classcell__r/   s   @r   r)   r)   I   s    
G Gr   r)   c                   2   ^  \ rS rSrSrU 4S jrS rSrU =r$ )DownpourLite   z+
DownpourLite is a kind of SGD algorithm.

c                 "   > [         TU ]  5         gr   r,   r.   s    r   r   DownpourLite.__init__   r1   r   c                    [        S5        SUl        U R                  (       a'  UR                  R                  R                  / SQ5        [        5       n[        [        U R                  5      5      n[        SU5        U R                  c!  [        S5        [        R                  " S5        U R                  R                  nU(       d  gUR                  nUS   (       a(  US    H  nUR                  R                  U/5        M!     S	S
KJn  UR!                  5       (       a  SU;  a  SU;  a  gUS   n[        SU5        U GH  n	[        SX5        X:X  d  M  UR"                  R%                  5       n
X:l        [        SX   S   5        X   S    H  nU
R(                  R                  U/5        M!     X   S    H0  nU
R*                  R                  U/5        UR%                  U5        M2     X   S    H  nU
R,                  R                  U/5        M!     X   S    H0  nU
R.                  R                  U/5        UR%                  U5        M2       O   UR0                  nUR2                  Ul        UR7                  S5      c  UR7                  S5      c  [9        S5      eUR7                  S5      Gb  US   nUR7                  U5      c  [9        U S35      eUS   U   nUR;                  5       R<                   He  nUR>                  U;   d  M  UR<                  R%                  5       nUR@                  R                  URB                  5        UR>                  Ul        Mg     [E        UR;                  5       RF                  5      n[I        U5       GH^  nURF                  R%                  5       nUR;                  5       RF                  U   R>                  Ul        URJ                  R                  UR;                  5       RF                  U   RL                  5        URN                  R                  UR;                  5       RF                  U   RP                  5        URR                  R                  UR;                  5       RF                  U   RT                  5        U RV                  RX                  RZ                  R\                  U   R^                  R`                  Ul0        SUl1        SUl2        GMa     UR;                  5       R<                   H  nUR>                  U;   d  M  UR<                  R%                  5       nUR>                  Ul        UR@                  R                  URB                  5        URf                  R                  URh                  5        M     UR                  R                  UR;                  5       Rj                  5        OsUR7                  S5      n[        SU5        URm                  5        HB  u  nnUR<                  R%                  5       nUR@                  R                  U5        UUl        MD     U R                  (       a  UR                  R                  / SQ5        gg)z~
Generator worker desc, which device worker is DownpourLiteWorker.

Args:
    trainer_desc(TrainerDesc): a TrainerDesc object
zcreate DownpourLiteWorkerDownpourLiteWorker)r4   rD   r5   r6   r7   r8   r9   Nr:   r;   r<   r   r=   r   r?   r@   rA   rB   rC   rD   r6   rE   rF   rG   rH   rI   rJ   rK   rL   )7rT   rM   r	   rX   rO   rP   rQ   rR   rS   r   rU   rV   rW   r<   rY   r>   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   r   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   )r
   r   r   r]   r   r   r   r>   r?   r   r   r   r   r   rh   r   rm   rG   ri   r   s                       r   r   DownpourLite._gen_worker_desc   s    	)**>';;''0077	 %DMM*+
):6== FGHHRL==++..$%./''..s3 0 	O !!##H,!1"#45.@"C/33 ,,002 */#/= )4]CA++22A37 D(4\BA**111#6#''* C )4]CA++22A37 D(4\BA**111#6#''* C ' #* #33!-!8!8LL/0812:O  <<./; ()? @ $$Z08 !l"DE  45jAF__&22::0"-"9"9"="="?K00778M8MN+,::K(	 3
 V__.;;<J:&'4488:OO%2215>> % ,,33OO%2215>> ..55OO%2215@@ --44OO%2215CC (,'7'7'D'D'Z'Z'o'o((77 $ (*$.0+) ', __&22::0"*"6"6":":"<K+,::K(00778M8MN//6666 3 $$V__%6%>%>?!).B!C57IJ&8&>&>&@"()5599;,,33H='/$ 'A
 ;;$$? r   r'   r   r   s   @r   r   r      s    
F Fr   r   c                   2   ^  \ rS rSrSrU 4S jrS rSrU =r$ )DownpourSGDip  z5
DownpourSGD is a kind of distributed SGD algorithm.
c                 "   > [         TU ]  5         g)z,
Init.
initialize downpourSGD device worker
Nr,   r.   s    r   r   DownpourSGD.__init__u      
 	r   c                    [        5       n[        [        U R                  5      5      nU R                  c!  [	        S5        [
        R                  " S5        U R                  R                  nUS   nUR                  nU GHB  nXs:X  d  M  UR                  R                  5       nX8l        XS   S    H  n	UR                  R                  U	/5        M!     XS   S    H0  n	UR                  R                  U	/5        UR                  U	5        M2     XS   S    H  n	UR                  R                  U	/5        M!     XS   S    H0  n	UR                   R                  U	/5        UR                  U	5        M2     S	XS   ;   aF  XS   S	   n
U
R#                  5        H+  u  pUR$                  R                  5       nXl        Xl        M-       O   UR+                  S
S5      Ul        UR.                  nUR0                  Ul        UR+                  S5      c  [5        S5      eUS   nUR+                  U5      c  [5        U S35      eUS   U   nUR7                  5       R8                   He  n	U	R:                  U;   d  M  UR8                  R                  5       nUR<                  R                  U	R>                  5        U	R:                  Ul        Mg     [A        UR7                  5       RB                  5      n[E        U5       GH  n	URB                  R                  5       nUR7                  5       RB                  U	   R:                  Ul        URF                  R                  UR7                  5       RB                  U	   RH                  5        URJ                  R                  UR7                  5       RB                  U	   RL                  5        URN                  R                  UR7                  5       RB                  U	   RP                  5        US   (       d  SU;   a`  US   SL aX  U RR                  RT                  RV                  RX                  U	   RZ                  R\                  Ul/        UR^                  Ul.        O]U RR                  RT                  RV                  RX                  U	   RZ                  R\                  S-
  Ul/        UR^                  S-   Ul.        SUl0        GM     US   (       a(  US    H  n	URb                  R                  U	/5        M!     UR7                  5       R8                   H  n	U	R:                  U;   d  M  UR8                  R                  5       nU	R:                  Ul        UR<                  R                  U	R>                  5        URd                  R                  U	Rf                  5        M     URh                  R                  UR7                  5       Rj                  5        U Rl                  (       a  SUl7        SUl8        gg)z
Generator worker desc, which device worker is DownpourWorker.

Args:
    trainer_desc(TrainerDesc): a TrainerDesc object
Nr:   r;   r?   rD   r6   rE   rC   cond2denseidworker_classDownpourWorkerrF   'opt_info must have program_id_to_workerrI   use_cvmno_cvmT   clickr<   F)9rQ   rR   rS   r   rT   rU   rV   rW   rX   r[   r\   r]   r^   rP   r_   r`   ra   r   partial_pushdense_condtable_mapkeyvaluere   rM   rb   rc   rd   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   r   ru   rv   rw   rx   ry   rz   r{   r<   r|   r}   rO   r~   r	   r6   rD   )r
   r   r   r]   r   r?   r   r   r   r   r   r   r   mc_mapr   r   r   rh   r   rm   s                       r   r   DownpourSGD._gen_worker_desc|  s"    %DMM*+
== FGHHRL==++"#45.."C ,,002 *(4]CA++22A37 D(4\BA**111#6#''* C )4]CA++22A37 D(4\BA**111#6#''* C "_%@@#2#>~#NL&2&8&8&:
!#!C!C!G!G!I%(
', '; + #. +3,,,+
' #33!-!8!8<<./7FGG$%;<  ,4
|+MNOO01*="..Azz_,)5599;,,33A4I4IJ'(zz$	 /
 *778
z"A#00446L$*OO$5$B$B1$E$N$NL!((//!..q1:: **11!..q1<< ))00!..q1?? #x'X&$.'+'7'7'D'D'Z'Z'o'o((77 $ (4';';$ $$11GG\\hww $ (4';';a'?$*1L'= #> $%./''..s3 0 "..Azz_,&22668'(zz$,,33A4I4IJ++2222 / 	  !2!:!:;;;"'H#(H  r   r'   r   r   s   @r   r   r   p  s    f) f)r   r   c                   2   ^  \ rS rSrSrU 4S jrS rSrU =r$ )DownpourSGDOPTi  z8
DownpourSGDOPT is a kind of distributed SGD algorithm.
c                 "   > [         TU ]  5         g)z/
Init.
initialize downpourSGDOPT device worker
Nr,   r.   s    r   r   DownpourSGDOPT.__init__  r   r   c                    [        5       n[        [        U R                  5      5      nU R                  c!  [	        S5        [
        R                  " S5        U R                  R                  nUS   nUR                  nU H  nXs:X  d  M
  UR                  R                  5       nX8l        XS   S    H  n	UR                  R                  U	/5        M!     XS   S    H0  n	UR                  R                  U	/5        UR                  U	5        M2     XS   S    H  n	UR                  R                  U	/5        M!     XS   S    H0  n	UR                   R                  U	/5        UR                  U	5        M2       O   S	Ul        UR$                  n
UR&                  U
l        UR+                  S
5      c  [-        S5      eUS
   nUR+                  U5      c  [-        U S35      eUS
   U   nUR/                  5       R0                   He  n	U	R2                  U;   d  M  U
R0                  R                  5       nUR4                  R                  U	R6                  5        U	R2                  Ul        Mg     [9        UR/                  5       R:                  5      n[=        U5       GH  n	UR:                  R                  5       nUR/                  5       R:                  U	   R2                  Ul        UR>                  R                  UR/                  5       R:                  U	   R@                  5        URB                  R                  UR/                  5       R:                  U	   RD                  5        URF                  R                  UR/                  5       R:                  U	   RH                  5        US   (       d  SU;   a`  US   SL aX  U RJ                  RL                  RN                  RP                  U	   RR                  RT                  Ul+        URV                  Ul*        O]U RJ                  RL                  RN                  RP                  U	   RR                  RT                  S-
  Ul+        URV                  S-   Ul*        SUl,        GM     SU;   a  WR2                  US   ;   a  SUl-        SU;   a  WR2                  US   ;   a  SUl.        US   (       a(  US    H  n	UR^                  R                  U	/5        M!     UR/                  5       R0                   H  n	U	R2                  U;   d  M  UR0                  R                  5       nU	R2                  Ul        UR4                  R                  U	R6                  5        UR`                  R                  U	Rb                  5        M     URd                  R                  UR/                  5       Rf                  5        U Rh                  (       a  SUl5        SUl6        gg)r   Nr:   r;   r?   rD   r6   rE   rC   DownpourWorkerOptrF   r   rI   r   r   Tr   r   local_tablesasync_tablesr<   F)7rQ   rR   rS   r   rT   rU   rV   rW   rX   r[   r\   r]   r^   rP   r_   r`   ra   rM   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   r   ru   rv   rw   rx   ry   rz   r{   is_localis_asyncr<   r|   r}   rO   r~   r	   r6   rD   )r
   r   r   r]   r   r?   r   r   r   r   r   r   r   rh   r   rm   s                   r   r   DownpourSGDOPT._gen_worker_desc  s    %DMM*+
== FGHHRL==++"#45.."C ,,002 *(4]CA++22A37 D(4\BA**111#6#''* C )4]CA++22A37 D(4\BA**111#6#''* C  #  +>'"33!-!8!8<<./7FGG$%;<  ,4
|+MNOO01*="..Azz_,)5599;,,33A4I4IJ'(zz$	 /
 *778
z"A#00446L$*OO$5$B$B1$E$N$NL!((//!..q1:: **11!..q1<< ))00!..q1?? #x'X&$.'+'7'7'D'D'Z'Z'o'o((77 $ (4';';$ $$11GG\\hww $ (4';';a'?$*1L'= #@ h&%%.)AA$(L!h&%%.)AA$(L!$%./''..s3 0 "..Azz_,&22668'(zz$,,33A4I4IJ++2222 / 	  !2!:!:;;;"'H#(H  r   r'   r   r   s   @r   r   r     s    g) g)r   r   c                   2   ^  \ rS rSrSrU 4S jrS rSrU =r$ )Sectioni[  zSectionWorker.c                 "   > [         TU ]  5         gr   r,   r.   s    r   r   Section.__init__^  r1   r   c                 *   SSK Jn  SUl        U R                  R                  nUR
                  nUS   Ul        US   Ul        US   Ul        US   Ul	        US   nUS	;   d   S
5       eUS:X  a  SOSnXdl
        UR                  nUS   nUR                  R                  UR                  5       R                  5       5        US   n	US   n
UR!                  5       (       a  [#        XR$                  5      (       d   eUR$                  Ul        Xl        g)zx
Generator worker desc, which device worker is SectionWorker.
Args:
    trainer_desc(TrainerDesc): a TrainerDesc object
   )coreSectionWorkernum_microbatchesstart_cpu_core_idpipeline_stagenum_pipeline_stagesschedule_mode)F-then-B1F1Bz>The schedule mode for pipeline must be one of F-then-B or 1F1Br   r   section_programplaceplace_idN)rJ   r   rM   r   _pipeline_optsection_paramr   r   r   r   r   section_configprogram_descParseFromString	_get_descserialize_to_stringis_compiled_with_cuda
isinstance	CUDAPlacer   r   )r
   r   r   pipeline_optr   schedule_mode_strr   cfgr   r   r   s              r   r   Section._gen_worker_descb  s1    	*9'}}22$22)56H)I&*67J*K''34D'E$,89N,O)(9
 ! %
 
 	L L	L 
 /*<!&3#**01((335	

 W%
+%%''e^^4444MM	r   r'   r   r   s   @r   r   r   [  s    &  & r   r   c                   2   ^  \ rS rSrSrU 4S jrS rSrU =r$ )HeterSectioni  zHeterSectionWorker.c                 "   > [         TU ]  5         gr   r,   r.   s    r   r   HeterSection.__init__  r1   r   c                 "   SUl         U R                  R                  nUR                  nUS   Ul        US   Ul        US   Ul        UR                  nUS   nUR                  R                  UR                  5       R                  5       5        g)z}
Generator worker desc, which device worker is HeterSectionWorker.
Args:
    trainer_desc(TrainerDesc): a TrainerDesc object
HeterSectionWorkerr   r   r   r   N)rM   r   _heter_pipeline_optheter_section_paramr   r   r   r   r   r   r   r   )r
   r   heter_pipeline_optr   r   r   s         r   r   HeterSection._gen_worker_desc  s     +?'!]]>>*>>/A0
, .@.
* 3E!3
/ "00$%67((335	
r   r'   r   r   s   @r   r   r     s    
 
r   r   c                       \ rS rSrS rSrg)DeviceWorkerFactoryi  c                 F    UR                  5       n[        5       U   " 5       $ )N)
capitalizeglobals)r
   worker_type	classnames      r   _create_device_worker)DeviceWorkerFactory._create_device_worker  s     **,	y#%%r   r'   N)r!   r"   r#   r$   r   r&   r'   r   r   r   r     s    &r   r   )r%   rU   __all__r   r)   r   r   r   r   r   r   r'   r   r   <module>r      s}    $ 

1
 1
hQl QhP< Pfr), r)js)\ s)l- l - `
< 
B& &r   