
    fPi}                         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          Zd Zddefd	Zddef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                       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      y/home/jaya/work/projects/VOICE-AGENT/VIET/agent-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_info2   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_memoryr9   r:   )r   mems     r   r-   zMachineInfo.get_memory_infoD   s"    #%%???r6   r5   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>N   s    $;$;$;SVV$;$;$;r6    )
isinstancelisttuplejoin)r   r5   r>   namevalues        r   r/   zMachineInfo._try_getI   sw     	 	Dx edE]33 =88$;$;U$;$;$;<<<<<	  
 rr6   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)rO   coreslogical_coreshzl2_cacherT   	processor)r+   r,   r/   r;   	cpu_countr.   unamerY   )r   r5   s     r   r,   zMachineInfo.get_cpu_infoR   s    ')) ]]8g{-CDD%e444#-d;;;--;-88h0ABB]]8gY77!))3
 
 	
r6   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_availablerL   z-Error fetching GPU information using nvml: %s)driver_versiondevicesCUDA_VISIBLE_DEVICEScuda_visible)r	   r   r   ranger   r   r9   freer   appendr
   r   r   r   errorr   )
r   gpu_info_listr_   deviceCountrE   handleinfor4   rf   results
             r   r*   z MachineInfo.get_gpu_info_by_nvml`   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 rB   )keyversion)rD   rE   related_packagess     r   
<dictcomp>z4MachineInfo.get_related_packages.<locals>.<dictcomp>   s.     k k kaQRQVZjQjQj	QjQjQjr6   )pkg_resourcesworking_set)r   ry   installed_packagesrelated_packages_listrw   s       @r   r0   z MachineInfo.get_related_packages|   sN    *6
 
 
 !l k k k;M k k k$$r6   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)rv   support_gpuF)r'   __version__get_available_providersImportErrorr   r   r   r   )r   r'   rf   r   s       r   r1   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   )rv   r   cudaF)
rq   r   r   is_availablerv   r   r   r   r   r   )r   rq   rf   r   s       r   r2   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   )rv   git_versionr   )r)   rv   VERSIONGIT_VERSIONtestis_built_with_cudar   r   r   r   ModuleNotFoundError)r   tfrf   s      r   r3   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   dictr-   rI   rC   r/   r,   r*   r0   r1   r2   r3   rB   r6   r   r   r      s,       11% % % %&  $@ @ @ @ @
 d s    
d 
 
 
 
d    8%d3i % % % %(d    "$    $T      r6   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Kr6   Tr7   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5r6   c                     t          |           }|j        }|rd |                                D             }t          j        |d          S )Nc                 "    i | ]\  }}|d v 	||S ))r!   r"   r#   rB   )rD   ru   rM   s      r   rx   z#get_device_info.<locals>.<dictcomp>   s)    ]]]zsESD\=\=\U=\=\=\r6   r   r   )r   r   itemsr   r   )r   r   rj   s      r   get_device_infor      sP    &!!GD ^]]TZZ\\]]]:d1%%%%r6   __main__)T)r   r   r   r.   r$   r   r+   r;   py3nvml.py3nvmlr   r   r   r   r   r	   r
   r   r   r   rC   r   r   r   r   printr   rB   r6   r   <module>r      sy              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	g g g g g g g gT  6 6S 6 6 6 6
& &C & & & & z?D	E

4;
'
'((((( r6   