
    ړi                         d dl Z 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j6                               yy)    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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      L/tmp/pip-target-gsye3yef/lib/python/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_memoryr9   r:   )r   mems     r   r-   zMachineInfo.get_memory_infoE   s#    ##%??r6   r5   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   r5   r>   namevalueis         r   r/   zMachineInfo._try_getJ   s]     	Dx edE]388U$;SV$;<<	  %<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)rK   coreslogical_coreshzl2_cacherP   	processor)r+   r,   r/   r;   	cpu_countr.   unamerU   )r   r5   s     r   r,   zMachineInfo.get_cpu_infoS   s    '') ]]8g{-CD%%e4#--d;--;-8h0AB]]8gY7!)33
 	
r6   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_availablerG   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[   deviceCountrI   handleinfor4   rb   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                     h d}i }t         j                  j                         D ]L  }|j                  d   j                         |v s#|j                  ||j                  d   j                         <   N |S )N>   onnxruntime-gpuonnxconverter-commononnxnumpysympytorchprotobufr)   flatbuffersr'   transformersName)	importlibmetadatadistributionslowerversion)r   related_packagesrelated_packages_listdists       r   r0   z MachineInfo.get_related_packages}   sv    
 !#&&446 	TD}}V$**,0@@GK||%dmmF&;&A&A&CD	T %$r6   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)rw   support_gpuF)r'   __version__get_available_providersImportErrorr   r   r   r   )r   r'   rb   r   s       r   r1   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   )rw   r}   cudaF)
rn   r~   r   is_availablerw   r   r   r   r   r   )r   rn   rb   r   s       r   r2   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   )rw   git_versionr}   )r)   rw   VERSIONGIT_VERSIONtestis_built_with_cudar   r   r   r   ModuleNotFoundError)r   tfrb   s      r   r3   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   dictr-   rC   rF   r/   r,   r*   r0   r1   r2   r3    r6   r   r   r      s    1%&$@ @
 d s 
d 
d 8%d3i %*d "$ $T r6   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Kr6   r7   c                 Z    t        |       }t        j                  |j                  d      S )N   indent)r   jsondumpsr   )r   machines     r   r   r      s#    &!G::g**155r6   c                     t        |       }|j                  }|r(|j                         D ci c]  \  }}|dv s|| }}}t        j                  |d      S c c}}w )N)r!   r"   r#   r   r   )r   r   itemsr   r   )r   r   rf   keyrH   s        r   get_device_infor      sZ    &!GD-1ZZ\]zsESD\=\U
]]::d1%% ^s
   AA__main__)T)r   importlib.metadatars   r   r   r.   r$   r   r+   r;   py3nvml.py3nvmlr   r   r   r   r   r	   r
   r   r   r   rF   r   r   r   r   printr   r   r6   r   <module>r      s           	 	 	h hV6S 6
&C & zD	
4;;
'( r6   