U
    T?h                     @   s   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
Z
d dlmZmZmZmZmZmZmZmZ G dd dZdd Zded
ddZedkre Zeeej dS )    N)environ)DictList)	NVMLErrornvmlDeviceGetCountnvmlDeviceGetHandleByIndexnvmlDeviceGetMemoryInfonvmlDeviceGetNamenvmlInitnvmlShutdownnvmlSystemGetDriverVersionc                   @   s   e Zd ZdZdddZdd Zedd	d
Zeee	dddZ
edddZedddZee	 dddZedddZedddZedddZdS )MachineInfoz'Class encapsulating Machine Info logic.FNc                 C   sr   || _ |d kr,tjdtjd tt| _n|| _d | _z|  | _W n& t	k
rl   | j
d d | _Y nX d S )Nz3%(asctime)s - %(name)s - %(levelname)s: %(message)s)formatlevelz"Exception in getting machine info.)silentloggingbasicConfigINFO	getLogger__name__loggermachine_infoget_machine_info	Exception	exception)selfr   r    r   W/var/www/html/venv/lib/python3.8/site-packages/onnxruntime/transformers/machine_info.py__init__    s    zMachineInfo.__init__c              
   C   sR   |   }t }||  |  t | |dg|  |  |  | 	 d	}|S )z!Get machine info in metric formatpython_version)	ZgpucpuZmemoryospythonpackagesonnxruntimeZpytorch
tensorflow)
get_gpu_info_by_nvmlcpuinfoget_cpu_infoget_memory_infoplatform_try_getget_related_packagesget_onnxruntime_infoget_pytorch_infoget_tensorflow_info)r   gpu_infocpu_infor   r   r   r   r   3   s    zMachineInfo.get_machine_inforeturnc                 C   s   t  }|j|jdS )zGet memory info)total	available)psutilZvirtual_memoryr4   r5   )r   Zmemr   r   r   r)   E   s    zMachineInfo.get_memory_info)r1   namesr3   c                 C   sL   |D ]B}||kr|| }t |ttfr>ddd |D   S |  S qdS )N,c                 S   s   g | ]}t |qS r   )str.0ir   r   r   
<listcomp>O   s     z(MachineInfo._try_get.<locals>.<listcomp> )
isinstancelisttuplejoin)r   r1   r7   namevaluer   r   r   r+   J   s    
zMachineInfo._try_getc              	   C   s\   t  }| |ddgtjddtjdd| |dg| |dg| |dgt jd	S )
zGet CPU infobrandZ	brand_rawF)ZlogicalTZ	hz_actualZl2_cache_sizeflags)rE   ZcoresZlogical_coreshzZl2_cacherF   	processor)r'   r(   r+   r6   	cpu_countr*   unamerH   )r   r1   r   r   r   r(   S   s    

zMachineInfo.get_cpu_infoc           
   
   C   s   g }d}zht   t }t }t|D ]B}t|}t|}i }|j|d< |j|d< t||d< |	| q$t
  W n< tk
r } z| js| jd| W Y dS d}~X Y nX ||d}	dtkrtd |	d< |	S )	zGet GPU info using nvmlNZmemory_totalZmemory_availablerC   z-Error fetching GPU information using nvml: %s)driver_versionZdevicesZCUDA_VISIBLE_DEVICESZcuda_visible)r
   r   r   ranger   r   r4   freer	   appendr   r   r   r   errorr   )
r   Zgpu_info_listrK   ZdeviceCountr<   handleinfor0   rO   resultr   r   r   r&   a   s.    



z MachineInfo.get_gpu_info_by_nvmlc                    sB   dd l }|j}dddddddd	d
ddddg  fdd|D }|S )Nr   zonnxruntime-gpur$   zort-nightly-gpuzort-nightlyZonnxZtransformersprotobufZsympytorchr%   Zflatbuffersnumpyzonnxconverter-commonc                    s    i | ]}|j  kr|j |jqS r   )keyversionr:   Zrelated_packagesr   r   
<dictcomp>   s     
  z4MachineInfo.get_related_packages.<locals>.<dictcomp>)pkg_resourcesworking_set)r   rZ   Zinstalled_packagesZrelated_packages_listr   rX   r   r,   }   s$    z MachineInfo.get_related_packagesc              
   C   s   zdd l }|jd| kdW S  tk
rX } z| jsB| j| W Y d S d }~X Y n< tk
r } z| js|| j|d W Y d S d }~X Y nX d S )Nr   ZCUDAExecutionProvider)rW   support_gpuF)r$   __version__Zget_available_providersImportErrorr   r   r   r   )r   r$   rO   r   r   r   r   r-      s    
z MachineInfo.get_onnxruntime_infoc              
   C   s   z"dd l }|j|j |jjdW S  tk
r\ } z| jsF| j| W Y d S d }~X Y n< t	k
r } z| js| j|d W Y d S d }~X Y nX d S )Nr   )rW   r\   cudaF)
rT   r]   r_   Zis_availablerW   r^   r   r   r   r   )r   rT   rO   r   r   r   r   r.      s    zMachineInfo.get_pytorch_infoc              
   C   s   z$dd l }|jj|jj|j dW S  tk
r^ } z| jsH| j	| W Y d S d }~X Y n: t
k
r } z| js| j	| W Y d S d }~X Y nX d S )Nr   )rW   Zgit_versionr\   )r%   rW   VERSIONZGIT_VERSIONtestZis_built_with_cudar^   r   r   r   ModuleNotFoundError)r   tfrO   r   r   r   r/      s    zMachineInfo.get_tensorflow_info)FN)r   
__module____qualname____doc__r   r   r   r)   r   r9   r+   r(   r&   r,   r-   r.   r/   r   r   r   r   r      s   
	r   c                  C   s2   t  } | jddddd | jdd |  }|S )Nz--silentF
store_truezDo not print error message)requiredactionhelp)r   )argparseArgumentParseradd_argumentset_defaults
parse_args)parserargsr   r   r   parse_arguments   s    rr   Tr2   c                 C   s   t | }tj|jddS )N   )indent)r   jsondumpsr   )r   machiner   r   r   r      s    r   __main__)T)rk   ru   r   r*   r!   r   typingr   r   r'   r6   Zpy3nvml.py3nvmlr   r   r   r   r	   r
   r   r   r   rr   r9   r   r   rq   printr   r   r   r   r   <module>   s   ( -