o
    áÙ·iž  ã                   @   sZ   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	 ee
ƒZG dd„ deeƒZdS )é    N)Úinit_logger)ÚRocmPlatform)ÚDiffusionAttentionBackendEnum)ÚOmniPlatformÚOmniPlatformEnumc                   @   sî   e Zd ZdZejZedefdd„ƒZ	edefdd„ƒZ
ededB d	edefd
d„ƒZedefdd„ƒZedefdd„ƒZeddedB dejfdd„ƒZedefdd„ƒZededB fdd„ƒZeddd„ƒZeddejdB defdd„ƒZdS )ÚRocmOmniPlatformz´ROCm/AMD GPU implementation of OmniPlatform.

    Inherits all ROCm-specific implementations from vLLM's RocmPlatform,
    and adds Omni-specific interfaces from OmniPlatform.
    Úreturnc                 C   ó   dS )Nz*vllm_omni.worker.gpu_ar_worker.GPUARWorker© ©Úclsr
   r
   úU/home/ubuntu/.local/lib/python3.10/site-packages/vllm_omni/platforms/rocm/platform.pyÚget_omni_ar_worker_cls   ó   z'RocmOmniPlatform.get_omni_ar_worker_clsc                 C   r	   )Nz:vllm_omni.worker.gpu_generation_worker.GPUGenerationWorkerr
   r   r
   r
   r   Úget_omni_generation_worker_cls   r   z/RocmOmniPlatform.get_omni_generation_worker_clsÚselected_backendNÚ	head_sizec                 C   sÊ   ddl m} tj ¡ }|\}}|d | }|ƒ o#d|  k o!dk n  }|d urO| ¡ }	|	dkrA|sAt d¡ t d¡ t	j
 ¡ S t	|	 }
t d	|	¡ |
 ¡ S |r[t d
¡ t	j ¡ S t d¡ t	j
 ¡ S )Nr   )Úis_aiter_found_and_supportedé
   éZ   éd   Ú
FLASH_ATTNzzFlash Attention requires `aiter` library which is only supported on gfx942 and gfx950. Falling back to TORCH_SDPA backend.z.Defaulting to diffusion attention backend SDPAz&Using diffusion attention backend '%s'z4Defaulting to diffusion attention backend FLASH_ATTN)Úvllm._aiter_opsr   ÚtorchÚcudaÚget_device_capabilityÚupperÚloggerÚwarningÚinfor   Ú
TORCH_SDPAÚget_pathr   )r   r   r   r   Úcompute_capabilityÚmajorÚminorÚ
capabilityÚaiter_supportedÚbackend_upperÚbackendr
   r
   r   Úget_diffusion_attn_backend_cls   s*   
ÿ





z/RocmOmniPlatform.get_diffusion_attn_backend_clsc                 C   r	   )NTr
   r   r
   r
   r   Úsupports_torch_inductorE   r   z(RocmOmniPlatform.supports_torch_inductorc                 C   r	   )Nz&vllm_omni/platforms/rocm/stage_configsr
   r   r
   r
   r   Úget_default_stage_config_pathI   r   z.RocmOmniPlatform.get_default_stage_config_pathÚ
local_rankc                 C   s   |d u r	t  d¡S t  d|¡S )Nr   )r   Údevice)r   r,   r
   r
   r   Úget_torch_deviceM   s   
z!RocmOmniPlatform.get_torch_devicec                 C   s
   t j ¡ S ©N)r   r   Údevice_countr   r
   r
   r   Úget_device_countS   s   
z!RocmOmniPlatform.get_device_countc                 C   s&   t jjd urt jj}| d¡d S d S )Nú-r   )r   ÚversionÚhipÚsplit)r   Úhip_versionr
   r
   r   Úget_device_versionW   s   z#RocmOmniPlatform.get_device_versionc                 C   s   t j ¡  d S r/   )r   r   Úsynchronizer   r
   r
   r   r8   ^   s   zRocmOmniPlatform.synchronizer-   c                 C   s   t j |¡\}}|S r/   )r   r   Úmem_get_info)r   r-   ÚfreeÚ_r
   r
   r   Úget_free_memoryb   s   z RocmOmniPlatform.get_free_memoryr/   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚROCMÚ
_omni_enumÚclassmethodÚstrr   r   Úintr)   Úboolr*   r+   r   r-   r.   r1   r7   r8   r<   r
   r
   r
   r   r      s:    þýü% r   )r   Úvllm.loggerr   Úvllm.platforms.rocmr   Ú/vllm_omni.diffusion.attention.backends.registryr   Úvllm_omni.platforms.interfacer   r   r=   r   r   r
   r
   r
   r   Ú<module>   s   