
    g)                         d Z ddlZddlmZmZ ddlmZ ddlmZm	Z	 ddl
mZmZmZ dd	lmZmZmZmZmZmZ  e            r
ddlZdd
lmZ  e            rddlmZ  ej        e          Z G d de          ZdS )z@
Benchmarking the library on inference and training in PyTorch.
    N)CallableOptional   )PretrainedConfig)MODEL_MAPPINGMODEL_WITH_LM_HEAD_MAPPING)is_py3nvml_availableis_torch_availablelogging   )	BenchmarkMemoryMemorySummarymeasure_peak_memory_cpustart_memory_tracingstop_memory_tracing)PyTorchBenchmarkArgumentsc            
       H   e Zd ZU eed<   eed<   dZeed<   ed             Z	dede
de
d	efd
Zdede
de
d	eee         gfdZdede
de
d	efdZdede
de
d	eee         gfdZdede
de
d	eg df         fdZdede
de
d	eg df         fdZd	efdZdeg df         d	eegfdZdS )PyTorchBenchmarkargsconfigsPyTorch	frameworkc                     t           j        S N)torch__version__)selfs    \/var/www/html/ai-engine/env/lib/python3.11/site-packages/transformers/benchmark/benchmark.pyframework_versionz"PyTorchBenchmark.framework_version6   s          
model_name
batch_sizesequence_lengthreturnc                 Z    |                      |||          }|                     |          S r   )_prepare_inference_func_measure_speedr   r"   r#   r$   
_inferences        r   _inference_speedz!PyTorchBenchmark._inference_speed:   s-    11*j/ZZ
"":...r!   c                 Z    |                      |||          }|                     |          S r   )r'   _measure_memoryr)   s        r   _inference_memoryz"PyTorchBenchmark._inference_memory>   s/     11*j/ZZ
##J///r!   c                 Z    |                      |||          }|                     |          S r   )_prepare_train_funcr(   r   r"   r#   r$   _trains        r   _train_speedzPyTorchBenchmark._train_speedD   s-    ))*j/RR""6***r!   c                 Z    |                      |||          }|                     |          S r   )r0   r-   r1   s        r   _train_memoryzPyTorchBenchmark._train_memoryH   s/     ))*j/RR##F+++r!   Nc                 j   | j         |         }| j        j        rd|_        t          |d          o1t	          |j        t                    ot          |j                  dk    }| j        j        s^|r\	 |j        d         }t          d|g          }t          ||          } ||          }	n:# t          $ r t          | d          w xY wt          |j                 |          }	|	                                 |	                    | j        j                   t          |d          r|j        n|j        j        }
t'          j        |
||ft&          j        | j        j                  | j        j        rIt.                              d	           | j        j        st5          d
          |	                                 | j        j        rLt'          j                    5  t&          j                            |	          d d d            n# 1 swxY w Y   n|	fd}fd}|j        r|n|}|S )NTarchitecturesr   transformersfromlist does not exist. If you just want to test the pretrained model, you might want to set `--only_pretrain_model` or `args.only_pretrain_model=True`.
vocab_sizedtypedevice&Running training in Mixed Precision...)Mixed precision is possible only for GPU.c                  x    t          j                    5             } d d d            n# 1 swxY w Y   | S )N)decoder_input_idsr   no_gradoutputsinference_model	input_idss    r   encoder_decoder_forwardzIPyTorchBenchmark._prepare_inference_func.<locals>.encoder_decoder_forward|   s     R R)/)yQQQR R R R R R R R R R R R R R RNs   /33c                  t    t          j                    5             } d d d            n# 1 swxY w Y   | S r   rD   rF   s    r   encoder_forwardzAPyTorchBenchmark._prepare_inference_func.<locals>.encoder_forward   sx     5 5)/)445 5 5 5 5 5 5 5 5 5 5 5 5 5 5Ns   -11) config_dictr   torchscripthasattr
isinstancer7   listlenonly_pretrain_model
__import__getattrImportErrorr   	__class__evaltor?   r<   encoderr   randintlongfp16loggerinfois_gpu
ValueErrorhalfrE   jittraceis_encoder_decoder)r   r"   r#   r$   confighas_model_class_in_configmodel_classtransformers_module	model_clsmodelr<   rJ   rL   _forwardrH   rI   s                 @@r   r'   z(PyTorchBenchmark._prepare_inference_funcN   s   !*-9  	&!%F FO,, .6/66.F())A- 	"
 y, 	<1J 	<	$215&0;-&X&X&X##$7EE	!	&))   !" W W W   "&"23F;;E

