o
    "ÕjîG  ã                   @   s¶   d dl Z d dl mZ d dlmZ d dlmZ ddlT G dd„ dƒZG d	d
„ d
eƒZG dd„ deƒZ	G dd„ deƒZ
G dd„ de
ƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZdS )é    N)Úbase)Úwait_server_ready)Únew_passé   )Ú*c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚPsProgramBuilderc                 C   sÀ   || _ | j j| _| jd | _| jd | _| jd | _| jd | _| jd | _| jd | _| jd | _	| jd | _
| jd	 | _| jd
 | _| jd | _| jd | _| jd | _| jd  ¡ | _d S )NÚlossÚorigin_startup_programZorigin_main_programsÚcloned_mainÚcloned_startupÚ
use_ps_gpuZis_heter_ps_modeÚ	is_workerÚis_heter_workerÚ	is_serverÚps_modeÚlaunch_barrierÚlaunch_barrier_flagZ
role_maker)Úpass_ctxÚ_attrsÚattrsr   r	   Zmain_programr
   r   r   Zuse_heter_psr   r   r   r   r   r   Z_get_pserver_endpointsÚserver_endpoints©Úselfr   © r   úo/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/distributed/ps/utils/ps_program_builder.pyÚ__init__   s(   
ÿþzPsProgramBuilder.__init__c                 C   sH   | j jjj}|d u ri n|}| dd¡|d< | dd¡|d< || j_d S )NÚtrainerZMultiTrainerÚdevice_workerZHogwild)r   ÚblockÚprogramÚ
_fleet_optÚgetr
   )r   Úopt_infor   r   r   Ú_build_trainer_desc1   s
   z$PsProgramBuilder._build_trainer_descc                 C   s   d S ©Nr   ©r   r   r   r   Ú_optimize_programs8   ó   z#PsProgramBuilder._optimize_programsc                 C   s   t ‚r$   )ÚNotImplementedErrorr%   r   r   r   Ú_build_trainer_programs;   r'   z(PsProgramBuilder._build_trainer_programsc                 C   sf   d}t | jd ƒ}t|ƒdkrd S td| jƒ}| g g | j¡ |D ]}|jdv r,d} nq!|r1d S d S )NFÚorigin_main_programr   Úadd_lr_decay_table_pass)ZsgdZadamT)Zget_optimize_opsr   Úlenr   Úapplyr   Útype)r   Zis_sgd_adamÚopsr+   Úopr   r   r   Ú_build_pserver_programs>   s    ÿ
þÿz(PsProgramBuilder._build_pserver_programsc                 C   s†   | j d r%|  ¡  tj | j¡ td tj	j
¡ƒ |  ¡  | j| jj_d S | j d rA|  ¡  | j d | jj_tj | j d ¡ d S d S )Nr   ú)paddle.static.default_startup_program: {}r   Ú_main_serverÚ_startup_server)r   r)   r   Ú	frameworkÚswitch_startup_programr   ÚprintÚformatÚpaddleÚstaticÚdefault_startup_programr#   r
   r   r   r   r1   r%   r   r   r   Ú_build_programsN   s   
ÿÿ
ýz PsProgramBuilder._build_programsN)	Ú__name__Ú
__module__Ú__qualname__r   r#   r&   r)   r1   r<   r   r   r   r   r      s    r   c                       ó,   e Zd Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )ÚGeoPsProgramBuilderc                    s.   t ƒ  |¡ | jtjkrtdt| jdƒƒ‚d S )Núps mode: {} not matched {}rA   )Úsuperr   r   ÚDistributedModeZGEOÚ
ValueErrorr8   r   ©Ú	__class__r   r   r   h   s   
þÿzGeoPsProgramBuilder.__init__c                 C   sP   t d| jƒ}| | jgd g| j¡ | j| jd< | jr$| jr&t| jƒ d S d S d S )NÚappend_send_ops_passr*   )	r   r   r-   r
   r   r   r   r   r   )r   rH   r   r   r   r)   p   s   ÿz+GeoPsProgramBuilder._build_trainer_programsc                 C   s*   t d| jƒ}| | jd gd g| j¡ d S )NÚadd_listen_and_serv_passr3   )r   r   r-   r   )r   rI   r   r   r   r1   y   s   ÿÿz+GeoPsProgramBuilder._build_pserver_programs)r=   r>   r?   r   r)   r1   Ú__classcell__r   r   rF   r   rA   g   s    	rA   c                       ó$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚNuPsProgramBuilderc                    s"   t ƒ  |¡ | jd stdƒ‚d S )NZlocal_sparsezNo local sparse params)rC   r   r   rE   r   rF   r   r   r   ƒ   s   
