o
    پi                     @   s   d dl Zd dlZd dlmZ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mZmZmZ d dlmZ eeZG dd deZG d	d
 d
eZG dd deZG dd deZdS )    N)ListTuple)AscendTransferEngine)group_concurrent_contiguous)MooncakeKVBootstrapServerMooncakeKVManagerMooncakeKVReceiverMooncakeKVSender)get_local_ip_autoc                
   @   sR   e Zd Zdd Zdd Zdedejej	 de
e dejej	 d	ejjf
d
dZdS )AscendKVManagerc                 C   s    t  }t|| jj| jd| _d S )N)hostnamenpu_iddisaggregation_mode)r
   r   kv_argsgpu_idr   engine)selflocal_ip r   Y/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/disaggregation/ascend/conn.pyinit_engine   s   zAscendKVManager.init_enginec                 C   s0   | j | jj| jj | j | jj| jj d S N)r   batch_registerr   kv_data_ptrskv_data_lensaux_data_ptrsaux_data_lens)r   r   r   r   register_buffer_to_engine   s   z)AscendKVManager.register_buffer_to_enginemooncake_session_idprefill_kv_indicesdst_kv_ptrsdst_kv_indicesexecutorc                    s  t ||\ tjj}fddt|D }dtdtdtdtttttf  f fdddtdtdtdtffd	d
dtttttf  dtffdd}jrfdd|D }	t	j
|	D ]}
|
 }|dkr|	D ]}|  qt|  S qhdS ||S )Nc                    s*   g | ]}j j|  | j j| fqS r   )r   r   kv_item_lens).0layer_id)r    r   r   r   
<listcomp>4   s    

z0AscendKVManager.send_kvcache.<locals>.<listcomp>src_ptrdst_ptritem_lenreturnc           	         s`   g }t  D ]&\}}| t|d |  }|t|d |  }|t| }||||f q|S )Nr   )zipintlenappend)	r'   r(   r)   transfer_blocksprefill_indexdecode_indexsrc_addrdst_addrlength)dst_kv_blocksprefill_kv_blocksr   r   set_transfer_blocks=   s   z9AscendKVManager.send_kvcache.<locals>.set_transfer_blocksc                    s   | ||}  |S r   )_transfer_data)r'   r(   r)   r/   r   r   r7   r   r   process_layerI   s   z3AscendKVManager.send_kvcache.<locals>.process_layerlayers_paramsc                    s2   g }| D ]\}}}| ||| q |S r   )extendr8   )r;   r/   r'   r(   r)   r9   r   r   process_layersN   s   z4AscendKVManager.send_kvcache.<locals>.process_layersc                    s"   g | ]\}}}  |||qS r   )submit)r$   r'   r(   r)   )r"   r:   r   r   r&   U   s    r   )r   r-   r   r   ranger,   r   r   enable_custom_mem_pool
concurrentfuturesas_completedresultcancel)r   r   r   r    r!   r"   
num_layersr;   r=   rB   futurestatusfr   )r5   r    r"   r   r6   r:   r   r7   r   send_kvcache&   s>   		"(	
	zAscendKVManager.send_kvcacheN)__name__
__module____qualname__r   r   strnptNDArraynpint32listr,   rA   rB   ThreadPoolExecutorrJ   r   r   r   r   r      s    	

r   c                   @      e Zd ZdS )AscendKVSenderNrK   rL   rM   r   r   r   r   rV   l       rV   c                   @   rU   )AscendKVReceiverNrW   r   r   r   r   rY   p   rX   rY   c                   @   rU   )AscendKVBootstrapServerNrW   r   r   r   r   rZ   t   rX   rZ   )concurrent.futuresrA   loggingtypingr   r   numpyrQ   numpy.typingrO   0sglang.srt.disaggregation.ascend.transfer_enginer   &sglang.srt.disaggregation.common.utilsr   'sglang.srt.disaggregation.mooncake.connr   r   r   r	   sglang.srt.utilsr
   	getLoggerrK   loggerr   rV   rY   rZ   r   r   r   r   <module>   s    
W