o
    i%                     @   sJ  U d dl 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
 d dlmZ d dlmZ dd	lmZmZmZ e eZd
edefddZdedB fddZdedB fddZdedB fddZdedB fddZdedB fddZeeeeedZdefddZda da!ee"d< eree"d< defdd Z#defd!d"Z$g d#Z%dS )$    N)chain)TYPE_CHECKING)envs)PLATFORM_PLUGINS_GROUPload_plugins_by_group)resolve_obj_by_qualname)supports_xccl   )CpuArchEnumPlatformPlatformEnumsubstrreturnc              
   C   sJ   ddl m}m} z	|d}W | |v S  |y$ } ztd |d}~ww )z?
    Check to see if the vLLM version matches a substring.
    r   )PackageNotFoundErrorversionvllmzqThe vLLM package was not found, so its version could not be inspected. This may cause platform detection to fail.N)importlib.metadatar   r   loggerwarning)r   r   r   vllm_versione r   M/home/ubuntu/vllm_env/lib/python3.10/site-packages/vllm/platforms/__init__.pyvllm_version_matches_substr   s   
r   c               
   C   sn   t d tjrt d dS zdd l} t d W dS  ty6 } zt dt| W Y d }~d S d }~ww )Nz&Checking if TPU platform is available.z7Confirmed TPU platform is available via Pathways proxy.z0tpu_inference.platforms.tpu_platform.TpuPlatformr   z$Confirmed TPU platform is available.zvllm.platforms.tpu.TpuPlatformz)TPU platform is not available because: %s)r   debugr   VLLM_TPU_USING_PATHWAYSlibtpu	Exceptionstr)r   r   r   r   r   tpu_platform_plugin#   s   


r   c               
      s&  d} t d zAddlm} | }|  z,| dko td } | dkr,t d tdr5t d | r<t d W |  n|  w W nD ty } z8t d	t	| d
|j
j vrb|dd l dtf fdd}| rzt d d} nt dt	| W Y d }~nd }~ww | rdS d S )NFz'Checking if CUDA platform is available.r   )import_pynvmlcpuz7CUDA platform is not available because no GPU is found.z>CUDA platform is not available because vLLM is built with CPU.z%Confirmed CUDA platform is available.z1Exception happens when checking CUDA platform: %snvmlr   c                      s    j dp j dS )Nz/etc/nv_tegra_releasez/sys/class/tegra-firmware)pathisfileexistsr   osr   r   cuda_is_jetson`   s   z,cuda_platform_plugin.<locals>.cuda_is_jetsonz/Confirmed CUDA platform is available on Jetson.Tz*CUDA platform is not available because: %sz vllm.platforms.cuda.CudaPlatform)r   r   vllm.utils.import_utilsr    nvmlInitnvmlDeviceGetCountr   nvmlShutdownr   r   	__class____name__lowerr'   bool)is_cudar    pynvmlr   r(   r   r&   r   cuda_platform_plugin;   sB   



r3   c               
   C   s   d} t d z+dd l}|  zt| dkr!d} t d nt d W |  n|  w W n tyL } zt dt| W Y d }~nd }~ww | rQdS d S )	NFz'Checking if ROCm platform is available.r   Tz%Confirmed ROCm platform is available.z7ROCm platform is not available because no GPU is found.z*ROCm platform is not available because: %sz vllm.platforms.rocm.RocmPlatform)	r   r   amdsmiamdsmi_initlenamdsmi_get_processor_handlesamdsmi_shut_downr   r   )is_rocmr4   r   r   r   r   rocm_platform_pluginn   s"   

r:   c               
   C   s   d} t d z,dd l}t r!d}ddlm} ||_t d|j t|dr2|j	 r2d} t d	 W n t
yM } zt d
t| W Y d }~nd }~ww | rRdS d S )NFz&Checking if XPU platform is available.r   xccl)XPUPlatformz"Confirmed %s backend is available.xpuTz$Confirmed XPU platform is available.z)XPU platform is not available because: %szvllm.platforms.xpu.XPUPlatform)r   r   torchr   vllm.platforms.xpur<   dist_backendhasattrr=   is_availabler   r   )is_xpur>   r@   r<   r   r   r   r   xpu_platform_plugin   s$   

rD   c               
   C   s   d} t d z td} | rt d | s&dd l}|jd} | r&t d W n tyA } zt dt| W Y d }~nd }~ww | rFd	S d S )
NFz&Checking if CPU platform is available.r!   zCConfirmed CPU platform is available because vLLM is built with CPU.r   darwinzAConfirmed CPU platform is available because the machine is MacOS.z)CPU platform is not available because: %szvllm.platforms.cpu.CpuPlatform)r   r   r   sysplatform
startswithr   r   )is_cpurF   r   r   r   r   cpu_platform_plugin   s*   
rJ   )tpucudarocmr=   r!   c               	   C   s4  t t} g }tt |  D ]!\}}zt|sJ | }|d ur&|| W q ty0   Y qw tt	|t	t
 @ }tt	|t	| 
 @ }t|dkrVtd| t|dkrm| |d   }td|d  |S t|dkrztd| t|dkrt|d   }td|d  |S d}td |S )	N   z4Only one platform plugin can be activated, but got: r	   r   zPlatform plugin %s is activatedz#Automatically detected platform %s.z,vllm.platforms.interface.UnspecifiedPlatformz<No platform detected, vLLM is running on UnspecifiedPlatform)r   r   r   builtin_platform_pluginsitemscallableappendr   listsetkeysr6   RuntimeErrorr   infor   )platform_pluginsactivated_pluginsnamefuncplatform_cls_qualnameactivated_builtin_pluginsactivated_oot_pluginsr   r   r   %resolve_current_platform_cls_qualname   sR   

r_    _init_tracecurrent_platformrZ   c                 C   s\   | dkrt d u rt }t| a dt at S | t v r#t |  S td|  dt	 d)Nrb   r`   No attribute named '' exists in .)
_current_platformr_   r   join	tracebackformat_stackra   globalsAttributeErrorr.   )rZ   r\   r   r   r   __getattr__   s   


rl   c                 C   s>   | dkr|a d S | t v r|t | < d S td|  dt d)Nrb   rc   rd   re   )rf   rj   rk   r.   )rZ   valuer   r   r   __setattr__  s
   
rn   )r   r   rb   r
   ra   )&loggingrh   	itertoolsr   typingr   r   r   vllm.pluginsr   r   r)   r   vllm.utils.torch_utilsr   	interfacer
   r   r   	getLoggerr.   r   r   r0   r   r   r3   r:   rD   rJ   rO   r_   rf   ra   __annotations__rl   rn   __all__r   r   r   r   <module>   s<   

3	+
