o
    
۾il                     @   s  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Zd dl	m
Z
 zd dlZdZW n eeeefy;   dZY nw edg dZh dZh d	Zd
d Zdd Zdd ZdTddZdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Z d$d% Z!d&d' Z"d(d) Z#d*d+ Z$d,d- Z%d.d/ Z&d0d1 Z'd2d3 Z(d4d5 Z)d6d7 Z*d8d9 Z+d:d; Z,d<d= Z-dTd>d?Z.d@dA Z/dBdC Z0dDdE Z1dFdG Z2dHdI Z3dJ4 Z5e5dK7 Z5e5dL4 7 Z5dMdN Z6dOdP Z7dQdR Z8e9dSkre8  dS dS )U    N)
namedtuple)environment_variablesTF	SystemEnv)torch_versionis_debug_buildcuda_compiled_versiongcc_versionclang_versioncmake_versionoslibc_versionpython_versionpython_platformis_cuda_availablecuda_runtime_versioncuda_module_loadingnvidia_driver_versionnvidia_gpu_modelscudnn_versionpip_versionpip_packagesconda_packageship_compiled_versionhip_runtime_versionmiopen_runtime_versioncaching_allocator_configis_xnnpack_availablecpu_inforocm_versionvllm_versionvllm_build_flagsgpu_topoenv_vars>   mklzmqncclmagmanumpytorchhelionnvidiaoptreepynvmltritonsoumithcudatoolkittransformersflashinfer-python>   r$   mypyr%   onnxr'   r(   flake8r)   r*   r+   r,   r-   r0   r1   c           
      C   s   t | tu rdnd}z?tj| tjtj|d}| \}}|j}t dkr'd}nt	 }|
|}| dkr9| }n| }|
|}||| fW S  tye   t| trW| n| d }	dd	d
|	 f Y S w )z%Return (return-code, stdout, stderr).TF)stdoutstderrshellwin32oemnvidia-smi topo -mr       zCommand not found: )typestr
subprocessPopenPIPEcommunicate
returncodeget_platformlocalegetpreferredencodingdecoderstripstripFileNotFoundError
isinstance)
commandr7   p
raw_outputraw_errrcencoutputerrcmd_str rU   D/home/ubuntu/.local/lib/python3.10/site-packages/vllm/collect_env.pyrunf   s(   



rW   c                 C   s   | |\}}}|dkrdS |S )zIRun command using run_lambda; reads and returns entire output if rc is 0.r   NrU   )
run_lambdarL   rP   out_rU   rU   rV   run_and_read_all   s   r[   c                 C   s<   | |\}}}|dkrdS t ||}|du rdS |dS )zIRun command using run_lambda, returns the first regex match if it exists.r   N   )researchgroup)rX   rL   regexrP   rY   rZ   matchrU   rU   rV   run_and_parse_first_match   s   
rb   c                    sP    d u rt  tjdd}t| |dg}|d u r|S d fdd| D S )N	CONDA_EXEcondalist
c                 3   s4    | ]   d st fddD r V  qdS )#c                 3       | ]}| v V  qd S NrU   .0namelinerU   rV   	<genexpr>       z/get_conda_packages.<locals>.<genexpr>.<genexpr>N)
startswithanyrk   patternsrm   rV   ro      s    
z%get_conda_packages.<locals>.<genexpr>)DEFAULT_CONDA_PATTERNSr   environgetr[   join
splitlines)rX   ru   rd   rY   rU   rt   rV   get_conda_packages   s   r{   c                 C      t | ddS )Nzgcc --versionzgcc (.*)rb   rX   rU   rU   rV   get_gcc_version      r   c                 C   r|   )Nzclang --versionzclang version (.*)r}   r~   rU   rU   rV   get_clang_version      r   c                 C   r|   )Nzcmake --versionz
cmake (.*)r}   r~   rU   rU   rV   get_cmake_version   r   r   c                 C   s,   t  dkrd}t| |dS t }t| |dS )Ndarwinzkextstat | grep -i cudazcom[.]nvidia[.]CUDA [(](.*?)[)]zDriver Version: (.*?) )rD   rb   get_nvidia_smi)rX   cmdsmirU   rU   rV   get_nvidia_driver_version   s   
r   c                 C   s   t  dkstrAttjdrAtjjd urAtr?tj r?tjjd ur5tjd}t|dr2d	|j
}nd}nd}tjd | S d S t }td}| |d	 \}}}|dkrXd S t|d|S )
Nr   hipr   gcnArchNamez ({})NoGCNArchNameOnOldPyTorchr<   z \(UUID: .+?\)z -L)rD   TORCH_AVAILABLEhasattrr(   versionr   cudais_availableget_device_propertiesformatr   get_device_namer   r]   compilesub)rX   propgcnArchr   
uuid_regexrP   rY   rZ   rU   rU   rV   get_gpu_info   s*   