ÿzNuPsProgramBuilder.__init__c                 C   s(  t d| jƒ}| g g | j¡ t d| jƒ}| | jgd g| j¡ t d| jƒ}| | jgd g| j¡ t d| jƒ}| | jgd g| j¡ t d| jƒ}| | jd g| jg| j¡ t d| jƒ}| d g| jg| j¡ t d| jƒ}| | jgd g| j¡ | j| jd< | j| jd< | jr| jr’t| j	ƒ d S d S d S ©	Nr+   Údistributed_ops_passÚdelete_optimizer_passrH   Údelete_extra_optimizer_passr*   Úfake_init_ops_passr	   ©
r   r   r-   r   r
   r   r   r   r   r   ©r   r+   rN   rO   rH   rP   rQ   r   r   r   r)   ˆ   s>   ÿÿÿ
ýÿÿz*NuPsProgramBuilder._build_trainer_programs©r=   r>   r?   r   r)   rJ   r   r   rF   r   rL   ‚   s    rL   c                       rK   )ÚCpuSyncPsProgramBuilderc                    s>   t ƒ  |¡ | jtjkr| jtjkrtdt| jdƒƒ‚d S d S )NrB   r   )rC   r   r   rD   ZSYNCÚASYNCrE   r8   r   rF   r   r   r   ²   s   
þýz CpuSyncPsProgramBuilder.__init__c                 C   s  t d| jƒ}| g g | j¡ t d| jƒ}| | jgd g| j¡ t d| jƒ}| | jgd g| j¡ t d| jƒ}| | jgd g| j¡ t d| jƒ}| | jd g| jg| j¡ t d| jƒ}| d g| jg| j¡ | j| jd< | j| jd< | jr| jrt| j	ƒ d S d S d S rM   rR   rS   r   r   r   r)   ½   s2   ÿÿ
ýÿz/CpuSyncPsProgramBuilder._build_trainer_programsrT   r   r   rF   r   rU   ±   s    rU   c                       rK   )ÚCpuAsyncPsProgramBuilderc                    ó   t ƒ  |¡ d S r$   ©rC   r   r   rF   r   r   r   ä   ó   z!CpuAsyncPsProgramBuilder.__init__c           	      C   s  | j jjj}|d u ri n|}| dd¡|d< | dd¡|d< tt| jƒƒ}|g g g g dœi}i }t| j	ƒ}t
| j	ƒ}| ¡ D ]9\}}| ¡ t| j jjƒkrNq>| ¡ rSq>| ¡ sm|| d  | ¡ ¡ || d  | ¡ ¡ || ¡  || ¡ < q>||d< ||d	< || j_d S )
Nr   ZDistMultiTrainerr   ZDownpourLite)Ú
pull_denseÚ
push_denseZpull_sparseZpush_sparser[   r\   Úprogram_configsÚdense_table_config)r   r   r   r    r!   ÚstrÚidr
   Zget_the_one_send_contextr   Zget_the_one_recv_contextÚitemsZ
program_idZ	is_sparseZis_tensor_tableÚappendZtable_id)	r   r"   Úpidr]   r^   Zsend_ctxZrecv_ctxÚnameÚctxr   r   r   r#   ç   s:   ÿüÿ

z,CpuAsyncPsProgramBuilder._build_trainer_desc)r=   r>   r?   r   r#   rJ   r   r   rF   r   rW   ã   ó    rW   c                       rK   )ÚGpuPsProgramBuilderc                    rX   r$   rY   r   rF   r   r   r   	  rZ   zGpuPsProgramBuilder.__init__c                 C   sò   t d| jƒ}| g g | j¡ t d| jƒ}| | jgd g| j¡ t d| jƒ}| d g| jg| j¡ t d| jƒ}| | jgd g| j¡ t| jd ddƒs\t d| jƒ}| | jg| jg| j¡ | j| jd	< | j| jd
< | jru| jrwt	| j
ƒ d S d S d S )Nr+   rN   rQ   Úps_gpu_passZuser_defined_strategyZshardingFÚps_transpile_passr*   r	   )r   r   r-   r   r
   r   Úgetattrr   r   r   r   )r   r+   rN   rQ   rh   ri   r   r   r   r)     s(   ÿÿÿz+GpuPsProgramBuilder._build_trainer_programsrT   r   r   rF   r   rg     rf   rg   c                       r@   )ÚHeterAsyncPsProgramBuilderc                    rX   r$   rY   r   rF   r   r   r   )  rZ   z#HeterAsyncPsProgramBuilder.__init__c           
      C   s^  t d| jƒ}| g g | j¡ t d| jƒ}| | jgd g| j¡ t d| jƒ}| | jgd g| j¡ t d| jƒ}| | jgd g| j¡ t d| jƒ}| | jd g| jg| j¡ t d| jƒ}| d g| jg| j¡ | jr{t d| jƒ}| | jgd g| j¡ nt d	| jƒ}| | jgd g| j¡ t d
