o
    پi/                  
   @   s   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 z
d dl	m
Z
 dZW n ey< Z zeZW Y dZ[ndZ[ww e eZG dd deZdS )    N)List)DisaggregationMode)MooncakeTransferEngine)TransferEnginec                   @   sR   e Zd ZdededefddZddd	Zd
ee dee fddZ	e
dd ZdS )AscendTransferEnginehostnamenpu_iddisaggregation_modec                 C   s   t d urtd t t | _|| _|| _td| _	|t
jkr$d| _n|t
jkr-d| _ntd|  td| | j d| j  | _|   d S )NzSPlease install memfabric_hybrid, for details, see docs/backend/pd_disaggregation.mdASCEND_MF_STORE_URLPrefillDecodez Unsupported DisaggregationMode: :)import_errorloggerwarningr   enginer   r   osgetenv	store_urlr   PREFILLroleDECODEerror
ValueErrorget_rpc_port
session_id
initialize)selfr   r   r	    r   d/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/disaggregation/ascend/transfer_engine.py__init__   s"   

zAscendTransferEngine.__init__returnNc                    s   ddl m}m} |  }|d u s|dkrtjj}n#tjj}	 tj	ddd  fddt
| D }tjj| | jd	 	 | j| j| j| j| j|}|dkrXtd
 td
d S )Nr   )$get_tensor_model_parallel_world_sizeget_tp_groupsdma   npu)devicec                    s   g | ]}t  qS r   )torch
empty_like).0_
tmp_tensorr   r   
<listcomp>B   s    z3AscendTransferEngine.initialize.<locals>.<listcomp>)groupz-Ascend Transfer Engine initialization failed.)sglang.srt.layers.dp_attentionr"   r#   _get_transfer_protocolr   TransDataOpTypeSDMADEVICE_RDMAr(   zerosrangedistributed
all_gatherdevice_groupr   r   r   r   r   r   r   r   RuntimeError)r   r"   r#   transfer_protocoltrans_op_typeoutput_tensor_list	ret_valuer   r,   r   r   5   s*   



zAscendTransferEngine.initializeptrslengthsc                 C   sL   z	| j ||}W n ty   d}Y nw |dkr$td| d d S d S )Nr   z#Ascend memory registration for ptr z failed.)r   batch_register_memory	Exceptionr   debug)r   r?   r@   r>   r   r   r   batch_registerR   s   z#AscendTransferEngine.batch_registerc                  C   s8   t d} ddh}| r|  |v r|  S td d S )NASCEND_MF_TRANSFER_PROTOCOLdevice_rdmar$   zBInvalid or no transfer protocol specified, using default protocol.)r   r   lowerr   r   )protocolallowed_protocolsr   r   r   r1   [   s   
z+AscendTransferEngine._get_transfer_protocol)r!   N)__name__
__module____qualname__strintr   r    r   r   rE   staticmethodr1   r   r   r   r   r      s    

	r   )loggingr   typingr   r(   sglang.srt.disaggregation.utilsr   Dsglang.srt.distributed.device_communicators.mooncake_transfer_enginer   memfabric_hybridr   r   ImportErrore	getLoggerrK   r   r   r   r   r   r   <module>   s     
