
     NgY                         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          Zd Zdd	efd
Zedk    r% e            Z e eej                             dS dS )    N)environ)DictList)	NVMLErrornvmlDeviceGetCountnvmlDeviceGetHandleByIndexnvmlDeviceGetMemoryInfonvmlDeviceGetNamenvmlInitnvmlShutdownnvmlSystemGetDriverVersionc                       e Zd ZdZddZd ZdefdZded	ede	fd
Z
defdZdefdZdee	         fdZdefdZdefdZdefdZdS )MachineInfoz'Class encapsulating Machine Info logic.FNc                 J   || _         |?t          j        dt          j                   t          j        t
                    | _        n|| _        d | _        	 |                                 | _        d S # t          $ r% | j        
                    d           d | _        Y d S w xY 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   s      a/var/www/html/ai-engine/env/lib/python3.11/site-packages/onnxruntime/transformers/machine_info.py__init__zMachineInfo.__init__    s    >Ll    "+H55DKK DK 	% $ 5 5 7 7D 	% 	% 	%K!!"FGGG $D	%s   A3 3+B"!B"c           
         |                                  }t          j                    }||                                 |                                 t	          j                    |                     |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   s       r   r   zMachineInfo.get_machine_info3   s    ,,..')) $$&&**,,#%%mmH/?.@AA11334466,,..2244

 

     returnc                 F    t          j                    }|j        |j        dS )zGet memory info)total	available)psutilvirtual_memoryr;   r<   )r   mems     r   r/   zMachineInfo.get_memory_infoE   s"    #%%???r8   r7   namesc                     |D ]O}||v rI||         }t          |t          t          f          r!d                    d |D                       c S |c S PdS )N,c                 ,    g | ]}t          |          S  )str).0is     r   
<listcomp>z(MachineInfo._try_get.<locals>.<listcomp>O   s    $;$;$;SVV$;$;$;r8    )
isinstancelisttuplejoin)r   r7   r@   namevalues        r   r1   zMachineInfo._try_getJ   sw     	 	Dx edE]33 =88$;$;U$;$;$;<<<<<	  
 rr8   c           	      ^   t          j                    }|                     |ddg          t          j        d          t          j        d          |                     |dg          |                     |dg          |                     |dg          t          j                    j        d	S )
zGet CPU infobrand	brand_rawF)logicalT	hz_actuall2_cache_sizeflags)rQ   coreslogical_coreshzl2_cacherV   	processor)r-   r.   r1   r=   	cpu_countr0   unamer[   )r   r7   s     r   r.   zMachineInfo.get_cpu_infoS   s    ')) ]]8g{-CDD%e444#-d;;;--;-88h0ABB]]8gY77!))3
 
 	
r8   c                    g }d}	 t                       t                      }t                      }t          |          D ]]}t	          |          }t          |          }i }|j        |d<   |j        |d<   t          |          |d<   |	                    |           ^t                       n:# t          $ r-}| j        s| j                            d|           Y d}~dS d}~ww xY w||d}	dt          v rt          d         |	d<   |	S )	zGet GPU info using nvmlNmemory_totalmemory_availablerN   z-Error fetching GPU information using nvml: %s)driver_versiondevicesCUDA_VISIBLE_DEVICEScuda_visible)r   r   r   ranger   r	   r;   freer
   appendr   r   r   r   errorr   )
r   gpu_info_listra   deviceCountrG   handleinfor6   rh   results
             r   r,   z MachineInfo.get_gpu_info_by_nvmla   s3   	JJJ799N,..K;'' / /3A66.v66+/:(/3y+,#4V#<#< $$X....NNNN 	 	 	; Z!!"QSXYYY44444	
 %3}MM!W,,%,-C%DF>"s   B%B, ,
C#6"CC#c                 B    dd l }|j        }g dfd|D             }|S )Nr   )zonnxruntime-gpur)   onnxtransformersprotobufsympytorchr+   flatbuffersnumpyzonnxconverter-commonc                 <    i | ]}|j         v |j         |j        S rD   )keyversion)rF   rG   related_packagess     r   
<dictcomp>z4MachineInfo.get_related_packages.<locals>.<dictcomp>   s.     k k kaQRQVZjQjQj	QjQjQjr8   )pkg_resourcesworking_set)r   r{   installed_packagesrelated_packages_listry   s       @r   r2   z MachineInfo.get_related_packages}   sN    *6
 
 
 !l k k k;M k k k$$r8   c                 $   	 dd l }|j        d|                                v dS # t          $ r,}| j        s| j                            |           Y d }~d S d }~wt          $ r-}| j        s| j                            |d           Y d }~d S d }~ww xY w)Nr   CUDAExecutionProvider)rx   support_gpuF)r)   __version__get_available_providersImportErrorr   r   r   r   )r   r)   rh   r   s       r   r3   z MachineInfo.get_onnxruntime_info   s    	 '26+:]:]:_:__    	 	 	; -%%e,,,44444 	 	 	; 8%%i77744444	s    !$ 
B!AB""B

Bc                 @   	 dd l }|j        |j                                        |j        j        dS # t
          $ r,}| j        s| j                            |           Y d }~d S d }~wt          $ r-}| j        s| j                            |d           Y d }~d S d }~ww xY w)Nr   )rx   r   cudaF)
rs   r   r   is_availablerx   r   r   r   r   r   )r   rs   rh   r   s       r   r4   zMachineInfo.get_pytorch_info   s    	LLL !,$z6688*  
  	 	 	; -%%e,,,44444 	 	 	; 8%%i77744444	s    /2 
B!A##B0"BBc                 H   	 dd l }|j        j        |j        j        |j                                        dS # t          $ r,}| j        s| j        	                    |           Y d }~d S d }~wt          $ r,}| j        s| j        	                    |           Y d }~d S d }~ww xY w)Nr   )rx   git_versionr   )r+   rx   VERSIONGIT_VERSIONtestis_built_with_cudar   r   r   r   ModuleNotFoundError)r   tfrh   s      r   r5   zMachineInfo.get_tensorflow_info   s    	#### :-!z5!w99;;  
  	 	 	; -%%e,,,44444" 	 	 	; -%%e,,,44444	s!   47 
B!!A((B!5!BB!)FN)r   
__module____qualname____doc__r    r   r   r/   r   rE   r1   r.   r,   r2   r3   r4   r5   rD   r8   r   r   r      s,       11% % % %&  $@ @ @ @ @
 d s    
d 
 
 
 
d    8%d3i % % % %(d    "$    $T      r8   r   c                      t          j                    } |                     ddd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argss     r   parse_argumentsr      sh    $&&F
)	     u%%%DKr8   Tr9   c                 V    t          |           }t          j        |j        d          S )N   )indent)r   jsondumpsr   )r   machines     r   r   r      s'    &!!G:g*15555r8   __main__)T)r   r   r   r0   r&   r   typingr   r   r-   r=   py3nvml.py3nvmlr   r   r   r	   r
   r   r   r   r   r   rE   r   r   r   printr   rD   r8   r   <module>r      sq                      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	g g g g g g g gT  6 6S 6 6 6 6
 z?D	E

4;
'
'((((( r8   