o
    پi=                     @   s  d Z ddlZddlZddlZddlZddlZddlmZ ddl	m
Z
mZ ddlZddlmZmZmZ dd Zg dZG d	d
 d
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edkre rle Zne rse Zne rze Zne re Ze  dS dS )z9Check environment configurations and dependency versions.    N)abstractmethod)OrderedDictdefaultdict)is_hipis_musais_npuc                   C   s   t jjd uS N)torchversioncuda r   r   D/home/ubuntu/.local/lib/python3.10/site-packages/sglang/check_env.py
is_cuda_v2   s   r   ) sglang
sgl_kernelflashinfer_pythonflashinfer_cubinflashinfer_jit_cachetritontransformerstorchaonumpyaiohttpfastapihf_transferhuggingface_hubinteregular
modelscopeorjsonoutlines	packagingpsutilpydanticzpython-multipartpyzmqr   uvicornuvloopvllmxgrammaropenaitiktoken	anthropiclitellmdecord2c                   @   sv   e Zd ZdZdd ZedefddZedefddZdefd	d
Z	dd Z
defddZdefddZdd ZdS )BaseEnvz Base class for environment checkc                 C   s
   t | _d S r   )PACKAGE_LISTpackage_listselfr   r   r   __init__<   s   
zBaseEnv.__init__returnc                 C      t )z<
        Get CUDA-related information if available.
        NotImplementedErrorr0   r   r   r   get_info?   s   zBaseEnv.get_infoc                 C   r4   r   r5   r0   r   r   r   get_topologyF   s   zBaseEnv.get_topologyc              	   C   sh   i }| j D ],}|dd dd dd }ztj|}|||< W q ty1   d||< Y qw |S )z5
        Get versions of specified packages.
        z==r   z>=z<=zModule Not Found)r/   split	importlibmetadatar
   ModuleNotFoundError)r1   versionspackagepackage_namer
   r   r   r   get_package_versionsJ   s   
"zBaseEnv.get_package_versionsc           
      C   s   t t}t t}ttj D ]'}|tj| t| tj	|}||d  d|d   t| qi }|
 D ]\}}||dd| < q=t|dkrit|
 d \}}	||dd|	 d< |S |
 D ]\}}	||dd|	 d< qm|S )z>
        Get information about available GPU devices.
        r   .   zGPU ,z Compute Capability)r   listranger	   r   device_countget_device_nameappendstrget_device_capabilityitemsjoinlen)
r1   devicescapabilitiesk
capabilitygpu_infoname
device_idscapgpu_idsr   r   r   get_device_infoX   s    &zBaseEnv.get_device_infoc                 C   sZ   z%t jdgdd}|dD ]}d|v r"d|dd  i  W S qi W S    i  Y S )NlscpuTtext
zHypervisor vendor::rB   )
subprocesscheck_outputr9   strip)r1   outputliner   r   r   get_hypervisor_vendorr   s   zBaseEnv.get_hypervisor_vendorc                 C   s   t t j\}}d|iS )Nzulimit soft)resource	getrlimitRLIMIT_NOFILE)r1   ulimit_soft_r   r   r   get_ulimit_soft|   s   zBaseEnv.get_ulimit_softc                 C   s   t  }tjdd|d< ||   tj|d< ||   || 	  || 
  ||   | D ]\}}t| d|  q8dS )z:
        Check and print environment information.
        r[    PythonPyTorchz: N)r   sysr
   replaceupdater7   r	   __version__r@   r8   rb   rh   rK   print)r1   env_inforP   vr   r   r   	check_env   s   
zBaseEnv.check_envN)__name__
__module____qualname____doc__r2   r   dictr7   r8   r@   rW   rb   rh   rs   r   r   r   r   r-   9   s    
r-   c                   @   8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )GPUEnvz"Environment checker for Nvidia GPUc                 C   6   dt j i}|d r||   ||   |S )NzCUDA availabler	   r   is_availablern   rW   _get_cuda_version_infor1   	cuda_infor   r   r   r7      
   zGPUEnv.get_infoc                 C   D   ddl m} d|i}|r tj|r ||   ||   |S )z/
        Get CUDA version information.
        r   	CUDA_HOMEr   )torch.utils.cpp_extensionr   ospathisdirrn   _get_nvcc_info_get_cuda_driver_version)r1   r   r   r   r   r   r~         zGPUEnv._get_cuda_version_infoc                 C   z   ddl m} z(tj|d}tjd| dddd }d	||	d