| jƒ}	|	 | jg| jg| j¡ | jr«| jr­t	| j
ƒ d S d S d S )Nr+   rN   rO   rH   rP   r*   rQ   Úsplit_heter_worker_ops_passÚsplit_trainer_ops_passÚset_heter_pipeline_opt_pass)r   r   r-   r   r
   r   r   r   r   r   r   )
r   r+   rN   rO   rH   rP   rQ   rl   rm   rn   r   r   r   r)   ,  sT   ÿÿ
ýÿÿÿÿÿÿÿz2HeterAsyncPsProgramBuilder._build_trainer_programsc                 C   s€   | j d s
| j d r"|  ¡  td| j ƒ}| | jg| jg| j¡ d S | j d r>|  ¡  | j d | jj	_
tj | j d ¡ d S d S )Nr   r   rn   r   r3   r4   )r   r)   r   r-   r
   r   r   r1   r   r   r   r   r5   r6   )r   Zps_set_heter_pipeline_opt_passr   r   r   r<   `  s   ÿÿ
ýz*HeterAsyncPsProgramBuilder._build_programs)r=   r>   r?   r   r)   r<   rJ   r   r   rF   r   rk   (  s    4rk   c                       s4   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Z‡  ZS )	ÚFlPsProgramBuilderc                    rX   r$   rY   r   rF   r   r   r   q  rZ   zFlPsProgramBuilder.__init__c                 C   sÂ  t d }td| jƒ}| | jgd g| j¡ t d }td| jƒ}| | jgd g| j¡ t d }td| jƒ}| | jgd g| j¡ t d }td| jƒ}| | jd	 g| jg| j¡ t d
 }t d }td| jƒ}| | jgd g| j¡ | js‰| jjd | _	| j	| _t d }t
|| jƒ n| jjd | _| j| _t d }t
|| jƒ td| jƒ}| | jg| jg| j¡ | j| jd< | j| jd	< | jsÐt d }t
|| jd	 jd ƒ d S t d }t
|| jd	 jd ƒ d S )Nz!0_fl_worker_main_program.prototxtrN   z!1_fl_worker_main_program.prototxtrO   z!2_fl_worker_main_program.prototxtrH   z!3_fl_worker_main_program.prototxtrP   r*   z!4_fl_worker_main_program.prototxtz!5_fl_worker_main_program.prototxtZsplit_fl_ops_passZpart_a_main_programz8_fl_A_main_program.prototxtZpart_b_main_programz8_fl_B_main_program.prototxtrn   r	   z final_fl_A_main_program.prototxtZsection_programz final_fl_B_main_program.prototxt)Zps_log_root_dirr   r   r-   r
   r   r   r   r   Zpart_a_programZdebug_programZpart_b_programÚ_heter_pipeline_opt)r   Z
_main_filerN   rO   rH   rP   rm   rn   r   r   r   r)   t  sl   ÿ
ýÿÿ
ÿþ
ÿþz*FlPsProgramBuilder._build_trainer_programsc                 C   s   | j d | jj_d S )Nr3   )r   r   r   r   r%   r   r   r   r1   Å  s   z*FlPsProgramBuilder._build_pserver_programsc                 C   st   | j s"|  ¡  tj | j¡ tj | j¡ t	d 
tj ¡ j¡ƒ d S |  ¡  tj | jd ¡ tj | jd ¡ d S )Nr2   r4   r3   )r   r)   r   r5   r6   r   r9   Zswitch_main_programr
   r7   r8   r:   r;   rp   r1   r   r%   r   r   r   r<   È  s   
ÿÿz"FlPsProgramBuilder._build_programs)r=   r>   r?   r   r)   r1   r<   rJ   r   r   rF   r   ro   p  s
    Qro   )r9   r   Z5paddle.distributed.fleet.base.private_helper_functionr   Zpaddle.distributed.passesr   Úpublicr   rA   rL   rU   rW   rg   rk   ro   r   r   r   r   Ú<module>   s   N/2% H