
    v-ji                         d Z ddlZg Z G d d          Z G d de          Z G d de          Z G d	 d
e          Z G d de          Z G d de          Z G d de          Z	 G d d          Z
dS )zDefinition of device workers.    Nc                   2    e Zd ZdZd Zd	dZd Zd Zd ZdS )
DeviceWorkerz
    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                 "    d| _         d| _        dS zInit.N)_program_infer)selfs    Y/var/www/html/banglarbhumi/venv/lib/python3.11/site-packages/paddle/base/device_worker.py__init__zDeviceWorker.__init__   s        Fc                     || _         dS )z~
        set inference flag for current device worker

        Args:
            infer(bool): whether to do inference
        N)r   )r	   infers     r
   
_set_inferzDeviceWorker._set_infer!   s     r   c                     || _         dS )zn
        Set fleet desc.

        Args:
            fleet_desc(PSParameter): pslib.PSParameter object
        N)_fleet_desc)r	   
fleet_descs     r
   _set_fleet_desczDeviceWorker._set_fleet_desc*   s     &r   c                     || _         dS )z\
        Set program.

        Args:
            program(Program): a Program object
        N)r   )r	   programs     r
   _set_programzDeviceWorker._set_program3   s      r   c                      t          d          )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_desczDeviceWorker._gen_worker_desc<   s     "6
 
 	
r   N)F)	__name__
__module____qualname____doc__r   r   r   r   r    r   r
   r   r      sn           
   & & &     

 

 

 

 

r   r   c                   (     e Zd ZdZ fdZd Z xZS )Hogwildz.
    Hogwild is a kind of SGD algorithm.

    c                 H    t                                                       dS r   superr   r	   	__class__s    r
   r   zHogwild.__init__O       r   c                    d|_         | j        r!|j        j                            g d           t                      }t          t          | j                            }t          d|           | j        #t          d           t          j        d           | j        j        }|sdS |j        }|j        }|d         rA|d         D ]8}|j                            |g           |j                            |g           9dd	lm} |                                r
d
|vrd|vrdS |d         }	t          d|	           |	D ]3}
t          d|
|           |
|k    r|j                                        }||_        t          d|	|         d                    |	|         d         D ]}|j                            |g           |	|         d         D ]2}|j                            |g           |                    |           3|	|         d         D ]}|j                            |g           |	|         d         D ]2}|j                            |g           |                    |           3 n5d|_         |j        }|j        |_        |                    d          $|                    d          t;          d          |                    d          |d         }|                    |          t;          | d          |d         |         }|                                j        D ]O}|j         |v rD|j                                        }|j!                            |j"                   |j         |_         PtG          |                                j$                  }tK          |          D ]2}|j$                                        }|                                j$        |         j         |_         |j&                            |                                j$        |         j'                   |j(                            |                                j$        |         j)                   |j*                            |                                j$        |         j+                   | j,        j-        j.        j/        |         j0        j1        |_1        d|_2        d|_3        4|                                j        D ]n}|j         |v rc|j                                        }|j         |_         |j!                            |j"                   |j4                            |j5                   o|j                            |                                j6                   ny|                    d          }t          d|           |7                                D ]?\  }}|j                                        }|j!                            |           ||_         @| j        r|j                            g d           dS dS )z
        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_sparser,   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:r:   r+   r,   )8device_worker_namer   hogwild_paramskip_opsextendsetstridr   printsysexit
_fleet_optdownpour_paramr2   2paddle.incubate.distributed.fleet.parameter_serverr4   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_setrS   opt_infodownpourhogwildir4   r5   pidpcpull_threadprog_id_to_workerworkerr^   
sparse_lenrc   r=   r_   varnamess                        r
   r   zHogwild._gen_worker_descS   s    +:'; 
	&/66     %%DM**++
):666= FGGGHRLLL=+ 	F.,$% 	4./ 4 4&--qc222'..s3333NNNNNN !!##	H,,!11F"#45.@@@" 	 	C/3
333j  ,0022 */#J/=   )4]C 8 8A+22A37777(4\B + +A*111#666#''****(4]C 8 8A+22A37777(4\B + +A*111#666#''****# !& +:'"3!-!8LL/008122:O   <<.//; ()? @ $$Z008 !EEE   45jAF__&&2 6 6:00"-"9"="="?"?K0778MNNN+,:K(V__..;<<J:&& 1 1'488::OO%%215> % ,33OO%%215>   .55OO%%215@   -44OO%%215C   (,'7'D'Z'o(7 $ (*$.0++__&&2  :00"*"6":":"<"<K+,:K(0778MNNN/666   ##FOO$5$5$=>>>>!).B!C!C57IJJJ&8&>&>&@&@ 0 0"()599;;,33H==='/$$; 	##???    	 	r   r   r   r   r   r   r   __classcell__r&   s   @r
   r!   r!   I   sX         
    G G G G G G Gr   r!   c                   (     e Zd ZdZ fdZd Z xZS )DownpourLitez3
    DownpourLite is a kind of SGD algorithm.

    c                 H    t                                                       dS r   r#   r%   s    r
   r   zDownpourLite.__init__   r'   r   c                 V   t          d           d|_        | j        r!|j        j                            g d           t                      }t          t          | j	                            }t          d|           | j	        #t          d           t          j        d           | j	        j        }|sdS |j        }|d         r&|d         D ]}|j                            |g           d	d
