o
    "j!                     @   s<   d dl Z d dlZd dlZddlmZmZ G dd deZdS )    N   )ControleMode
Controllerc                   @   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	
| j d tj|j _dS dS )Nr   z enabledTF)argsZrun_moder   ZPS
server_numlenserverstrainer_numtrainersloggerdebug__name__)clsctx r   i/var/www/html/Deteccion_Ine/venv/lib/python3.10/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 t| j jjd}t| j jj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|rit| | j jj}	d|d dd |	}
d	||
| j jjd
}t|D ]0}| j jj| j jj|| dd ddt| | j jjd}|| d| }| j||d qd}|D ]}| r n|d7 }qt|D ]4}d|d||| dd dd||  t| | j jjd}|| d| }| j||d qd S )Nz	127.0.0.1,c                       g | ]	}|  r|qS r   
startswith.0shostr   r   
<listcomp>4   
    
z5PSController._build_pod_with_args.<locals>.<listcomp>c                    r   r   r   r   r    r   r   r"   7   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+   r,   r-   PADDLE_TRAINER_IDr.   r/   
workerlog.)r   r   r	   nodeiplistsplitr   r   podreplicassave_pod_logtempfilemkdtempospathexistsshutilrmtree	gloo_portformat	with_gloorangeupdateadd_containerr   join)r   server_endpointstrainer_endpointsr	   r   r   r
   r=   gloo_rendezvous_dirrD   	gloo_http
_gloo_envsier2   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 d 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 ]6} jj d#|d#|	|||
   dd ddt$|	  jjj%d}|&| d| } j'||d qt"|D ];} jj d#|d#|	|	||   dd dd||  t$|	  jjj%d	}|&| d| } j'||d qd S )Nr   c                        g | ]} j jj d | qS r%   r   r6   r7   r   pr   r   r   r"   y       z7PSController._build_pod_with_master.<locals>.<listcomp>c                    rS   rT   rU   rV   r   r   r   r"   ~   rX   )namerankr	   r   dtyperD   /z/infozsync peers done c                 S   s   g | ]}t |qS r   )jsonloadsr   rP   r   r   r   r"      s    c                 S      g | ]}|d  D ]}|qqS r	   r   r   rP   jr   r   r   r"          c                 S   r`   r   r   rb   r   r   r   r"      rd   c                 S      g | ]}t |d  qS ra   r   r_   r   r   r   r"          c                 S   rf   re   rg   r_   r   r   r   r"      rh   r   rD   r$   r%   r&   r'   r   r(   )PADDLE_NNODESr)   r*   r+   r,   r-   r.   r/   r0   r1   r3   )	ri   r)   r*   r+   r,   r-   r4   r.   r/   r5   )(intr   r   rZ   r:   r   r6   Zget_free_portsr
   r]   dumpsrY   Zdevicer[   Zget_free_portZmasterZ
sync_peersZjobidr;   r   r   r<   sumr=   r>   r?   r@   rA   rB   rC   rE   r9   rF   rG   rJ   r   r7   rH   rI   )r   r   r	   r
   r   dataZ	peer_listrZ   rK   rL   Zserver_rank_offsetrR   r=   rM   rD   rN   rO   rP   rQ   r2   r   r   r   r   u   s   









z#PSController._build_pod_with_masterN)r   
__module____qualname__classmethodr   r   r   r   r   r   r   r   r      s    
Ir   )r]   r?   rB   
controllerr   r   r   r   r   r   r   <module>   s
   