o
    )ino                     @   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neuron_sdk_versionvllm_versionvllm_build_flagsgpu_topoenv_vars>   ZsoumithnvidianumpyoptreepynvmlncclZcudatoolkitZmkltransformerstorchtritonzmqZmagma>   r$   r%   r&   r'   r(   Zflake8r)   r+   r*   r,   ZonnxZmypyc           
      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win32Z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)
commandr/   p
raw_outputZraw_errrcencoutputerrZcmd_str rJ   \/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/vllm/collect_env.pyrun`   s,   



rL   c                 C   s   | |\}}}|dkrdS |S )zIRun command using run_lambda; reads and returns entire output if rc is 0.r   NrJ   
run_lambdarC   rF   out_rJ   rJ   rK   run_and_read_all}   s   rQ   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)rN   rC   regexrF   rO   rP   matchrJ   rJ   rK   run_and_parse_first_match   s   
rX   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
)splitrM   rJ   rJ   rK   run_and_return_first_line   s   r[   c                    sP    d u rt  tjdd}t| |dg}|d u r|S d fdd| D S )NZ	CONDA_EXEcondalistrY   c                 3   s4    | ]   d st fddD r V  qdS )#c                 3       | ]}| v V  qd S NrJ   .0namelinerJ   rK   	<genexpr>   s    z/get_conda_packages.<locals>.<genexpr>.<genexpr>N)
startswithanyrb   patternsrd   rK   rf      s    z%get_conda_packages.<locals>.<genexpr>)DEFAULT_CONDA_PATTERNSr   environgetrQ   join
splitlines)rN   rk   r\   rO   rJ   rj   rK   get_conda_packages   s   rq   c                 C      t | ddS )Nzgcc --versionzgcc (.*)rX   rN   rJ   rJ   rK   get_gcc_version   s   ru   c                 C   rr   )Nzclang --versionzclang version (.*)rs   rt   rJ   rJ   rK   get_clang_version      rv   c                 C   rr   )Nzcmake --versionz
cmake (.*)rs   rt   rJ   rJ   rK   get_cmake_version   rw   rx   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: (.*?) )r;   rX   get_nvidia_smi)rN   cmdsmirJ   rJ   rK   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 )
Nry   hipr   gcnArchNamez ({})ZNoGCNArchNameOnOldPyTorchr3   z \(UUID: .+?\)z -L)r;   TORCH_AVAILABLEhasattrr*   versionr~   cudais_availableZget_device_propertiesformatr   Zget_device_namerz   rS   compilesub)rN   propZgcnArchr|   Z
uuid_regexrF   rO   rP   rJ   rJ   rK   get_gpu_info   s&   

r   c                 C   rr   )Nznvcc --versionzrelease .+ V(.*)rs   rt   rJ   rJ   rK   get_running_cuda_version   rw   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.r0   
SYSTEMROOT
C:\WindowsZ	CUDA_PATHz%CUDA_PATH%System32wherez{} /R "{}\bin" cudnn*.dllry   z ls /usr/local/cuda/lib/libcudnn*z7ldconfig -p | grep libcudnn | rev | cut -d" " -f1 | revr   rR   ZCUDNN_LIBRARYNrY   z!Probably one of the following:
{})r;   r   rm   rn   pathro   r   lenisfilerealpathsetrZ   addsorted)rN   system_rootZ	cuda_pathZ	where_cmdZ	cudnn_cmdrF   rO   rP   lZ	files_setfnfilesresultrJ   rJ   rK   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-smir0   r   r   ZPROGRAMFILESzC:\Program FileszNVIDIA CorporationZNVSMIr   z"{}")r;   r   rm   rn   r   ro   existsr   )r|   r   Zprogram_files_rootZlegacy_pathnew_pathZsmisZcandidate_smirJ   rJ   rK   rz      s$   


rz   c                 C   rr   )z7Returns the ROCm version if available, otherwise 'N/A'.zhipcc --versionzHIP version: (\S+)rs   rt   rJ   rJ   rK   get_rocm_version  s   r   c                 C   s8   z| dg}|d dkr|W S dW S  t y   Y dS w )Nz	neuron-lsr   N/A)	Exception)rN   r   rJ   rJ   rK   get_neuron_sdk_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.rR   z (git sha: z, date: ))Zvllmr   r   rB   r5   rg   rZ   )r   r   version_strZgit_shadaterJ   rJ   rK   get_vllm_version  s   r   c                   C   s:   d tjddtjdrdndtjdrdS dS )Nz$CUDA Archs: {}; ROCm: {}; Neuron: {}ZTORCH_CUDA_ARCH_LISTzNot SetZ	ROCM_HOMEZEnabledZDisabledZNEURON_CORES)r   r   rm   rn   rJ   rJ   rJ   rK   summarize_vllm_build_flags3  s   r   c                 C   s.   d }t  dkrt| d}|d u rt| d}|S )Nlinuxr1   zrocm-smi --showtopo)r;   rQ   )rN   rH   rJ   rJ   rK   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   r3   r3   r   Zlscpur0   zwmic cpu get Name,Manufacturer,Family,Architecture,ProcessorType,DeviceID,         CurrentClockSpeed,MaxClockSpeed,L2CacheSize,L2CacheSpeed,Revision /VALUEry   z"sysctl -n machdep.cpu.brand_stringNoner   )r;   )rN   rF   rO   rI   r   rJ   rJ   rK   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   r0   cygwinry   )sysplatformrg   rJ   rJ   rJ   rK   r;     s   r;   c                 C   rr   )Nzsw_vers -productVersionz(.*)rs   rt   rJ   rJ   rK   get_mac_version  rw   r   c                 C   sB   t jdd}t j|ddd}t j|dd}t| d||S )Nr   r   r   ZWbemZwmicZfindstrz!{} os get Caption | {} /v Caption)r   rm   rn   r   ro   rQ   r   )rN   r   Zwmic_cmdZfindstr_cmdrJ   rJ   rK   get_windows_version  s   
r   c                 C   rr   )Nzlsb_release -azDescription:\t(.*)rs   rt   rJ   rJ   rK   get_lsb_version  rw   r   c                 C   rr   )Nzcat /etc/*-releasezPRETTY_NAME="(.*)"rs   rt   rJ   rJ   rK   check_release_file  rw   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   )machiner0   r   ry   zmacOS {} ({})r   z{} ({}))r   r   r;   r   r   r   r   r   )rN   r   r   r   ZdescrJ   rJ   rK   get_os  s$   r   c                  C   s   dd l } |   S Nr   r   r   rJ   rJ   rK   get_python_platform  s   r   c                  C   s$   dd l } t dkrdS d|  S )Nr   r   r   -)r   r;   ro   libc_verr   rJ   rJ   rK   get_libc_version  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jdd ur7t	d g d	}nt
d
t|}d fdd| D S )Nr   pipFz-mpipr]   --format=freezeZUVz	uv is set)Zuvr   r]   r   zBCould not collect pip list output (pip or uv module not available)rY   c                 3   s*    | ] t  fd dD r V  qdS )c                 3   r_   r`   rJ   ra   rd   rJ   rK   rf     s    zCget_pip_packages.<locals>.run_with_pip.<locals>.<genexpr>.<genexpr>N)rh   ri   rj   rd   rK   rf     s    z9get_pip_packages.<locals>.run_with_pip.<locals>.<genexpr>)importlib.utilutil	find_specImportErrorr   
executabler   rm   rn   printRuntimeErrorrQ   ro   rp   )	importlibZpip_specZpip_availabler{   rO   rk   rN   rJ   rK   run_with_pip  s"   

z&get_pip_packages.<locals>.run_with_pipr   3Zpip3r   )DEFAULT_PIP_PATTERNSr   r   )rN   rk   r   r   rO   rJ   r   rK   get_pip_packages  s   r   c                  C   s   t jdd} | S )NZPYTORCH_CUDA_ALLOC_CONFr3   )r   rm   rn   )Z	ca_configrJ   rJ   rK   get_cachingallocator_config  s   r   c                  C   s.   t rtj rtj  tjdd} | S dS )NZCUDA_MODULE_LOADINGr3   r   )r   r*   r   r   initr   rm   rn   )configrJ   rJ   rK   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   Ztorch.backends.xnnpackr5   backendsZxnnpackenabled)r*   rJ   rJ   rK   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 )Nr3   )secrettokenapiaccesspassword)	ZTORCHZNCCLZPYTORCHCUDAZCUBLASZCUDNNZOMP_ZMKL_ZNVIDIAc                 3   s    | ]	}|   v V  qd S r`   )lower)rb   termkrJ   rK   rf   2  s    zget_env_vars.<locals>.<genexpr>z{}={}rY   )r   rm   itemsrh   r   r   rg   )r#   Zsecret_termsZreport_prefixvrJ   r   rK   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| }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(|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 )NrR   r   )rsplit)rb   sprefixrJ   rK   
<listcomp>K  s   $ z;get_env_info.<locals>.get_version_or_na.<locals>.<listcomp>r   r   rJ   )cfgr   Z_lstrJ   r   rK   get_version_or_naJ  s   z'get_env_info.<locals>.get_version_or_narY   zHIP RuntimeZMIOpen r   r   r   z{} ({}-bit runtime)rR   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#   rJ   )*rL   r   r   r*   r   r5   r   debugr   r   r   r~   Z_CZ_show_configrZ   r   replacerq   r   r   r   r   r   r   r   maxsize
bit_lengthr   r   r   r   r}   r   r   r   ru   rv   rx   r   r   r   r   )rN   r   Zpip_list_outputr   Zdebug_mode_strZcuda_available_strZcuda_version_strr   r   r   r   r   sys_versionr   r   r   r    r!   r"   rJ   rJ   rK   get_env_info<  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

a  
==============================
         vLLM Info
==============================
ROCM Version                 : {rocm_version}
Neuron SDK Version           : {neuron_sdk_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 r`   keys)dctreplacementkeyrJ   rJ   rK   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   rJ   rJ   rK   replace_bools  s   
z!pretty_str.<locals>.replace_bools	[prepend]c                    s&   |  d} fdd|D }d|S )NrY   c                    s   g | ]} | qS rJ   rJ   )rb   re   tagrJ   rK   r     s    z/pretty_str.<locals>.prepend.<locals>.<listcomp>)rZ   ro   )textr   linesZupdated_linesrJ   r   rK   prepend  s   

