o
    "j                     @   s~   d dl Z d dlmZ d dlmZ ddlmZ g Zejj	Z	ej
 Zej Zdd Zdd	 Zd
d Zdd ZG dd dZdS )    N)core)unique_name   )wait_server_readyc                 C   s   d| j v od| j v od| j v S )NParamZGradZLearningRate)Zinput_namesop r	   p/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/distributed/fleet/meta_optimizers/common.pyis_update_op   s
   
r   c                 C   s:   t | jvrdS t|  t  }|ttj@ o|ttj@ S )NF)OP_ROLE_KEY
attr_namesint	all_attrsOpRoleBackwardZLoss)r   Zop_roler	   r	   r
   is_loss_grad_op&   s   
r   c                 C   $   t | jv ot|  t  ttj@ S N)r   r   r   r   r   r   r   r	   r	   r
   is_backward_op-   
   
r   c                 C   r   r   )r   r   r   r   r   ZOptimizer   r	   r	   r
   is_optimizer_op3   r   r   c                   @   s>   e Zd ZdddZdddZ		ddd	Zd
d Zdd ZdS )CollectiveHelper   Tc                 C   s   || _ || _|| _d S r   )nrings	wait_port
role_maker)selfr   r   r   r	   r	   r
   __init__:   s   
zCollectiveHelper.__init__Nc              	   C   sl   || _ |d u rtj | _ | j }|| j  }t| jD ]}| 	| j ||| j || j
 q|   d S r   )startup_programpaddleZstaticZdefault_startup_programr   Z_get_trainer_endpointsZ_worker_indexranger   _init_communicatorr   _broadcast_params)r   r   	endpointscurrent_endpointring_idr	   r	   r
   update_startup_program?   s   
z'CollectiveHelper.update_startup_programc	                    s  d |}	|rt|}
|d d  }|| |dkr)|r)tdd }|s)t|  fdd}| }|d u rG|d u s=J |sAJ || d S |jt	ddt
jjjd}t
 r|jd	i d
|id|d|d|d|ttjid |jdd|ii d|
d|d|d|	ttjid n5t
 r|jdi d
|id|d|d|d|ttjid |jdd|ii d|
d|d|d|	ttjid ntd|r|| d S d S )N,r   Z!FLAGS_dynamic_static_unified_commc                    s   | j tdtjjjddd}| jdi d|giddgd	|jd
dddt	t
jid | jdd|gid|gid ddt	t
jid | jdd|id|it	t
jid d S )Nsync_varFT)namedtypepersistableZstop_gradientZfill_constantOutshaper   r+   valueZ	force_cputypeZinputsZoutputsattrsZc_allreduce_sumXr&   Zuse_calc_streamZc_sync_calc_stream)
create_varr   generater   VarDescVarTypeZINT32	append_opr+   r   r   Forward)blockr)   global_ring_idr	   r
   _add_sync_by_allreducek   s@   

zCCollectiveHelper._init_communicator.<locals>._add_sync_by_allreduceZcomm_idT)r*   r,   r1   Zc_gen_nccl_idr-   rankZendpointother_endpointsr&   r0   Zc_comm_initr3   nranksr$   Zc_gen_bkcl_idzBcomm_id must be generated in paddlepaddle-xpu or paddlepaddle-xpu.)joinlenremover    Z	get_flagsr   global_blockr4   r   r5   r   r6   r7   ZRAWZis_compiled_with_cudar8   r   r   r9   Zis_compiled_with_xpu
ValueError)r   programr%   r$   r>   r&   r   r<   syncZendpoints_strr@   r?   Zuse_new_commr=   r:   Zcomm_id_varr	   r;   r
   r"   Q   s   

$z#CollectiveHelper._init_communicatorc                 C   s,   | j sJ |d d  }|| t| d S r   )r   rC   r   )r   r%   r$   r?   r	   r	   r
   _wait   s   

zCollectiveHelper._waitc                 C   s   | j  }d}| D ]!}|jrq|d | j }|jdd|id|id|ddttjid	 qt	| jD ]}|jd
d|id|id|ttjid	 q2d S )Nr   Zc_broadcastr3   r-   r&   rootr   r0   Zc_sync_comm_stream)
r   rD   Ziter_parametersZis_distributedr   r8   r   r   r9   r!   )r   r:   r&   paramr	   r	   r
   r#      s.   
z"CollectiveHelper._broadcast_params)r   Tr   )NT)__name__
__module____qualname__r   r'   r"   rH   r#   r	   r	   r	   r
   r   9   s    


 r   )r    Zpaddle.frameworkr   Zpaddle.utilsr   Zbase.private_helper_functionr   __all__Zop_proto_and_checker_makerr   ZkOpRoleAttrNamer   ZkOpRoleVarAttrNameZOP_ROLE_VAR_KEYr   r   r   r   r   r	   r	   r	   r
   <module>   s   