lm} |                                r
d|vrd|vrdS |d         }t          d|           |D ]3}	t          d|	|           |	|k    r|j                                        }
||
_        t          d||         d                    ||         d         D ]}|
j                            |g           ||         d         D ]2}|
j                            |g           |                    |           3||         d         D ]}|
j                            |g           ||         d         D ]2}|
j                            |g           |                    |           3 n5|j        }|j        |_        |                    d          $|                    d          t9          d          |                    d          |d         }|                    |          t9          | d          |d         |         }|                                j        D ]O}|j        |v rD|j                                        }|j                             |j!                   |j        |_        PtE          |                                j#                  }tI          |          D ]2}|j#                                        }|                                j#        |         j        |_        |j%                            |                                j#        |         j&                   |j'                            |                                j#        |         j(                   |j)                            |                                j#        |         j*                   | j+        j,        j-        j.        |         j/        j0        |_0        d|_1        d|_2        4|                                j        D ]n}|j        |v rc|j                                        }|j        |_        |j                             |j!                   |j3                            |j4                   o|j                            |                                j5                   ny|                    d          }t          d|           |6                                D ]?\  }}|j                                        }|j                             |           ||_        @| j        r|j                            g d           dS dS )z
        Generator worker desc, which device worker is DownpourLiteWorker.

        Args:
            trainer_desc(TrainerDesc): a TrainerDesc object
        zcreate DownpourLiteWorkerDownpourLiteWorker)r*   r:   r+   r,   r-   r.   r/   Nr0   r1   r2   r   r3   r   r5   r6   r7   r8   r9   r:   r,   r;   r<   r=   r>   r?   r@   rA   rB   )7rJ   rC   r   rN   rE   rF   rG   rH   rI   r   rK   rL   rM   r2   rO   r4   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   r   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   )r	   r   rv   rS   rw   rx   rz   r4   r5   r{   r|   r}   r~   r   r^   r   rc   r=   r_   r   s                       r
   r   zDownpourLite._gen_worker_desc   s    	)****>'; 	'077  	 	 	 %%DM**++
):666= FGGGHRLLL=+ 	F.$% 	4./ 4 4'..s3333NNNNNN !!##	H,,!11F"#45.@@@" 	 	C/3
333j  ,0022 */#J/=   )4]C 8 8A+22A37777(4\B + +A*111#666#''****(4]C 8 8A+22A37777(4\B + +A*111#666#''****# !& #3!-!8LL/008122:O   <<.//; ()? @ $$Z008 !EEE   45jAF__&&2 6 6:00"-"9"="="?"?K0778MNNN+,:K(V__..;<<J:&& 1 1'488::OO%%215> % ,33OO%%215>   .55OO%%215@   -44OO%%215C   (,'7'D'Z'o(7 $ (*$.0++__&&2  :00"*"6":":"<"<K+,:K(0778MNNN/666   $$V__%6%6%>????!).B!C!C57IJJJ&8&>&>&@&@ 0 0"()599;;,33H==='/$$; 	$$???    	 	r   r   r   s   @r
   r   r      sX         
    F F F F F F Fr   r   c                   (     e Zd ZdZ fdZd Z xZS )DownpourSGDz=
    DownpourSGD is a kind of distributed SGD algorithm.
    c                 H    t                                                       dS )zD
        Init.
        initialize downpourSGD device worker
        Nr#   r%   s    r
   r   zDownpourSGD.__init__u  !    
 	r   c                 $   t                      }t          t          | j                            }| j        #t	          d           t          j        d           | j        j        }|d         }|j        }|D ]_}||k    rU|j	        
                                }||_        ||         d         D ]}	|j                            |	g           ||         d         D ]2}	|j                            |	g           |
                    |	           3||         d         D ]}	|j                            |	g           ||         d         D ]2}	|j                            |	g           |
                    |	           3d	||         v rO||         d	         }
