o
    * i                     @   s@   d dl Z d dlmZmZmZmZ g Zdd Zdd Zdd Z	dS )	    N)get_clusterget_cluster_from_argsget_gpusloggerc              
      s@  t d}|dusJ dt d}|dusJ dt d}|dus'J dtt d}|dus6J d	|d
}t|}t|}|dkrW||krWtd| d| d | dkrn| d
|krntd|  d| d t d}	|	du r|}
|dkrztt dd}|t|kr||krtd| d |}
W n ty } z
t	| W Y d}~nd}~ww |
du rd}
t
t|
|
t| }g }	|D ] |	 fdd|D  qn'|	d
}g }	|| t|ksJ t|D ]}|	||| |d |   qtd| d| d| d|	  t|||	|\}}||j| fS )zZ
    args_node_ips:string, args_node_ip:string, args_port: int, selected_devices:list
    ZPADDLE_TRAINERSNz"PADDLE_TRAINERS should not be NoneZPOD_IPzPOD_IP should not be NoneZPADDLE_TRAINER_IDz$PADDLE_TRAINER_ID should not be NoneZTRAINER_PORTS_NUMz$TRAINER_PORTS_NUM should not be None,z	127.0.0.1zcPlease NOTE: When using paddlecloud, node_ip is automatically got from POD_IP. Your input node_ip: z doesn't equals to node_ip: z from paddlecloud environment.zPlease NOTE: When using paddlecloud, cluster_node_ips is automatically got from PADDLE_TRAINERS(multi nodes) or POD_IP(single node).Your input cluster_node_ips: z doesn't equals to IPs: ZDISTRIBUTED_TRAINER_ENDPOINTS   ZPADDLE_PORT zUse Cloud specified port:.i  c                    s   g | ]	}  d | qS ): ).0portipr   j/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/paddle/distributed/cloud_utils.py
<listcomp>W   s    z%get_cloud_cluster.<locals>.<listcomp>zparsed from args: node_ips:z         node_ip:z node_rank:z trainer_endpoints:)osgetenvintsplitlenr   warningjoin	Exceptionprintlistrangeappenddebugr   Zpods)Zargs_node_ipsZargs_node_ipZ	args_portselected_devicesZnode_ipsnode_ipZ	node_rankZpaddle_ports_numZ	num_nodesZtrainer_endpointsstarted_portZpaddle_porteZportsZtrainer_endpoints_oriiclusterpodr   r   r   get_cloud_cluster   s   




	
r&   c                   C   s   t tddS )NZPADDLE_TRAINERS_NUM1)r   r   r   r   r   r   r   _get_trainers_numn   s   r(   c                 C   s   t | j}t }td| d|  d }d }| jr6|dkr6t| j| j| j	|\}}t
d|  ||fS t| |\}}t
d|  ||fS )Nzparsed from args trainerss_num:z selected_devices:r   zget cluster from cloud:zget cluster from args:)r   r   r(   r   r   Zuse_paddlecloudr&   Zcluster_node_ipsr    r!   infor   )argsr   Ztrainers_numr$   r%   r   r   r   get_cluster_and_podr   s&   
r+   )
r   Z%paddle.distributed.utils.launch_utilsr   r   r   r   __all__r&   r(   r+   r   r   r   r   <module>   s   S