o
    پi$                     @   sN   d dl mZ d dlmZ d dlZd dlmZ d dlmZ eZdefddZ	dS )	    defaultdict)PathN)tqdm)/_convert_global_physical_count_to_logical_countdir_datac                 C   s  t dd }tt| dD ]7}tj|dd}|d }|d D ]%}|d }|d	 }|| |d
u s=J d|d||d || |< q qt| }t	d|d g }	t|
 D ]\}}
tdd t|

 D jdd}|	| q]t|	}t	d|j t|||dS )zLRead data from ExpertDistributionRecorder when recorded with mode `per_pass`c                   S   s   t  S )Nr    r   r   Y/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/eplb/eplb_simulator/reader.py<lambda>   s    z$read_mode_per_pass.<locals>.<lambda>z*.ptT)weights_onlylast_physical_to_logical_maprecordsforward_pass_idrankNzDuplicated forward_pass_id=z rank=global_physical_countzMake forward_pass_ids=z into arrayc                 S   s   g | ]\}}|qS r   r   ).0r   gpcr   r   r	   
<listcomp>(   s    z&read_mode_per_pass.<locals>.<listcomp>r   )dimzgpc_of_forward_pass.shape=)%global_physical_count_of_forward_passr   forward_pass_ids)r   r   listglobtorchloadgetsortedkeysprintitemsstacksumappendshapedict)r   gpc_of_forward_pass_and_rankpath	data_packr   recordr   r   r   r   gpc_of_rankgpc_of_rank_tensorgpc_of_forward_passr   r   r	   read_mode_per_pass   s>   

r,   )
collectionsr   pathlibr   r   r   #sglang.srt.eplb.expert_distributionr   .convert_global_physical_count_to_logical_countr,   r   r   r   r	   <module>   s    