o
    3Ih9                     @   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   e/home/air/sanwanet/gpt-api/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onnxruntime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)psutilvirtual_memoryr4   r5   )r   memr   r   r   r*   D   s   zMachineInfo.get_memory_infor2   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   r2   r9   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brand	brand_rawF)logicalT	hz_actuall2_cache_sizeflags)rG   coreslogical_coreshzl2_cacherL   	processor)r(   r)   r,   r6   	cpu_countr+   unamerQ   )r   r2   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 nvmlNmemory_totalmemory_availablerE   z-Error fetching GPU information using nvml: %s)driver_versiondevicesCUDA_VISIBLE_DEVICEScuda_visible)r   r
   r   ranger   r   r4   freer   appendr	   r   r   r   errorr   )
r   gpu_info_listrV   deviceCountr>   handleinfor1   r]   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$   onnxtransformersprotobufsympytorchr&   flatbuffersnumpyzonnxconverter-commonc                    s    i | ]}|j  v r|j |jqS r   )keyversionr<   related_packagesr   r   
<dictcomp>   s     z4MachineInfo.get_related_packages.<locals>.<dictcomp>)pkg_resourcesworking_set)r   ro   installed_packagesrelated_packages_listr   rl   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   CUDAExecutionProvider)rk   support_gpuF)r$   __version__get_available_providersImportErrorr   r   r   r   )r   r$   r]   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   )rk   rt   cudaF)
rg   ru   rx   is_availablerk   rw   r   r   r   r   )r   rg   r]   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   )rk   git_versionrt   )r&   rk   VERSIONGIT_VERSIONtestis_built_with_cudarw   r   r   r   ModuleNotFoundError)r   tfr]   r   r   r   r0      s"   zMachineInfo.get_tensorflow_info)FN)r   
__module____qualname____doc__r   r   dictr*   rB   r;   r,   r)   r'   r-   r.   r/   r0   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   r   Tr3   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=   rj   rF   r   r   r   rn      s    z#get_device_info.<locals>.<dictcomp>r   r   )r   r   itemsr   r   )r   r   ra   r   r   r   get_device_info   s
   r   __main__)T)r   r   r   r+   r!   r   r(   r6   py3nvml.py3nvmlr   r   r   r   r   r   r	   r
   r   r   r;   r   r   r   r   printr   r   r   r   r   <module>   s"   ( +