r   c                 C   r|   )Nznvcc --versionzrelease .+ V(.*)r}   r~   rU   rU   rV   get_running_cuda_version   r   r   c                 C   s"  t  dkr"tjdd}tjdd}tj|dd}d||}n
t  d	kr*d
}nd}| |\}}}t|dksA|dkrY|dkrYtjd}|durWtj|rWtj	|S dS t
 }	|dD ]}
tj	|
}
tj|
rt|	|
 qa|	sydS t|	}t|dkr|d S d|}d|S )zHReturn a list of libcudnn.so; it's hard to tell which one is being used.r8   
SYSTEMROOT
C:\Windows	CUDA_PATHz%CUDA_PATH%System32wherez{} /R "{}\bin" cudnn*.dllr   z ls /usr/local/cuda/lib/libcudnn*z7ldconfig -p | grep libcudnn | rev | cut -d" " -f1 | revr   r\   CUDNN_LIBRARYNrf   z!Probably one of the following:
{})rD   r   rw   rx   pathry   r   lenisfilerealpathsetsplitaddsorted)rX   system_root	cuda_path	where_cmd	cudnn_cmdrP   rY   rZ   l	files_setfnfilesresultrU   rU   rV   get_cudnn_version   s6   




r   c                  C   s~   d} t  dkr=tjdd}tjdd}tj|dd| }tj|d	| }||g}|D ]}tj|r<d
|}  | S q,| S )Nz
nvidia-smir8   r   r   PROGRAMFILESzC:\Program FileszNVIDIA CorporationNVSMIr   z"{}")rD   r   rw   rx   r   ry   existsr   )r   r   program_files_rootlegacy_pathnew_pathsmiscandidate_smirU   rU   rV   r      s    

r   c                 C   r|   )z7Returns the ROCm version if available, otherwise 'N/A'.zhipcc --versionzHIP version: (\S+)r}   r~   rU   rU   rV   get_rocm_version  s   r   c                  C   s   ddl m} m} | dkrdS |d }t|trO|drOd|v rA|dd dd  }|dd dd  }|  d	| d
| dS |dd  }|  d	| dS | S )Nr   )__version____version_tuple__devz	N/A (dev)g.r\   z (git sha: z, date: ))vllmr   r   rK   r>   rq   r   )r   r   version_strgit_shadaterU   rU   rV   get_vllm_version  s   r   c                   C   s(   d tjddtjdrdS dS )NzCUDA Archs: {}; ROCm: {}TORCH_CUDA_ARCH_LISTzNot Set	ROCM_HOMEEnabledDisabled)r   r   rw   rx   rU   rU   rU   rV   summarize_vllm_build_flags,  s   r   c                 C   s.   d }t  dkrt| d}|d u rt| d}|S )Nlinuxr:   zrocm-smi --showtopo)rD   r[   )rX   rR   rU   rU   rV   get_gpu_topo4  s   