|
                                D ],\  }}|j        
                                }||_        ||_        - na|                    d
d          |_        |j        }|j        |_        |                    d          t5          d          |d         }|                    |          t5          | d          |d         |         }|                                j        D ]O}	|	j        |v rD|j        
                                }|j                            |	j                   |	j        |_        PtA          |                                j!                  }tE          |          D ]}	|j!        
                                }|                                j!        |	         j        |_        |j#                            |                                j!        |	         j$                   |j%                            |                                j!        |	         j&                   |j'                            |                                j!        |	         j(                   |d         sd|v rB|d         du r8| j)        j*        j+        j,        |	         j-        j.        |_/        |j/        |_.        n=| j)        j*        j+        j,        |	         j-        j.        dz
  |_/        |j/        dz   |_.        d|_0        |d         r&|d         D ]}	|j1                            |	g           |                                j        D ]n}	|	j        |v rc|j        
                                }|	j        |_        |j                            |	j                   |j2                            |	j3                   o|j4                            |                                j5                   | j6        rd|_7        d|_8        dS dS )
        Generator worker desc, which device worker is DownpourWorker.

        Args:
            trainer_desc(TrainerDesc): a TrainerDesc object
        Nr0   r1   r5   r:   r,   r;   r9   cond2denseidworker_classDownpourWorkerr<   'opt_info must have program_id_to_workerr?   use_cvmno_cvmT   clickr2   F)9rG   rH   rI   r   rJ   rK   rL   rM   rN   rQ   rR   rS   rT   rF   rU   rV   rW   ru   partial_pushdense_condtable_mapkeyvaluer[   rC   rX   rY   rZ   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   r   rk   rl   rm   rn   ro   rp   rq   r2   rr   rs   rE   rt   r   r,   r:   )r	   r   rv   rS   rw   r5   rx   r{   r|   rz   r   r   r   mc_mapr}   r~   r   r^   r   rc   s                       r
   r   zDownpourSGD._gen_worker_desc|  s    %%DM**++
= FGGGHRLLL=+"#45." 	 	Cj  ,0022 *(4]C 8 8A+22A37777(4\B + +A*111#666#''****(4]C 8 8A+22A37777(4\B + +A*111#666#''****!_Z%@@@#2:#>~#NL&2&8&8&:&: - -
U!#!C!G!G!I!I%(
',) !, +3,,,+
 +
' #3!-!8<<.//7FGGG$%;<  ,,4
NNNOOO01*="". 	2 	2Az_,,)599;;,33A4IJJJ'(z$**788
z"" 	2 	2A#04466L$*OO$5$5$B1$E$NL!(//!!.q1:   *11!!.q1<   )00!!.q1?   #@x''X&$..'+'7'D'Z'o(7 $ (4';$$ $1G\w $ (4';a'?$*1L''$% 	4./ 4 4'..s3333"". 	 	Az_,,&26688'(z$,33A4IJJJ+222   	  !2!2!:;;;; 	)"'H#(H   	) 	)r   r   r   s   @r
   r   r   p  sX             f) f) f) f) f) f) f)r   r   c                   (     e Zd ZdZ fdZd Z xZS )DownpourSGDOPTz@
    DownpourSGDOPT is a kind of distributed SGD algorithm.
    c                 H    t                                                       dS )zG
        Init.
        initialize downpourSGDOPT device worker
        Nr#   r%   s    r
   r   zDownpourSGDOPT.__init__  r   r   c                 
   t                      }t          t          | j                            }| j        #t	          d           t          j        d           | j        j        }|d         }|j        }|D ]}||k    r|j	        
                                }||_        ||         d         D ]}	|j                            |	g           ||         d         D ]2}	|j                            |	g           |
                    |	           3||         d         D ]}	|j                            |	g           ||         d         D ]2}	|j                            |	g           |
                    |	           3 nd	|_        |j        }
|j        |
_        |                    d
          t-          d          |d
         }|                    |          t-          | d          |d
         |         }|                                j        D ]O}	|	j        |v rD|