zpretty_str.<locals>.prependNo relevant packagesc                 S   s   | d urt | dkr|S | S r   )r   )r   r   rJ   rJ   rK   replace_if_empty  s   z$pretty_str.<locals>.replace_if_emptyc                 S   s(   | d urt | ddkrd| S | S )NrY   rR   z
{}
)r   rZ   r   )stringrJ   rJ   rK   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 r`   rJ   )rb   fieldZmutable_dictrJ   rK   rf     s    zpretty_str.<locals>.<genexpr>zNo CUDAr   r   r   r   z[{}] z[conda] r   )r   )r   r   )r   )r  rJ   )_asdictr   allr   r*   r   r   r   r   r   r   env_info_fmt)
Zenvinfor   r   r  r  r  Zdynamic_cuda_fieldsZall_cuda_fieldsZall_dynamic_cuda_fields_missingr  rJ   r  rK   
pretty_str  sL   







r  c                   C   s
   t t S r`   )r  r   rJ   rJ   rJ   rK   get_pretty_env_info  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 rJ   )r   r   ro   )rb   dumpZminidump_dirrJ   rK   r   +  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  ZDEFAULT_MINIDUMP_DIRr   r   r   r   r   listdirmaxgetctimedatetimefromtimestampstrftimer   r.   )rH   dumpsZlatestctimeZcreation_timemsgrJ   r  rK   main"  s,   


r  __main__r`   );r  r<   r   r6   r   collectionsr   rV   rS   Z	vllm.envsr   r*   r   r   	NameErrorAttributeErrorOSErrorr   rl   r   rL   rQ   rX   r[   rq   ru   rv   rx   r}   r   r   r   rz   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  __name__rJ   rJ   rJ   rK   <module>   s   $

%		W	
 		J/4O
