
    gY                         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j6                               yy)    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y)MachineInfoz'Class encapsulating Machine Info logic.Nc                 H   || _         |Dt        j                  dt        j                         t        j                  t
              | _        n|| _        d | _        	 | j                         | _        y # t        $ r% | j                  j                  d       d | _        Y y 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      Z/var/www/openai/venv/lib/python3.12/site-packages/onnxruntime/transformers/machine_info.py__init__zMachineInfo.__init__    s    >Lll "++H5DK DK 	% $ 5 5 7D 	%KK!!"FG $D	%s   A3 3+B! B!c           
      T   | j                         }t        j                         }|| j                         | j                         t	        j                         | j                  |dg      | j                         | j                         | j                         | j                         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113446,,.224

     returnc                 \    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 s||   }t        |t        t        f      r*dj                  |D cg c]  }t	        |       c}      c S |c S  yc c}w )N, )
isinstancelisttuplejoinstr)r   r7   r@   namevalueis         r   r1   zMachineInfo._try_getJ   s\    Dx edE]388U$;USVU$;<<   %<s   A
c           	      P   t        j                         }| j                  |ddg      t        j                  d      t        j                  d      | j                  |dg      | j                  |dg      | j                  |dg      t        j                         j                  d	S )
zGet CPU infobrand	brand_rawF)logicalT	hz_actuall2_cache_sizeflags)rM   coreslogical_coreshzl2_cacherR   	processor)r-   r.   r1   r=   	cpu_countr0   unamerW   )r   r7   s     r   r.   zMachineInfo.get_cpu_infoS   s    '') ]]8g{-CD%%e4#--d;--;-8h0AB]]8gY7!)33
 	
r8   c                    g }d}	 t                t               }t               }t        |      D ]W  }t	        |      }t        |      }i }|j                  |d<   |j                  |d<   t        |      |d<   |j                  |       Y t                ||d}	dt        v rt        d   |	d<   |	S # t        $ r2}| j                  s| j                  j                  d|       Y d}~yd}~ww xY w)	zGet GPU info using nvmlNmemory_totalmemory_availablerI   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_listr]   deviceCountrK   handleinfor6   rd   results
             r   r,   z MachineInfo.get_gpu_info_by_nvmla   s    	J79N,.K;'3A6.v6+/::(/3yy+,#4V#< $$X. ( N %3}M!W,%,-C%DF>"  	;;!!"QSXY	s   BB. .	C)7(C$$C)c                     dd l }|j                  }g d}|D ci c](  }|j                  |v s|j                  |j                  * }}|S c c}w )Nr   )zonnxruntime-gpur)   onnxtransformersprotobufsympytorchr+   flatbuffersnumpyzonnxconverter-common)pkg_resourcesworking_setkeyversion)r   rr   installed_packagesrelated_packagesrK   related_packages_lists         r   r2   z MachineInfo.get_related_packages}   s[    *66
 <N k;MaQRQVQVZjQj		!1;M k$$ !ls
   A
A
c                 6   	 dd l }|j                  d|j                         v dS # t        $ r1}| j                  s| j
                  j                  |       Y d }~y d }~wt        $ r2}| j                  s| j
                  j                  |d       Y d }~y d }~ww xY w)Nr   CUDAExecutionProvider)ru   support_gpuF)r)   __version__get_available_providersImportErrorr   r   r   r   )r   r)   rd   r   s       r   r3   z MachineInfo.get_onnxruntime_info   s    	 '226+:]:]:__   	;;%%e, 	;;%%i7	s    "% 	B'AB&(BBc                 p   	 dd l }|j                  |j                  j                         |j                  j                  dS # t
        $ r1}| j                  s| j                  j                  |       Y d }~y d }~wt        $ r2}| j                  s| j                  j                  |d       Y d }~y d }~ww xY w)Nr   )ru   r{   cudaF)
ro   r|   r   is_availableru   r~   r   r   r   r   )r   ro   rd   r   s       r   r4   zMachineInfo.get_pytorch_info   s    	 !,,$zz668** 
  	;;%%e, 	;;%%i7	s#   ?A 	B5'A77B5(B00B5c                    	 dd l }|j                  j                  |j                  j                  |j                  j                         dS # t        $ r1}| j                  s| j                  j                  |       Y d }~y d }~wt        $ r1}| j                  s| j                  j                  |       Y d }~y d }~ww xY w)Nr   )ru   git_versionr{   )r+   ru   VERSIONGIT_VERSIONtestis_built_with_cudar~   r   r   r   ModuleNotFoundError)r   tfrd   s      r   r5   zMachineInfo.get_tensorflow_info   s    	# ::--!zz55!ww99; 
  	;;%%e," 	;;%%e,	s$   A	A 	B>'BB>'B99B>)FN)r   
__module____qualname____doc__r    r   r   r/   r   rH   r1   r.   r,   r2   r3   r4   r5    r8   r   r   r      s    1%&$@ @
 d s 
d 
d 8%d3i %(d "$ $T r8   r   c                      t        j                         } | j                  dddd       | j                  d       | j	                         }|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      sU    $$&F
)	   u%DKr8   r9   c                 Z    t        |       }t        j                  |j                  d      S )N   )indent)r   jsondumpsr   )r   machines     r   r   r      s#    &!G::g**1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   rH   r   r   r   printr   r   r8   r   <module>r      su           	 	 	g gT6S 6
 zD	
4;;
'( r8   