j        
                                }|j                            |	j                   |	j        |_        Pt9          |                                j                  }t=          |          D ]}	|j        
                                }|                                j        |	         j        |_        |j                            |                                j        |	         j                    |j!                            |                                j        |	         j"                   |j#                            |                                j        |	         j$                   |d         sd|v rB|d         du r8| j%        j&        j'        j(        |	         j)        j*        |_+        |j+        |_*        n=| j%        j&        j'        j(        |	         j)        j*        dz
  |_+        |j+        dz   |_*        d|_,        d|v r|j        |d         v rd|_-        d|v r|j        |d         v rd|_.        |d         r&|d         D ]}	|j/                            |	g           |                                j        D ]n}	|	j        |v rc|j        
                                }|	j        |_        |j                            |	j                   |j0                            |	j1                   o|j2                            |                                j3                   | j4        rd|_5        d|_6        dS dS )r   Nr0   r1   r5   r:   r,   r;   r9   DownpourWorkerOptr<   r   r?   r   r   Tr   r   local_tablesasync_tablesr2   F)7rG   rH   rI   r   rJ   rK   rL   rM   rN   rQ   rR   rS   rT   rF   rU   rV   rW   rC   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   r   rk   rl   rm   rn   ro   rp   rq   is_localis_asyncr2   rr   rs   rE   rt   r   r,   r:   )r	   r   rv   rS   rw   r5   rx   r{   r|   rz   r}   r~   r   r^   r   rc   s                   r
   r   zDownpourSGDOPT._gen_worker_desc  s    %%DM**++
= FGGGHRLLL=+"#45." 	 	Cj  ,0022 *(4]C 8 8A+22A37777(4\B + +A*111#666#''****(4]C 8 8A+22A37777(4\B + +A*111#666#''**** ! +>'"3!-!8<<.//7FGGG$%;<  ,,4
NNNOOO01*="". 	2 	2Az_,,)599;;,33A4IJJJ'(z$**788
z"" 	2 	2A#04466L$*OO$5$5$B1$E$NL!(//!!.q1:   *11!!.q1<   )00!!.q1?   #@x''X&$..'+'7'D'Z'o(7 $ (4';$$ $1G\w $ (4';a'?$*1L''h&&%.)AAA$(L!h&&%.)AAA$(L!$% 	4./ 4 4'..s3333"". 	 	Az_,,&26688'(z$,33A4IJJJ+222   	  !2!2!:;;;; 	)"'H#(H   	) 	)r   r   r   s   @r
   r   r     sX             g) g) g) g) g) g) g)r   r   c                   (     e Zd ZdZ fdZd Z xZS )SectionzSectionWorker.c                 H    t                                                       dS r   r#   r%   s    r
   r   zSection.__init__^  r'   r   c                 2   ddl m} d|_        | j        j        }|j        }|d         |_        |d         |_        |d         |_        |d         |_	        |d         }|d	v s
J d
            |dk    rdnd}||_
        |j        }|d         }|j                            |                                                                           |d         }	|d         }
|                                rt#          |	|j                  sJ |j        |_        |
|_        dS )z
        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)r@   r   rC   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   zSection._gen_worker_descb  s]    	*9'}2$2)56H)I&*67J*K''34D'E$,89N,O)(9
 ! %
 
 
 
 L
 
 
 /*<<!&3#*01((3355	
 	
 	

 W%
+%%'' 	5eT^44444M	r   r   r   s   @r
   r   r   [  sM            &  &  &  &  &  &  & r   r   c                   (     e Zd ZdZ fdZd Z xZS )HeterSectionzHeterSectionWorker.c                 H    t                                                       dS r   r#   r%   s    r
   r   zHeterSection.__init__  r'   r   c                 "   d|_         | j        j        }|j        }|d         |_        |d         |_        |d         |_        |j        }|d         }|j        	                    |
                                                                           dS )z
        Generator worker desc, which device worker is HeterSectionWorker.
        Args:
            trainer_desc(TrainerDesc): a TrainerDesc object
        HeterSectionWorkerr   r   r   r   N)rC   r   _heter_pipeline_optheter_section_paramr   r   r   r   r   r   r   r   )r	   r   heter_pipeline_optr   r   r   s         r
   r   zHeterSection._gen_worker_desc  s     +?'!]>*>/A0
, .@.
* 3E!3
/ "0$%67((3355	
 	
 	
 	
 	
r   r   r   s   @r
   r   r     sM            
 
 
 
 
 
 
r   r   c                       e Zd Zd ZdS )DeviceWorkerFactoryc                 b    |                                 } t                      |                     S )N)
capitalizeglobals)r	   worker_type	classnames      r
   _create_device_workerz)DeviceWorkerFactory._create_device_worker  s*    **,,	#wyy#%%%r   N)r   r   r   r   r   r   r
   r   r     s#        & & & & &r   r   )r   rK   __all__r   r!   r   r   r   r   r   r   r   r   r
   <module>r      s   $ # 




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