|	d  iW S  tj
y<   d	di Y S w )z/
        Get NVCC version information.
        r   r   zbin/nvcc"z" -VTshellutf-8NVCCzCuda compilation toolsBuildNot Available)r   r   r   r   rL   r]   r^   decoder_   rfindSubprocessError)r1   r   nvccnvcc_outputr   r   r   r      s"   zGPUEnv._get_nvcc_infoc                 C   sv   t  }z)tg d}t |  d}t|dkr#d| iW S ddt	|iW S  tj
y:   ddi Y S w )z*
        Get CUDA driver version.
        )
nvidia-smiz--query-gpu=driver_versionz--format=csv,noheader,nounitsr[   rB   zCUDA Driver VersionzCUDA Driver Versionsz, r   )setr]   r^   r   r_   r9   rM   poprL   sortedr   )r1   r=   r`   r   r   r   r      s   zGPUEnv._get_cuda_driver_versionc                 C   X   zt jg dt jt jddd}d|jdkrd|j iW S diW S  t jy+   i  Y S w )/
        Get GPU topology information.
        )r   topo-mTstdoutstderrrZ   checkzNVIDIA Topologyr   r[   Nr]   runPIPE
returncoder   r   r1   resultr   r   r   r8          zGPUEnv.get_topologyN)	rt   ru   rv   rw   r7   r~   r   r   r8   r   r   r   r   rz      s    	rz   c                   @   ry   )HIPEnvz Environment checker for ROCm/HIPc                 C   r{   )NzROCM availabler|   r   r   r   r   r7      r   zHIPEnv.get_infoc                 C   r   )Nr   	ROCM_HOMEr   )r   r   r   r   r   rn   _get_hipcc_info_get_rocm_driver_version)r1   r   r   r   r   r   r~      s   zHIPEnv._get_cuda_version_infoc                 C   r   )Nr   r   z	bin/hipccr   " --versionTr   r   HIPCCzHIP versionz	AMD clangr   )r   r   r   r   rL   r]   r^   r   r_   r   r   )r1   r   hipcchipcc_outputr   r   r   r     s   zHIPEnv._get_hipcc_infoc                 C   sr   z*t g d}t|  d}|d | }|dddd}d|iW S  t j	y8   ddi Y S w )	N)rocm-smiz--showdriverversionz--csvr[   zname, valuez"Driver version", ri   r   zROCM Driver Versionr   )
r]   r^   r   r   r_   r9   discardr   rm   r   )r1   r`   r=   verr   r   r   r     s   

zHIPEnv._get_rocm_driver_versionc                 C   sX   zt jddgt jt jddd}d|jdkrd|j iW S d iW S  t jy+   i  Y S w )Nr   z--showtopotypeTr   zAMD Topologyr   r[   r   r   r   r   r   r8   '  s   zHIPEnv.get_topologyN)	rt   ru   rv   rw   r7   r~   r   r   r8   r   r   r   r   r      s    	r   c                       s^   e Zd ZdZg dZ fddZdd Zdd Zd	d
 Zde	fddZ
dd Zdd Z  ZS )NPUEnvz"Environment checker for Ascend NPU)	torch_npuzsgl-kernel-npudeep_epc                    s   t    | jtj d S r   )superr2   r/   extendr   EXTRA_PACKAGE_LISTr0   	__class__r   r   r2   @  s   
zNPUEnv.__init__c                 C   r{   )NzNPU available)r	   npur}   rn   rW   _get_cann_version_infor   r   r   r   r7   D  s
   zNPUEnv.get_infoc                 C   sd   t t}ttj D ]}|tj| t| qi }|	 D ]\}}||dd
