o
    i}                     @   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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d	efd
dZdd	efddZedkr]e Zeeej dS dS )    N)environ)	NVMLErrornvmlDeviceGetCountnvmlDeviceGetHandleByIndexnvmlDeviceGetMemoryInfonvmlDeviceGetNamenvmlInitnvmlShutdownnvmlSystemGetDriverVersionc                   @   s   e Zd ZdZdddZdd Zdefd	d
Zdedede	fddZ
defddZdefddZdee	 fddZdefddZdefddZdefddZdS )MachineInfoz'Class encapsulating Machine Info logic.FNc                 C   sp   || _ |d u rtjdtjd tt| _n|| _d | _z|  | _W d S  t	y7   | j
d d | _Y d S w )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   _/home/kim/smarthome/.venv/lib/python3.10/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)	gpucpu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   2   s   zMachineInfo.get_machine_inforeturnc                 C   s   t  }|j|jdS )zGet memory info)total	available)psutilZvirtual_memoryr3   r4   )r   Zmemr   r   r   r)   D   s   zMachineInfo.get_memory_infor1   namesc                 C   sL   |D ]!}||v 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>N   s    z(MachineInfo._try_get.<locals>.<listcomp> )
isinstancelisttuplejoin)r   r1   r6   namevaluer   r   r   r+   I   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)rD   ZcoresZlogical_coreshzZl2_cacherE   	processor)r'   r(   r+   r5   	cpu_countr*   unamerG   )r   r1   r   r   r   r(   R   s   

zMachineInfo.get_cpu_infoc           
   
   C   s   g }d}z4t   t }t }t|D ]!}t|}t|}i }|j|d< |j|d< t||d< |	| qt
  W n tyU } z| jsJ| jd| W Y d}~dS d}~ww ||d}	dtv retd |	d< |	S )	zGet GPU info using nvmlNZmemory_totalZmemory_availablerB   z-Error fetching GPU information using nvml: %s)driver_versionZdevicesZCUDA_VISIBLE_DEVICESZcuda_visible)r   r
   r   ranger   r   r3   freer   appendr	   r   r   r   errorr   )
r   Zgpu_info_listrJ   ZdeviceCountr;   handleinfor0   rN   resultr   r   r   r&   `   s2   



z MachineInfo.get_gpu_info_by_nvmlc                    s,   dd l }|j}g d  fdd|D }|S )Nr   )zonnxruntime-gpur$   ZonnxZtransformersprotobufZsympytorchr%   Zflatbuffersnumpyzonnxconverter-commonc                    s    i | ]}|j  v r|j |jqS r   )keyversionr9   Zrelated_packagesr   r   
<dictcomp>   s     z4MachineInfo.get_related_packages.<locals>.<dictcomp>)pkg_resourcesworking_set)r   rY   Zinstalled_packagesZrelated_packages_listr   rW   r   r,   |   s
   z MachineInfo.get_related_packagesc              
   C   s   zdd l }|jd| v dW S  ty+ } z| js | j| W Y d }~d S d }~w tyG } z| js<| j|d W Y d }~d S d }~ww )Nr   ZCUDAExecutionProvider)rV   support_gpuF)r$   __version__Zget_available_providersImportErrorr   r   r   r   )r   r$   rN   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y- } z| js"| j| W Y d }~d S d }~w t	yI } z| js>| j|d W Y d }~d S d }~ww )Nr   )rV   r[   cudaF)
rS   r\   r^   Zis_availablerV   r]   r   r   r   r   )r   rS   rN   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y. } z| js#| j	| W Y d }~d S d }~w t
yI } z| js>| j	| W Y d }~d S d }~ww )Nr   )rV   Zgit_versionr[   )r%   rV   VERSIONZGIT_VERSIONtestZis_built_with_cudar]   r   r   r   ModuleNotFoundError)r   tfrN   r   r   r   r/      s"   zMachineInfo.get_tensorflow_info)FN)r   
__module____qualname____doc__r   r   dictr)   r?   r8   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   c                 C   s2   t | }|j}|rdd | D }tj|ddS )Nc                 S   s   i | ]\}}|d v r||qS ))r   r   r    r   )r:   rU   rC   r   r   r   rX      s    z#get_device_info.<locals>.<dictcomp>rs   rt   )r   r   itemsrv   rw   )r   rx   rP   r   r   r   get_device_info   s
   rz   __main__)T)rk   rv   r   r*   r!   r   r'   r5   Zpy3nvml.py3nvmlr   r   r   r   r   r   r	   r
   r   rr   r8   r   rz   r   rq   printr   r   r   r   r   <module>   s"   ( +