r   c                 C   sr   d\}}}t  dkr| d\}}}nt  dkr| d\}}}nt  dkr+| d\}}}d}|d	kr5|}|S |}|S )
N)r   r<   r<   r   lscpur8   zwmic cpu get Name,Manufacturer,Family,Architecture,ProcessorType,DeviceID,         CurrentClockSpeed,MaxClockSpeed,L2CacheSize,L2CacheSpeed,Revision /VALUEr   z"sysctl -n machdep.cpu.brand_stringNoner   )rD   )rX   rP   rY   rS   r   rU   rU   rV   get_cpu_info  s   



r   c                   C   sF   t jdrdS t jdrdS t jdrdS t jdr dS t jS )Nr   r8   cygwinr   )sysplatformrq   rU   rU   rU   rV   rD     s   rD   c                 C   r|   )Nzsw_vers -productVersionz(.*)r}   r~   rU   rU   rV   get_mac_version  r   r   c                 C   sB   t jdd}t j|ddd}t j|dd}t| d||S )Nr   r   r   Wbemwmicfindstrz!{} os get Caption | {} /v Caption)r   rw   rx   r   ry   r[   r   )rX   r   wmic_cmdfindstr_cmdrU   rU   rV   get_windows_version  s   r   c                 C   r|   )Nzlsb_release -azDescription:\t(.*)r}   r~   rU   rU   rV   get_lsb_version  r   r   c                 C   r|   )Nzcat /etc/*-releasezPRETTY_NAME="(.*)"r}   r~   rU   rU   rV   check_release_file  r   r   c                 C   s   ddl m} t }|dks|dkrt| S |dkr*t| }|d u r#d S d|| S |dkrSt| }|d ur=d|| S t| }|d urLd|| S d|| S |S )	Nr   )machiner8   r   r   zmacOS {} ({})r   z{} ({}))r   r   rD   r   r   r   r   r   )rX   r   r   r   descrU   rU   rV   get_os  s$   r   c                  C   s   dd l } |   S Nr   r   r   rU   rU   rV   get_python_platform  s   r   c                  C   s$   dd l } t dkrdS d|  S )Nr   r   N/A-)r   rD   ry   libc_verr   rU   rU   rV   get_libc_version  s   
r   c                  C   sl   t jdrdS t jtjd} t j| r4t| d}t	dd |D W  d    S 1 s/w   Y  dS )NUVTz
pyvenv.cfgrc                 s   s    | ]}| d V  qdS )zuv = N)rq   rk   rn   rU   rU   rV   ro     s    zis_uv_venv.<locals>.<genexpr>F)
r   rw   rx   r   ry   r   prefixr   openrr   )pyvenv_cfg_pathfrU   rU   rV   
is_uv_venv  s    r   c                    s>    du rt   fdd}tjd dkrdnd}| }||fS )zZReturn `pip list` output. Note: will also find conda-installed pytorch and numpy packages.Nc                     s   zdd l } | jd}|d u}W n ty   d}Y nw |r&tjdddg}nt r2td g d}ntd	t	|}d

 fdd| D S )Nr   pipFz-mpipre   --format=freezez	uv is set)uvr   re   r   zBCould not collect pip list output (pip or uv module not available)rf   c                 3   s*    | ] t  fd dD r V  qdS )c                 3   rh   ri   rU   rj   rm   rU   rV   ro     rp   zCget_pip_packages.<locals>.run_with_pip.<locals>.<genexpr>.<genexpr>N)rr   rs   rt   rm   rV   ro     s    
z9get_pip_packages.<locals>.run_with_pip.<locals>.<genexpr>)importlib.utilutil	find_specImportErrorr   
executabler   printRuntimeErrorr[   ry   rz   )	importlibpip_specpip_availabler   rY   ru   rX   rU   rV   run_with_pip   s&   

z&get_pip_packages.<locals>.run_with_pipr   3pip3r   )DEFAULT_PIP_PATTERNSr   r   )rX   ru   r   r   rY   rU   r   rV   get_pip_packages  s   r  c                  C   s   t jdd} | S )NPYTORCH_CUDA_ALLOC_CONFr<   )r   rw   rx   )	ca_configrU   rU   rV   get_cachingallocator_config  s   r  c                  C   s.   t rtj rtj  tjdd} | S dS )NCUDA_MODULE_LOADINGr<   r   )r   r(   r   r   initr   rw   rx   )configrU   rU   rV   get_cuda_module_loading_config"  s
   
r	  c                  C   s   t rdd l} t| jjjS dS )Nr   r   )r   torch.backends.xnnpackr>   backendsxnnpackenabled)r(   rU   rU   rV   r   +  s   r   c                     sv   d} d}d}t j D ]-\ }t fdd|D rq tv r)| d | d }  |r8| d | d } q| S )Nr<   )secrettokenapiaccesspassword)	TORCHNCCLPYTORCHCUDACUBLASCUDNNOMP_MKL_NVIDIAc                 3   s    | ]	}|   v V  qd S ri   )lower)rk   termkrU   rV   ro   C  s    zget_env_vars.<locals>.<genexpr>z{}={}rf   )r   rw   itemsrr   r   r   rq   )r"   secret_termsreport_prefixvrU   r  rV   get_env_vars4  s   
r$  c               	   C   s  t } t| \}}trNtj}ttjj}ttj	 }tjj}t
tjdr*tjjd u r1d } }}	n+dd }
tj d}|
|d}|
|d}	d}tjj}nd } } }}d } }}	tjdd}t| }t| }t }t }t| }td)i d	|d
|dd|tj d dt d|d|dt| dt dt| dt| dt| d|d|d|	d|d|d|dt | dt! dt"| dt#| d t$| d!t% d"t& d#t'| d$|d%|d&|d'|d(t( S )*Nr   r   c                    s"    fdd| D }|r|d S dS )Nc                    s$   g | ]} |v r| d dd qS )Nr\   r   )rsplit)rk   sr   rU   rV   
<listcomp>]  s   $ z;get_env_info.<locals>.get_version_or_na.<locals>.<listcomp>r   r   rU   )cfgr   _lstrU   r'  rV   get_version_or_na\  s   z'get_env_info.<locals>.get_version_or_narf   zHIP RuntimeMIOpen r   r   r   z{} ({}-bit runtime)r\   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r    r!   r"   rU   ))rW   r  r   r(   r   r>   r   debugr   r   r   r   _C_show_configr   r   replacer{   r   r   r   r   r   r   maxsize
bit_lengthr   r   r	  r   r   r   r   r   r   r   r   r  r   r   r$  )rX   r   pip_list_outputr   debug_mode_strcuda_available_strcuda_version_strr   r   r   r+  r)  sys_versionr   r   r   r    r!   rU   rU   rV   get_env_infoM  s   



	
 r9  a  
==============================
        System Info
==============================
OS                           : {os}
GCC version                  : {gcc_version}
Clang version                : {clang_version}
CMake version                : {cmake_version}
Libc version                 : {libc_version}

==============================
       PyTorch Info
==============================
PyTorch version              : {torch_version}
Is debug build               : {is_debug_build}
CUDA used to build PyTorch   : {cuda_compiled_version}
ROCM used to build PyTorch   : {hip_compiled_version}

==============================
      Python Environment
==============================
Python version               : {python_version}
Python platform              : {python_platform}

==============================
       CUDA / GPU Info
==============================
Is CUDA available            : {is_cuda_available}
CUDA runtime version         : {cuda_runtime_version}
CUDA_MODULE_LOADING set to   : {cuda_module_loading}
GPU models and configuration : {nvidia_gpu_models}
Nvidia driver version        : {nvidia_driver_version}
cuDNN version                : {cudnn_version}
HIP runtime version          : {hip_runtime_version}
MIOpen runtime version       : {miopen_runtime_version}
Is XNNPACK available         : {is_xnnpack_available}

==============================
          CPU Info
==============================
{cpu_info}

==============================
Versions of relevant libraries
==============================
{pip_packages}
{conda_packages}
z

aU  
==============================
         vLLM Info
==============================
ROCM Version                 : {rocm_version}
vLLM Version                 : {vllm_version}
vLLM Build Flags:
  {vllm_build_flags}
GPU Topology:
  {gpu_topo}

==============================
     Environment Variables
==============================
{env_vars}
c           
         s*  ddd}ddd}dd	d
}d dd}dd }|    || j d< g d}|dg }t fdd|D }trRtj sR|rR|D ]}	d |	< qB| jd u rRd d< |  |  | d  d< | d  d<  d r{| d d| j	 d<  d r| d d d< | j
 d< tjd!i  S )"NCould not collectc                 S   s(   |   D ]}| | d urq|| |< q| S ri   keys)dctreplacementkeyrU   rU   rV   replace_nones  s
   
z!pretty_str.<locals>.replace_nonesYesNoc                 S   s<   |   D ]}| | du r|| |< q| | du r|| |< q| S )NTFr;  )r=  truefalser?  rU   rU   rV   replace_bools  s   
z!pretty_str.<locals>.replace_bools	[prepend]c                    s&   |  d} fdd|D }d|S )Nrf   c                    s   g | ]} | qS rU   rU   r   tagrU   rV   r(    s    z/pretty_str.<locals>.prepend.<locals>.<listcomp>)r   ry   )textrH  linesupdated_linesrU   rG  rV   prepend  s   

zpretty_str.<locals>.prependNo relevant packagesc                 S   s   | d urt | dkr|S | S r   )r   )rI  r>  rU   rU   rV   replace_if_empty  s   z$pretty_str.<locals>.replace_if_emptyc                 S   s(   | d urt | ddkrd| S | S )Nrf   r\   z
{}
)r   r   r   )stringrU   rU   rV   maybe_start_on_next_line  s   
z,pretty_str.<locals>.maybe_start_on_next_liner   )r   r   r   r   c                 3   s    | ]	} | d u V  qd S ri   rU   )rk   fieldmutable_dictrU   rV   ro     s    
zpretty_str.<locals>.<genexpr>zNo CUDAr   r   r   r   z[{}] z[conda] r   )r:  )rA  rB  )rF  )rM  rU   )_asdictr   allr   r(   r   r   r   r   r   r   env_info_fmt)
envinfor@  rE  rL  rN  rP  dynamic_cuda_fieldsall_cuda_fieldsall_dynamic_cuda_fields_missingrQ  rU   rR  rV   
pretty_str  sL   







r[  c                   C   s
   t t S ri   )r[  r9  rU   rU   rU   rV   get_pretty_env_info1  s   
r\  c                     s   t d t } t |  tr\ttdr^ttjdr`tjjj tj	dkrbt
j rd fddt
 D }t|t
jjd}t
j|}tj|d}d	||d
 }t |tjd d S d S d S d S d S d S )Nz%Collecting environment information...utils_crash_handlerr   c                    s   g | ]	}t j |qS rU   )r   r   ry   )rk   dumpminidump_dirrU   rV   r(  A  s    zmain.<locals>.<listcomp>)r?  z%Y-%m-%d %H:%M:%Sz.
*** Detected a minidump at {} created on {}, zKif this is related to your bug please include it when you file a report ***)file)r   r\  r   r   r(   r]  r^  DEFAULT_MINIDUMP_DIRr   r   r   r   r   listdirmaxgetctimedatetimefromtimestampstrftimer   r6   )rR   dumpslatestctimecreation_timemsgrU   r`  rV   main5  s8   


ro  __main__ri   ):rg  rE   r   r?   r   collectionsr   r`   r]   	vllm.envsr   r(   r   r   	NameErrorAttributeErrorOSErrorr   rv   r  rW   r[   rb   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   rD   r   r   r   r   r   r   r   r   r  r  r	  r   r$  r9  rI   rV  r[  r\  ro  __name__rU   rU   rU   rV   <module>   s   $

%W	

"		I/4S
