o
    "j                     @   sN   d dl Z d dlmZmZmZmZ d dlmZ dddZdddZ	dd	d
Z
dS )    N)_assign_pos_limit_by_capacity_number_count_prune_gate_by_capacity)in_dynamic_modeTc                 C   s   |d ur
|  s
d S t r.|d u rtjj n|}t| j| j}|j	
| |}|  |S |d u r4dn|j}tj
| d|d|S )Nr   use_calc_streamring_id)Z	is_memberr   paddledistributedZ
collectiveZ_get_default_groupemptyshapedtypeZprocess_groupZalltoallwaitidZ_legacy_C_ops)Zin_tensor_listgroupr   outtaskr    r   m/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/incubate/distributed/models/moe/utils.py	_alltoall    s&   r   c           
      C   s   || }t  + t| |}|dkrt||d}n|}|s d }nt j|dd}	t| |	}W d    n1 s6w   Y  |||fS )N   r   r   )Zaxis)r	   no_gradr   r   Zcumsumr   )
Zgate
num_expert
world_sizerequire_posr   Ztotal_expert_countZlocal_expert_countZglobal_expert_countposZlec_cumr   r   r   count_by_gate9   s   



r   c           
      C   s   t  @ t j|gt jd| }t| ||d|d\}}}t|||}|dkr4|j|ks-J t||d}	n|}	t| |	||} W d    n1 sGw   Y  |	|| fS )N)r   r   F)r   r   r   r   )	r	   r   ZonesZint64r   r   Znranksr   r   )
Ztopk_idxr   r   capacityr   r   ZlecZgecZnew_gecZnew_lecr   r   r   limit_by_capacityJ   s    


r   )NT)TN)N)r	   Z#paddle.distributed.models.moe.utilsr   r   r   r   Zpaddle.frameworkr   r   r   r   r   r   r   r   <module>   s   

