o
    Me#                     @   s<   d dl mZmZ ddlZddlZddlZG dd deZdS )   )
ControllerControleMode    Nc                   @   s0   e Zd Zedd Zdd Zdd Zdd Zd	S )
PSControllerc                 C   sd   |j jtjks|j jst|j jdks|j jst|j jdkr0|j	
d| j tj|j _dS dS )Nr   z
{} enabledTF)argsZrun_moder   ZPS
server_numlenserverstrainer_numtrainersloggerdebugformat__name__)clsctx r   XD:\Projects\ConvertPro\env\Lib\site-packages\paddle/distributed/launch/controllers/ps.pyenable   s    
zPSController.enablec                 C   s,   | j jjr| j jjr|   d S |   d S )N)r   r   r	   r   _build_pod_with_args_build_pod_with_masterselfr   r   r   	build_pod"   s   zPSController.build_podc                    s&  d| j jjv r
d n| j jj dd | j jjdD }dd | j jjdD } fdd| j jjdD } fdd| j jjdD }t|}t|}|| | j_	| 
||g dd l}| }tj|rot| | j jj}	d	|d d
d |	}
d||
| j jjd}t|D ]2}| j jj| j jj|| d
d dddt|| j jjd}|| d|}| j||d qd}|D ]}| r n|d7 }qt|D ]8}d|d||| d
d ddd|| dt|| j jjd}|| d|}| j||d qd S )Nz	127.0.0.1c                 S      g | ]}|qS r   r   .0sr   r   r   
<listcomp>.       z5PSController._build_pod_with_args.<locals>.<listcomp>,c                 S   r   r   r   r   r   r   r   r   /   r   c                       g | ]	}|  r|qS r   
startswithr   hostr   r   r   0   
    
c                    r!   r   r"   r   r$   r   r   r   3   r&   r   {}:{}:3ZPADDLE_GLOO_RENDEZVOUSZPADDLE_GLOO_FS_PATHZPADDLE_GLOO_HTTP_ENDPOINTZPADDLE_WITH_GLOOr   PSERVER{})PADDLE_PSERVERS_IP_PORT_LISTPADDLE_TRAINER_ENDPOINTSPADDLE_PORTPADDLE_ROLETRAINING_ROLEPADDLE_TRAINERS_NUMPOD_IPserverlog.{}Zenvslog_fileTRAINER)r-   r.   r/   r0   r1   PADDLE_TRAINER_IDr2   r3   workerlog.{})r   r   r	   nodeipsplitr   r   podreplicassave_pod_logtempfilemkdtempospathexistsshutilrmtree	gloo_portr   	with_gloorangeupdateadd_containerr#   join)r   server_endpointstrainer_endpointsr	   r   r   r
   r@   gloo_rendezvous_dirrG   	gloo_http
_gloo_envsier6   trainer_rank_offsetr   r   r$   r   r   (   sr   





	





z!PSController._build_pod_with_argsc                    s  t  jjj j_ jjjpd} fdd jj|D } jjjp$d} fdd jj|D }t	
 jj jj|| jjjj jj d} jd jj jj| jj jj\}} jjd| dd |D } | d	d |D }d
d |D }	tdd |d | D }
tdd |d | D }| j_||  j_dd l}| }tj|rt| |d d }d|d  dd |}d|| jjj!d}t"|D ]:}d jjd#|d#|	|||
   dd dddt$|	 jjj%d}|&| d|} j'||d qt"|D ]A}d jjd#|d#|	|	||   dd ddd|| dt$|	 jjj%d	}|&| d|} j'||d qd S )Nr   c                       g | ]}d   jjj|qS r'   r   r   r:   r;   r   pr   r   r   r   u       z7PSController._build_pod_with_master.<locals>.<listcomp>c                    rU   rV   rW   rX   r   r   r   r   z   rZ   )namerankr	   r   dtyperG   z/{}/infozsync peers done {}c                 S   s   g | ]}t |qS r   )jsonloadsr   rR   r   r   r   r      s    c                 S      g | ]}|d  D ]}|qqS r	   r   r   rR   jr   r   r   r          c                 S   ra   r   r   rc   r   r   r   r      re   c                 S      g | ]}t |d  qS rb   r   r`   r   r   r   r          c                 S   rg   rf   rh   r`   r   r   r   r      ri   r   rG   r'   r(   r)   r*   r,   r    r+   )PADDLE_NNODESr-   r.   r/   r0   r1   r2   r3   r4   r5   r7   )	rj   r-   r.   r/   r0   r1   r8   r2   r3   r9   )(intr   r   r\   r=   r   r:   Zget_free_portsr
   r^   dumpsr[   Zdevicer]   Zget_free_portZmasterZ
sync_peersr   Zjobidr>   r   r   r?   sumr@   rA   rB   rC   rD   rE   rF   r<   rH   rI   rL   r   r;   rJ   rK   )r   r   r	   r
   r   dataZ	peer_listr\   rM   rN   Zserver_rank_offsetrT   r@   rO   rG   rP   rQ   rR   rS   r6   r   r   r   r   p   s   



	





z#PSController._build_pod_with_masterN)r   
__module____qualname__classmethodr   r   r   r   r   r   r   r   r      s    

Hr   )
controllerr   r   r^   rB   rE   r   r   r   r   r   <module>   s   