!""" +2&,*G*GfV&&V^Mf
M*z?.KSXS]fjfofvwww	9> 	KK@AAA9# N !LMMM JJLLL9  	$ D D"')//%"C"CD D D D D D D D D D D D D D D $O	 	 	 	 	 	
	 	 	 	 	 	
 /5.G\**_s   4:B/ /C!!HHHc                    | j         |         }t          |d          o1t          |j        t                    ot          |j                  dk    }| j        j        s^|r\	 |j        d         }t          d|g          }t          ||          } ||          }	n:# t          $ r t          | d          w xY wt          |j                 |          }	| j        j        rt          d          |	|	                                 |	                    | j        j                   t          |d          r|j        n|j        j        }
t)          j        |
||ft(          j        | j        j                  | j        j        rIt0                              d	           | j        j        st7          d
          |	                                 fd}fd}|j        r|n|}|S )Nr7   r   r8   r9   r;   z5Training for torchscript is currently not implementedr<   r=   r@   rA   c                  V               d         } |                                   | S )N)labelsr   backwardlossrI   train_models    r   !compute_loss_and_backprob_encoderzOPyTorchBenchmark._prepare_train_func.<locals>.compute_loss_and_backprob_encoder   s.    ;y;;;A>DMMOOOKr!   c                  X               d         } |                                   | S )N)rC   ro   r   rp   rr   s    r   )compute_loss_and_backprob_encoder_decoderzWPyTorchBenchmark._prepare_train_func.<locals>.compute_loss_and_backprob_encoder_decoder   s1    ;yIiXXXYZ[DMMOOOKr!   )rM   rO   rP   r7   rQ   rR   r   rS   rT   rU   rV   r   rW   rN   NotImplementedErrortrainrY   r?   r<   rZ   r   r[   r\   r]   r^   r_   r`   ra   rb   re   )r   r"   r#   r$   rf   rg   rh   ri   rj   rk   r<   ru   rw   r2   rI   rt   s                 @@r   r0   z$PyTorchBenchmark._prepare_train_func   sE   !*- FO,, .6/66.F())A- 	"
 y, 	I1J 	I	$215&0;-&X&X&X##$7EE	!	&))   !" W W W   /v/?@HHE9  	 %&]^^^K!""" +2&,*G*GfV&&V^Mf
M*z?.KSXS]fjfofvwww	9> 	KK@AAA9# N !LMMM JJLLL	 	 	 	 	 	
	 	 	 	 	 	 (3552 	
 s   !:B B9c                    	 | j         j        s| j         j        r1t                              d           t          j        |dd           t          j        || j         j        d          }| j         j        r<| j         j        r0dd lm	c m
} |                     |                                           t          |          dz  S # t          $ r#}|                     d|            Y d }~d	S d }~ww xY w)
NzRDo inference on TPU or torchscript. Running model 5 times to stabilize compilationr      )repeatnumber
   r   g      $@Doesn't fit on GPU. N/A)r   is_tpurN   r^   r_   timeitr|   torch_xla_tpu_print_metricstorch_xla.debug.metricsdebugmetricsprint_fnmetrics_reportminRuntimeError)r   funcruntimesmetes        r   r(   zPyTorchBenchmark._measure_speed   s'   	y 49#8 pqqq    }y'  H y 4DI$I 4555555555c0022333x==4'' 	 	 	MM44455555555	s   CC 
C3C..C3r   c                    	 | j         j        rt          d          }| j         j        rt	          d          | j         j        rt                      st                              d           d}nt          	                    d           t          j                      |             t          j        | j         j                  }t          j        |          }|j        }t!          |          }t          j                     n5t%          |          }t'          |t(                    rt!          |          n|}| j         j        rt+          |          }nd }||fS # t,          $ r#}	|                     d|	            Y d }	~	dS d }	~	ww xY w)Nr8   zMemory Benchmarking is currently not implemented for TPU. Please disable memory benchmarking with `--no-memory` or `args.memory=False`zypy3nvml not installed, we won't log GPU memory usage. Install py3nvml (pip install py3nvml) to log information about GPU.r   zlMeasuring total GPU usage on GPU device. Make sure to not have additional processes running on the same GPU.r   )r   N)r   trace_memory_line_by_liner   r   rx   r`   r	   r^   warningr_   nvmlnvmlInitnvmlDeviceGetHandleByIndex
device_idxnvmlDeviceGetMemoryInfousedr   nvmlShutdownr   rP   intr   r   r   )
r   r   rd   memoryhandlememinfomax_bytes_in_usememory_bytessummaryr   s
             r   r-   z PyTorchBenchmark._measure_memory   s   ,	y2 =,^<<y a)<   ! a+-- (NN^   #FFKK,  
 MOOODFFF!<TY=QRRF":6BBG'.|$#$455F%''''  7t<<1;L#1N1N`---T`y2 -e447?" 	 	 	MM444555;;;;;	s   EE 
F#FF)__name__
__module____qualname__r   __annotations__r   r   strpropertyr    r   floatr+   r   r   r   r.   r3   r5   r   r'   r0   r(   r-    r!   r   r   r   1   s        
####Is! ! X!/3 /C /RU /Z_ / / / /00+.0AD0
(=)	*0 0 0 0+s + +c +V[ + + + +,,+.,AD,
(=)	*, , , ,9# 93 9Y\ 9aijlnrjras 9 9 9 9v:c :s :UX :]efhjnfn]o : : : :xe    8-HRX$6 -FM;R - - - - - -r!   r   )__doc__r   typingr   r   configuration_utilsr   models.auto.modeling_autor   r   utilsr	   r
   r   benchmark_utilsr   r   r   r   r   r   r   benchmark_argsr   py3nvml.py3nvmlpy3nvmlr   
get_loggerr   r^   r   r   r!   r   <module>r      so      % % % % % % % % 2 2 2 2 2 2 Q Q Q Q Q Q Q Q E E E E E E E E E E                 :LLL999999  #"""""" 
	H	%	%] ] ] ] ]y ] ] ] ] ]r!   