| < q!|S )zx
        Get information about available NPUs.
        Need to override due to torch_npu interface differences.
        zNPU rC   )r   rD   rE   r	   r   rF   rG   rH   rI   rK   rL   )r1   rN   rP   npu_inforS   rT   r   r   r   rW   L  s   zNPUEnv.get_device_infoc                 C   s   ddg}|D ]}t j|}|rt j|r|} nqd}t j|r%|nd }|r>d|i}|| | ||   |S ddiS )NASCEND_TOOLKIT_HOMEASCEND_INSTALL_PATHz'/usr/local/Ascend/ascend-toolkit/latest	CANN_HOMEz	Not found)r   environgetr   existsrn   _get_cann_info_get_ascend_driver_version)r1   	cann_envsvarr   r   default_pathr   r   r   r   r   [  s   zNPUEnv._get_cann_version_infor   c                 C   s   i }t j|d}t j|r;t|ddd}|  | dd dd |d	< W d    n1 s5w   Y  nd
|d	< z!t j|d}t|dg	d
 }|dd 
 |d< W |S  tjyo   d
|d< Y |S w )Nzversion.cfgrr   )encoding[rB   ]r   CANNr   z"compiler/ccec_compiler/bin/bishengz	--versionr[   BiSheng)r   r   rL   r   openreadliner9   r]   r^   r   r_   r   )r1   r   	cann_infocann_version_filefbishengbisheng_outputr   r   r   r   n  s&   "
zNPUEnv._get_cann_infoc                 C   sp   z)t g d}|  dD ]}d|v r"|dd  } nqd}d|iW S  t jy7   ddi Y S w )N)npu-smiinfo-tboardz-i0r[   zSoftware Versionr\   r   zAscend Driver Version)r]   r^   r   r_   r9   r   )r1   r`   ra   r
   r   r   r   r     s   

z!NPUEnv._get_ascend_driver_versionc                 C   sX   zt jg dt jt jddd}d|jdkrd|j iW S d iW S  t jy+   i  Y S w )N)r   r   r   r   Tr   zAscend Topologyr   r[   r   r   r   r   r   r8     s    zNPUEnv.get_topology)rt   ru   rv   rw   r   r2   r7   rW   r   rI   r   r   r8   __classcell__r   r   r   r   r   7  s    r   c                   @   ry   )MUSAEnvz$Environment checker for MThreads GPUc                 C   r{   )NzMUSA available)r	   musar}   rn   rW   _get_musa_version_info)r1   	musa_infor   r   r   r7     r   zMUSAEnv.get_infoc                 C   r   )z/
        Get MUSA version information.
        r   	MUSA_HOMEr   )torch_musa.utils.musa_extensionr   r   r   r   rn   _get_mcc_info_get_musa_driver_version)r1   r   r   r   r   r   r     r   zMUSAEnv._get_musa_version_infoc                 C   r   )z.
        Get MCC version information.
        r   r   zbin/mccr   r   Tr   r   MCCzmcc versionTargetr   )r   r   r   r   rL   r]   r^   r   r_   r   r   )r1   r   mcc
mcc_outputr   r   r   r     s   zMUSAEnv._get_mcc_infoc                 C   sl   z't jddgdd}d}| D ]}d|v r"|ddd  } nqd	|iW S  t jy5   d	d
i Y S w )z*
        Get MUSA driver version.
        mthreads-gmiz-qTrY   NzDriver Versionr\   rB   zMUSA Driver Versionr   )r]   r^   
splitlinesr9   r_   r   )r1   r`   driver_versionra   r   r   r   r     s"   
z MUSAEnv._get_musa_driver_versionc                 C   r   )r   )r   r   r   Tr   zMTHREADS Topologyr   r[   Nr   r   r   r   r   r8     r   zMUSAEnv.get_topologyN)	rt   ru   rv   rw   r7   r   r   r   r8   r   r   r   r   r     s    	r   __main__)rw   importlib.metadatar:   r   rc   r]   rl   abcr   collectionsr   r   r	   sglang.srt.utilsr   r   r   r   r.   r-   rz   r   r   r   rt   envrs   r   r   r   r   <module>   s8    $X[KsZ