
    -`iW                        d Z ddlZddlZddlmZ ddlZddlmZ ddlm	Z	 ddl
mZ ddlmZ erdd	lmZ  ee          Z	 	 ddddeeef         dz  dedej        fdZ	 	 ddddedej        j        dedeeef         dz  ddfdZdS )z<
The async worker that transfers experts in the background.
    N)TYPE_CHECKING)ProcessGroup)get_ep_group)init_logger   )transfer_layer)	EplbStateFstater	   rank_mapping
is_profilereturnc                      t                      j                                         j         j        sJ d fd}t          j        |d          }|                                 |S )Nr   c            	         J t           j                                       t           j                                      } t	          j                    }t	          j        |           	 |                    t          |                      n@# t          $ r3}t                              dt          |                     Y d }~nd }~ww xY w|                                 d S # |                                 w xY w)N)device)r
   ep_groupcuda_streamr   r   zasync loop error (Rank %d): %s)torchcuda
set_deviceStreamasyncionew_event_loopset_event_looprun_until_completetransfer_run_periodically	Exceptionlogger	exceptionstrclose)	r   loopexcdevice_indexr   r   rankr   r
   s	      v/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/distributed/eplb/async_worker.pythread_targetz)start_async_worker.<locals>.thread_target#   s   '''
l+++j''|'<<%''t$$$	##)% +)!-       	O 	O 	O=tSXXNNNNNNNN	O JJLLLLLDJJLLLLs0   -'B C+ 
C)CC+ CC+ +DT)targetdaemon)r   N)r   device_groupr$   cuda_device_indexis_async	threadingThreadstart)r
   r   r   r&   threadr#   r   r$   s   ```  @@@r%   start_async_workerr0      s    
 ~~*H==??D*L>>          * ]4@@@F
LLNNNM    r   r   c                   K   	 t          j        | j        j                   d {V  t                              d           | j        sJ | j                                        D ]}|j	        j
        }|j        rn|j        |k     rb|j        s%|j        r|j        t          j        |j        j                   d {V  	 |j        |k    r	 |j                                         t%          |j        |j        |j	        j        |j        |||j        ||	  	         d {V \  |_        |_        |_        t2          j                            d          }|                    |           ||_        d|_        |j                                         n@# |j                                         w xY w|j        sn-t          j        d           d {V  |j        r|j        |k     b| j                                         )NTz&async worker woke up for EPLB transfer)	old_global_expert_indicesnew_global_expert_indicesexpert_weightsexpert_weights_bufferr   r   layerr   r   F)blockingr   gMbP?) r   	to_threadrearrange_eventwaitr   infor+   model_statesvaluesmodelnum_moe_layers
rebalancedlayer_to_transferep_buffer_readynew_physical_to_logical_mapbuffer_lockacquirereleaser   physical_to_logical_mapr5   expert_bufferis_unchangedis_received_locallyrecv_metadatar   r   Eventrecord_eventbuffer_ready_eventsleepclear)r
   r   r   r   r   model_statecurrent_num_layersevents           r%   r   r   =   sh     /& 5 :;;;;;;;;;<===~~ -4466 (	/ (	/K!,!2!A&&/14FFF $3"/#."/ $?K!+K,C,KLLLLLLLLL:&8<NNN!, $/779999! #16A6Y6A6]+6+<+K2=2K%-'1"-"?(3)5
# 
# 
# 
 
 
 
 
 
	'4';'5 !&
 0 0% 0 @ @#007779>6673#/779999/779999&1 !-.........K &&/14FFFL 	##%%%_/&s   F*BFF1)NF)FN)__doc__r   r,   typingr   r   torch.distributedr   vllm.distributed.parallel_stater   vllm.loggerr   rebalance_executer   
eplb_stater	   __name__r   dictintboolr-   r0   r   r   r    r1   r%   <module>ra      s}                      * * * * * * 8 8 8 8 8 8 # # # # # # - - - - - - &%%%%%%	X		
 +/! !!sCx.4'! ! 	! ! ! !P *.6& 6&6&6& "6& 	6&
 sCx.4'6& 
6& 6& 6& 6& 6& 6&r1   