
    `iT9                     0   S SK r S SKrS SKrS SKrS SKJr  S SKrS SKrS SKrS SKrS SK	r	S SK
Jr  S SKJr  S SKJrJrJrJr  S SKJr  S SKJrJrJrJr  \R4                  " S5      rSS	 jrS
 r\S:X  a"  \" 5       r\" \R@                  5        \" \5        gg)    N)datetime)version)
AutoConfig)
Gpt2HelperMODEL_CLASSESDEFAULT_TOLERANCEPRETRAINED_GPT2_MODELS)QuantizeHelper)create_onnxruntime_sessionsetup_loggerprepare_environment	Precision c                    [         R                  " 5       nUR                  SSS[        SSR	                  [
        5      -   S9  UR                  SS[        S	[        [        R                  " 5       5      S
SR	                  [        R                  " 5       5      -   S9  UR                  SS[        [        R                  R	                  SS5      SS9  UR                  SS[        [        R                  R	                  SS5      SS9  UR                  SSS[        SS9  UR                  SSSSSS9  UR                  SSSSSS9  UR                  SS 9  UR                  S!SSS"S9  UR                  SS#9  UR                  S$S%[        [        R                  [        [        5      S&S'9  UR                  S(SSS)S9  UR                  SS*9  UR                  S+S,S-[        S./S/S09  UR                  S1S-[        S./S2S09  UR                  S3S4S-[        / S5QS6S09  UR                  S7S8SS S9S:9  UR                  S;S[        S<S=S9  UR                  S>SSS?9  UR                  SS@9  UR                  SASSS?9  UR                  SSB9  UR                  U 5      nU$ )CNz-mz--model_name_or_pathTz;Model path, or pretrained model name selected in the list: z, )requiredtypehelpz--model_classFGPT2LMHeadModelz!Model type selected in the list: )r   r   defaultchoicesr   z--cache_dir.cache_modelsz%Directory to cache pre-trained models)r   r   r   r   z
--onnx_dironnx_modelszDirectory to store onnx modelsz--test_timesd   z8Number of repeat times to get average inference latency.)r   r   r   r   z-vz--validate_onnx
store_truezValidate ONNX model)r   actionr   z-oz--optimize_onnxz'Use optimizer.py to optimize onnx model)optimize_onnxz	--use_gpuzuse GPU for inference)use_gpuz-pz--precisionzfPrecision of model to run. fp32 for full precision, fp16 for half precision, and int8 for quantization)r   r   r   r   z--torchscriptzuse Torchscript)torchscriptz-bz--batch_sizes+   z
batch size)nargsr   r   r   z--sequence_lengthsz!sequence lengths (excluding past)z-sz--past_sequence_lengths)          @         zpast sequence lengthsz-rz--result_csvz$CSV file for saving summary results.)r   r   r   z--thread_numzThreads to usez--include_copy_output_latency)r   r   )include_copy_output_latencyz	--verbose)verbose)argparseArgumentParseradd_argumentstrjoinr	   listr   keysospathintset_defaultsr   FLOAT32
parse_args)argvparserargss      l/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/onnxruntime_tools/transformers/benchmark_gpt2.pyparse_argumentsr=      s   $$&F
.!% Z		"89:	  ; !&  1 $]%7%7%9 :@499]M_M_MaCbb  d !&  "S. AD	  F !&  "S- @=	  ? !& # W	  Y /%[pq
)!&+F	  H
 e,
eLOfg
&
!!Yu  w %Sde
E*
oSsQCVbc
,! !"@	  B 1!  94  6 nudQwx
S"Scd
7%P\]
E:
eLI
&T"DK    c                    SSK Jn  [        R                  " U5      [        R                  " S5      :  a  [	        S5      e[
        R                  SU  35        U R                  [        R                  :X  a)  U R                  (       a  U R                  (       d   S5       eU R                  [        R                  :X  a  U R                  (       a   S5       e[        R                  " U R                  S::  a  [         R"                  " SS	9OU R                  5        [%        [        R&                  R)                  5       5        U R*                  nU R,                  n[/        X#U R                  5        [0        U R2                     S   n[4        R6                  " U R8                  U R:                  US
9nUR7                  U R8                  XRS9n[        R<                  " U R                  (       a  SOS5      nUR?                  U5        UR@                  S:  n[B        RD                  " UU R8                  U R2                  SUS9n	U	S   n
[0        U R2                     S   n[B        RF                  " UUU
U RH                  UUUS9  U R                  (       d  U R                  [        RJ                  :w  Ga  XR                  [        R                  :w  a  [M        U R                  5      OS   n
[B        R                  " U	S   XR                  [        R                  :H  URN                  RP                  URN                  RR                  U5        U R                  [        R                  :X  a_  [
        R                  S5        [T        RV                  " XS   U5        [T        RX                  " U5      n[
        R                  S5        U	S   n
U R:                  (       a  [B        R:                  " UUUUUS9n[[        U
U R                  SU R                  U RH                  S9nUc  g [B        R\                  " [_        U R`                  5      [_        U Rb                  5      [_        U Rd                  5      XPR2                  5      n[B        Rf                  " XU R                  [        R                  :H  5      nU Rh                  =(       d3    SRk                  [l        Rn                  " 5       Rq                  S5      5      n[s        USSS9 n/ SQn[t        Rv                  " UUS9nURy                  5         U R`                   GH  nU Rd                   GH  nU Rb                   GH  nUS:  a  US:  a  US:  d   e[
        R{                  S U S!U S"U S#35        [B        R|                  " UUUURP                  URR                  UR@                  UR~                  UU R                  [        R                  :H  UUS$9n[B        R\                  " UUUXPR2                  5      n [B        R                  " UUU R                  5      u  nn[B        R                  " UUU R                  5      u  nn[B        R                  " UUUUU R                  SU R                  S%9u  nnU R                  (       Ga  [B        R                  " UU[        U R                     [        U R                     S&9(       a*  [
        R                  S'[        U R                      S(35        / nU H0  nUR                  UR                  5       R                  5       5        M2     [B        R                  " UU[        U R                     [        U R                     S&9(       a*  [
        R                  S)[        U R                      S(35        [
        R                  S*U S+U S,U S-US. S/US. S0US. 35        U R8                  U R2                  U R                  U R                  U R                  U R:                  UUUUS. US. US. S.n UR                  U 5        GM     GM     GM
     S S S 5        [
        R                  S3U 35        U$ !   [
        R                  S1SS29   GM(  = f! , (       d  f       NE= f)4Nr   )__version__z3.1.0z/This tool requires transformers 3.1.0 or later.z
Arguments:z'fp16 requires --optimize_onnx --use_gpuzquantization only supports CPUT)logical)r   	cache_dir)configrB   zcuda:0cpu   )has_past
new_folderraw   )has_position_idshas_attention_maskfp32zquantizing model...int8zfinished quantizing modelF)enable_all_optimizationnum_threadsr+   zbenchmark_result_{}.csvz%Y%m%d-%H%M%Sar   )modenewline)
model_namemodel_classgpu	precision	optimizerr   
batch_sizesequence_lengthpast_sequence_lengthtorch_latencyonnxruntime_latencyonnxruntime_io_binding_latency)
fieldnameszRunning test for batch_size=z sequence_length=z past_sequence_length=z...)float16rJ   rK   )return_numpyr*   )rtolatolz:Pytorch and ONNX Runtime outputs are all close (tolerance=z).zEPytorch and ONNX Runtime IO Binding outputs are all close (tolerance=zbatch_size=z, sequence_length=z, past_sequence_length=z, torch_latency=z.2fz, onnxruntime_latency=z!, onnxruntime_io_binding_latency=	Exception)exc_infozResults are saved to file )Mtransformersr@   r   parseRuntimeErrorloggerinforV   r   FLOAT16r   r   INT8torchset_num_threads
thread_numpsutil	cpu_countprint
__config__parallel_inforB   onnx_dirr   r   rT   r   from_pretrainedmodel_name_or_pathr   deviceton_layerr   get_onnx_pathsexport_onnxr+   r7   r/   rC   num_attention_headshidden_sizer
   quantize_onnx_modelquantize_torch_modelr   get_output_shapesmaxbatch_sizespast_sequence_lengthssequence_lengthsget_output_buffers
result_csvformatr   nowstrftimeopencsv
DictWriterwriteheaderdebugget_dummy_inputs
vocab_sizepytorch_inference
test_timesonnxruntime_inference$onnxruntime_inference_with_binded_ior*   validate_onnxcompare_outputsr   appendrD   numpywriterowerror)!r;   transformers_versionrB   
output_dirrT   rC   modelrw   use_external_data_formatonnx_model_pathsonnx_model_pathuse_paddingsessionmax_output_shapesoutput_bufferscsv_filenamecsv_filecolumn_names
csv_writerrX   rY   rZ   dummy_inputsoutput_shapesoutputsr[   ort_outputsort_latencyort_io_outputsort_io_latencycopy_outputsoutputrows!                                    r<   mainr   t   s   @}})*W]]7-CCLMM
KK*TF#$~~***!!dll]4]]2~~'<<A!AA	DOOq<P&**48VZVeVef	%


(
(
*+IJ	t||< 0 01!4K''(?(?TM]M]irsF''(?(?'dE \\dll(>F	HHV & 3!00151H1H151A1A:><T	V 'u-O 0 01!4K5!*<<3,7.9; T^^y/@/@@*..T]TbTbBb3t~~+>hno  !1%!8/>>]f]n]nKn!&!A!A5<<C[C[]u	w >>Y^^+KK-...QW@XZrs"77>EKK34.v6O&&u'-'-8C:E	G ))-AF59__15	?G
  #44S9I9I5JCPTPjPjLk589N9N5OQWYiYik223Ddnn`i`q`qNqrN??p&?&F&Fx||~G^G^_nGo&pL	lb	1X

 ^^HF
 **J#'#8#8,0,F,F(%>o.AFZ^_F___LL6zlBSTcSddz  |P  {Q  QT  U $.#>#>z?S?N?E?Y?Y?E?Q?Q?E~~?E?P?P?EHLZcZkZkHkP[R]
$_L %/$@$@MacrAGIYIY%[M7B1;1M1MeUacgcrcr1s.3=3S3ST[]iTXTcTc4e0[9C9h9h#(*) OO).8<8X8X:Z6  ---)99':E?PQUQ_Q_?`?PQUQ_Q_?` b !'&`arsw  tB  tB  bC  aD  DF  %G!"
 ,.L*8 , 3 3FJJL4F4F4H I +9  *99':F?PQUQ_Q_?`?PQUQ_Q_?` b !'&kl}  C  M  M  mN  lO  OQ  %R!" )*5GGXXo  qE  pF  FV  Wd  eh  Vi  i  @K  LO  P  Pq  r@  AD  qE  F
 +/*A*A+/+;+;#'<<)-)-););+/+;+;*4/>4H0=c/B6A#5FAOPS@T #++C0Q -G $9 + 
2n KK,\N;<	ByDAk 
2	1s&   7Da8	H!a*a8a51a88
b__main__)N)!r3   sysr   r   r   ro   r,   loggingrl   onnx	packagingr   re   r   gpt2_helperr   r   r   r	   quantize_helperr
   benchmark_helperr   r   r   r   	getLoggerrh   r=   r   __name__r;   r+    r>   r<   <module>r      s    
 
  
        # \ \ * e e			2	UphV zDJ r>   