o
    پiw                     @   sz   d dl Z d dlmZ d dl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dedefdd	ZG d
d de	ZdS )    N)Any)envs)AttentionBackendEnumDeviceCapabilityPlatformPlatformEnum)init_logger	device_idreturnc                 C   sD   dt jv r t jd d}|dgkrd}t|||  }t|S | S )NASCEND_RT_VISIBLE_DEVICES, zUASCEND_RT_VISIBLE_DEVICES is set to empty string, which means NPU support is disabled)osenvironsplitRuntimeErrorint)r	   
device_idsmsgphysical_device_id r   _/home/ubuntu/.local/lib/python3.10/site-packages/sglang/multimodal_gen/runtime/platforms/npu.pydevice_id_to_physical_device_id   s   

r   c                   @   sf  e Zd ZU ejZdZeed< dZ	eed< dZ
eed< dZeed< edejfd	d
Zed-dedefddZed-dedefddZed-dedefddZededB defddZedee defddZe				d.dededededef
dd Zed/d!d"Ze	d0d#ejjdB defd$d%Zed&e dB d'ed(ej!defd)d*Z"edefd+d,Z#dS )1NPUPlatformBasenpudevice_namedevice_typeNPUdispatch_keyr   device_control_env_varr
   c                 C   s   t dtj S )Nznpu:)torchdevicer   
LOCAL_RANKclsr   r   r   get_local_torch_device+   s   z&NPUPlatformBase.get_local_torch_devicer   r	   c                 C      d S Nr   r$   r	   r   r   r   get_device_capability/      z%NPUPlatformBase.get_device_capabilityc                 C   s   t tj|S r'   )strr    r   get_device_namer(   r   r   r   r,   3   s   zNPUPlatformBase.get_device_namec                 C   s   t j|}t|jS r'   )r    r   get_device_propertiesr   total_memory)r$   r	   device_propsr   r   r   get_device_total_memory7   s   
z'NPUPlatformBase.get_device_total_memoryenforce_eagerNc                 C   s   |r	t d dS dS )NzTo see benefits of async output processing, enable NPU graph. Since, enforce-eager is enabled, async output processor cannot be usedFT)loggerwarning)r$   r1   r   r   r   is_async_output_supported<   s   z)NPUPlatformBase.is_async_output_supportedphysical_device_idsc                 C   s   t d dS )Nz^NVLink detection not possible, as context support was not found. Assuming no NVLink available.F)r2   	exception)r$   r5   r   r   r   is_full_nvlinkG   s   zNPUPlatformBase.is_full_nvlinkFTdistributedempty_cache	cpu_groupc           	      C   sh   |rt j  t j|\}}|r0dd lm} t j|t jdd}|j||j	j
|d t| }|d S )Nr   r   )dtyper!   )opgroupi   @)r    r   r9   mem_get_infotorch.distributedr8   tensorfloat32
all_reduceReduceOpMINfloatitem)	r$   r	   r8   r9   r:   free_gpu_memory_distr@   r   r   r   get_available_gpu_memoryO   s   
z(NPUPlatformBase.get_available_gpu_memoryc                 C   r&   r'   r   r#   r   r   r   log_warningse   r*   zNPUPlatformBase.log_warningsr!   c                 C   s   t j| tt j|S r'   )r    r   reset_peak_memory_statsrE   max_memory_allocated)r$   r!   r   r   r   get_current_memory_usagei   s   z(NPUPlatformBase.get_current_memory_usageselected_backend	head_sizer;   c                 C   s   t d 	 dS )NzUsing Torch SDPA backend.zHsglang.multimodal_gen.runtime.layers.attention.backends.sdpa.SDPABackend)r2   info)r$   rO   rP   r;   r   r   r   get_attn_backend_cls_strp   s   
z(NPUPlatformBase.get_attn_backend_cls_strc                 C   s   dS )Nzasglang.multimodal_gen.runtime.distributed.device_communicators.cuda_communicator.CudaCommunicatorr   r#   r   r   r   get_device_communicator_cls|   r*   z+NPUPlatformBase.get_device_communicator_cls)r   )r   FTN)r
   Nr'   )$__name__
__module____qualname__r   r   _enumr   r+   __annotations__r   r   r   classmethodr    r!   r%   r   r   r)   r,   r0   boolr4   listr7   r   rE   rJ   rK   typesDevicerN   r   r;   rR   rS   r   r   r   r   r   $   sn   
 

r   )r   typingr   r    sglang.multimodal_genr   1sglang.multimodal_gen.runtime.platforms.interfacer   r   r   r   1sglang.multimodal_gen.runtime.utils.logging_utilsr   rT   r2   r   r   r   r   r   r   r   <module>   s   