o
    -im                     @   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dd ZdVd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-d>d? Z.dVd@dAZ/dBdC Z0dDdE Z1dFdG Z2dHdI Z3dJdK Z4dL5 Z6e6dM7 Z6e6dN5 7 Z6dOdP Z7dQdR Z8dSdT Z9e:dUkre9  dS dS )W    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   M/home/ubuntu/veenaModal/venv/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)rY   rL   regexrP   rZ   r[   matchrU   rU   rV   run_and_parse_first_match   s   
rc   c                 C   s(   | |\}}}|dkrdS | dd S )zKRun command using run_lambda and returns first line if output is not empty.r   N
)splitrX   rU   rU   rV   run_and_return_first_line   s   rf   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listrd   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rn   patternsrp   rV   rr      s    
z%get_conda_packages.<locals>.<genexpr>)DEFAULT_CONDA_PATTERNSr   environgetr\   join
splitlines)rY   rx   rh   rZ   rU   rw   rV   get_conda_packages   s   r~   c                 C      t | ddS )Nzgcc --versionzgcc (.*)rc   rY   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   rc   get_nvidia_smi)rY   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)rY   propgcnArchr   
uuid_regexrP   rZ   r[   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_LIBRARYNrd   z!Probably one of the following:
{})rD   r   rz   r{   pathr|   r   lenisfilerealpathsetre   addsorted)rY   system_root	cuda_path	where_cmd	cudnn_cmdrP   rZ   r[   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   rz   r{   r   r|   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>   rt   re   )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   rz   r{   rU   rU   rU   rV   summarize_vllm_build_flags4  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\   )rY   rR   rU   rU   rV   get_gpu_topo<  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   )rY   rP   rZ   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platformrt   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   rz   r{   r   r|   r\   r   )rY   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   )rY   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   r|   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)rt   rn   rq   rU   rU   rV   rr     s    zis_uv_venv.<locals>.<genexpr>F)
r   rz   r{   r   r|   r   prefixr   openru   )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-mpipri   --format=freezez	uv is set)uvr   ri   r   zBCould not collect pip list output (pip or uv module not available)rd   c                 3   s*    | ] t  fd dD r V  qdS )c                 3   rk   rl   rU   rm   rp   rU   rV   rr     rs   zCget_pip_packages.<locals>.run_with_pip.<locals>.<genexpr>.<genexpr>N)ru   rv   rw   rp   rV   rr     s    
z9get_pip_packages.<locals>.run_with_pip.<locals>.<genexpr>)importlib.utilutil	find_specImportErrorr   
executabler   printRuntimeErrorr\   r|   r}   )	importlibpip_specpip_availabler   rZ   rx   rY   rU   rV   run_with_pip  s&   

z&get_pip_packages.<locals>.run_with_pipr   3pip3r   )DEFAULT_PIP_PATTERNSr   r   )rY   rx   r   r   rZ   rU   r   rV   get_pip_packages  s   r  c                  C   s   t jdd} | S )NPYTORCH_CUDA_ALLOC_CONFr<   )r   rz   r{   )	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   rz   r{   )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   3  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 rl   )lower)rn   termkrU   rV   rr   K  s    zget_env_vars.<locals>.<genexpr>z{}={}rd   )r   rz   itemsru   r   r   rt   )r"   secret_termsreport_prefixvrU   r   rV   get_env_vars<  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)rn   sr   rU   rV   
<listcomp>e  s   $ z;get_env_info.<locals>.get_version_or_na.<locals>.<listcomp>r   r   rU   )cfgr   _lstrU   r)  rV   get_version_or_nad  s   z'get_env_info.<locals>.get_version_or_nard   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_configre   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&  )rY   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_infoU  s   



	
 r;  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 rl   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falserA  rU   rU   rV   replace_bools  s   
z!pretty_str.<locals>.replace_bools	[prepend]c                    s&   |  d} fdd|D }d|S )Nrd   c                    s   g | ]} | qS rU   rU   r   tagrU   rV   r*    s    z/pretty_str.<locals>.prepend.<locals>.<listcomp>)re   r|   )textrJ  linesupdated_linesrU   rI  rV   prepend  s   

zpretty_str.<locals>.prependNo relevant packagesc                 S   s   | d urt | dkr|S | S r   )r   )rK  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 )Nrd   r]   z
{}
)r   re   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 rl   rU   )rn   fieldmutable_dictrU   rV   rr     s    
zpretty_str.<locals>.<genexpr>zNo CUDAr   r   r   r   z[{}] z[conda] r   )r<  )rC  rD  )rH  )rO  rU   )_asdictr   allr   r(   r   r   r   r   r   r   env_info_fmt)
envinforB  rG  rN  rP  rR  dynamic_cuda_fieldsall_cuda_fieldsall_dynamic_cuda_fields_missingrS  rU   rT  rV   
pretty_str  sL   







r]  c                   C   s
   t t S rl   )r]  r;  rU   rU   rU   rV   get_pretty_env_info9  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   r|   )rn   dumpminidump_dirrU   rV   r*  I  s    zmain.<locals>.<listcomp>)rA  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   rb  rV   main=  s8   


rq  __main__rl   );ri  rE   r   r?   r   collectionsr   ra   r^   	vllm.envsr   r(   r   r   	NameErrorAttributeErrorOSErrorr   ry   r  rW   r\   rc   rf   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&  r;  rI   rX  r]  r^  rq  __name__rU   rU   rU   rV   <module>   s   $

%W	

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