Ë
    cQêj�<  ã                   ó$  — 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 d dlmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ  ej4                  d	«      Zdd
„Zd„ Zedk(  r" e«       Z eej@                  «        ee«       yy)é    N)Údatetime)Ú	PrecisionÚcreate_onnxruntime_sessionÚget_ort_environment_variablesÚprepare_environmentÚsetup_logger)ÚDEFAULT_TOLERANCEÚMODEL_CLASSESÚPRETRAINED_GPT2_MODELSÚ
Gpt2Helper)Úversion)ÚQuantizeHelper)Ú
AutoConfig)Ú__version__Ú c                 ón  — t        j                  «       }|j                  dddt        ddj	                  t
        «      z   ¬«       |j                  ddt        d	t        t        j                  «       «      d
dj	                  t        j                  «       «      z   ¬«       |j                  ddt        t        j                  j	                  dd«      d¬«       |j                  ddt        t        j                  j	                  dd«      d¬«       |j                  dddt        d¬«       |j                  ddddd¬«       |j                  ddddd¬«       |j                  d¬ «       |j                  d!t        d"dg d#¢d$¬%«       |j                  d&ddd'¬«       |j                  d¬(«       |j                  d)d*t        t        j                  t        t        «      d+¬,«       |j                  d-ddd.¬«       |j                  d¬/«       |j                  d0d1d2t        d3gd4¬5«       |j                  d6d2t        d3gd7¬5«       |j                  d8d9d2t        g d:¢d;¬5«       |j                  d<d=dd d>¬?«       |j                  d@dt        dAdB¬«       |j                  dCdd¬D«       |j                  d¬E«       |j                  dFdd¬D«       |j                  d¬G«       |j                  dHdd¬D«       |j                  d¬I«       |j                  dJdd¬D«       |j                  d¬K«       |j                  | «      }|S )LNz-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_timeséd   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--stager   )r   é   é   a6  Stage in generation: 1 (initial decoder), 2 (decoder), 0 (both). 1 - decode the first token when past_sequence_length is zero; 2 - decode the remaining tokens when past_sequence_length is not zero; 0 - one onnx model for both stages 1 and 2. Note that we will optimize 1 and 2 differently for best performance.)r   r   r   r   r   z	--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ú+r    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_numéÿÿÿÿzThreads to usez--include_copy_output_latency)r   r   )Úinclude_copy_output_latencyz	--verbose)Úverbosez--output_torch_latency)Úoutput_torch_latencyz--disable_io_binding)Údisable_io_binding)ÚargparseÚArgumentParserÚadd_argumentÚstrÚjoinr   Úlistr
   ÚkeysÚosÚpathÚintÚset_defaultsr   ÚFLOAT32Ú
parse_args)ÚargvÚparserÚargss      úx/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/onnxruntime/transformers/models/gpt2/benchmark_gpt2.pyÚparse_argumentsrB   !   sy  € Ü×$Ñ$Ó&€Fà
×ÑØØØÜØJÈTÏYÉYÔWmÓMnÑnð ô ð ×ÑØØÜØ!Ü”]×'Ñ'Ó)Ó*Ø0°4·9±9¼]×=OÑ=OÓ=QÓ3RÑRð ô ð ×ÑØØÜÜ—‘—‘˜S .Ó1Ø4ð ô ð ×ÑØØÜÜ—‘—‘˜S -Ó0Ø-ð ô ð ×ÑØØØÜØGð ô ð ×ÑØØØØØ"ð ô ð ×ÑØØØØØ6ð ô ð ×Ñ eÐÔ,à
×ÑØÜØØÚðOð ô ð ×Ñ˜¨e¸LÐOfÐÔgØ
×Ñ ÐÔ&à
×ÑØØÜÜ×!Ñ!Ü”Y“Øuð ô ð ×Ñ˜°%ÀÐSdÐÔeØ
×Ñ EÐÔ*à
×Ñ˜˜o°S¼sÈQÈCÐVbÐÔcà
×ÑØØÜØ�Ø0ð ô ð ×ÑØØ!ØÜÚ)Ø$ð ô ð ×ÑØØØØØ3ð ô ð ×Ñ˜°¼SÈ"ÐScÐÔdà
×ÑÐ7À%ÐP\ÐÔ]Ø
×Ñ°EÐÔ:à
×Ñ˜¨e¸LÐÔIØ
×Ñ ÐÔ&à
×ÑÐ0¸5ÈÐÔVØ
×Ñ¨UÐÔ3à
×ÑÐ.¸À|ÐÔTØ
×Ñ¨5ÐÔ1à×Ñ˜TÓ"€Dà€Kó    c                 óÒ  — t        j                  t        «      t        j                  d«      k  rt        d«      ‚t        j                  d| › �«       | j                  t        j                  k(  r| j                  r| j                  sJ d«       ‚| j                  t        j                  k(  r| j                  rJ d«       ‚| j                  dk(  r| j                  dgk(  sJ d«       ‚t        j                  | j                   dk  rt#        j$                  d	¬
«      n| j                   «       t'        t        j(                  j+                  «       «       | j,                  }| j.                  }t1        ||| j                  «       t2        | j4                     d   }t6        }t9        j:                  | j<                  | j>                  |¬«      }|j;                  | j<                  ||¬«      }t        j@                  | j                  rdnd«      }|jC                  |«       |jD                  dkD  }|jG                  || j<                  | j4                  d	|¬«      }	|	d   }
t2        | j4                     d   }|jI                  |||
| jJ                  |||¬«       | j                  s| j                  t        jL                  k7  �r|	| j                  t        j                  k7  rtO        | j                  «      nd   }
|j                  |	d   |
| j                  t        j                  k(  |jP                  jR                  |jP                  jT                  |d	| j                  ¬«       | j                  t        j                  k(  r^t        j                  d«       tW        jX                  |
|	d   |«       tW        jZ                  |«      }t        j                  d«       |	d   }
| j>                  r|j?                  |||||¬«      }t]        |
| j                  d| j                   | jJ                  ¬«      }|€y |j_                  ta        | jb                  «      ta        | j                  «      ta        | jd                  «      || j4                  «      }|jg                  ||| j                  t        j                  k(  «      }| jh                  xs2 djk                  tm        jn                  «       jq                  d«      «      }ts        |dd¬«      5 }g d ¢}tu        jv                  ||¬!«      }|jy                  «        | jb                  D �]R  }| jd                  D �]?  }| j                  D �],  }|dkD  r
|dkD  r|dk\  sJ ‚t        j{                  d"|||«       |j}                  ||||jR                  |jT                  |jD                  |j~                  || j                  t        j                  k(  ||¬#«      }|j_                  ||||| j4                  «      }	 | j€                  s| j‚                  rž|j…                  ||| j†                  «      \  }}t‰        |«      D ]o  \  }}t‹        |tŒ        «      r5t        j{                  d$|› d%t�        |«      › d&|d   j�                  › �«       ŒKt        j{                  d$|› d'|j�                  › �«       Œq nd }d }| j’                  r!|j•                  ||| j†                  «      \  }}n/|j—                  ||||| j†                  d| j˜                  ¬(«      \  }}| j€                  r°|}| j’                  s6g }|D ]/  }|j›                  |j�                  «       jŸ                  «       «       Œ1 |j¡                  ||| j4                  t¢        | j                     t¢        | j                     ¬)«      r*t        j                  d*t¢        | j                     › d+�«       t        j                  d,||||| j’                  rd-nd|rd.nd«       | j<                  | j4                  | j                  t¥        «       | j                  | j                  | j                  | j>                  |||| j’                  |r|d/›nd0|d/›d œ} |j§                  | «       �Œ/ �ŒB �ŒU 	 d d d «       t        j                  d3|› �«       |S # t¨        $ r% t        j«                  d1d	¬2«       Y    d d d «       y w xY w# 1 sw Y   ŒTxY w)4Nz3.1.0z/This tool requires transformers 3.1.0 or later.z
Arguments:z'fp16 requires --optimize_onnx --use_gpuzquantization only supports CPUr    r   z<past_sequence_lengths shall be 0 for stage==1 (init decoder)T)Úlogical)r#   Ú	cache_dir)ÚconfigrF   zcuda:0Úcpué   )Úhas_pastÚ
new_folderÚrawr!   )Úhas_position_idsÚhas_attention_maskÚfp32)Úauto_mixed_precisionÚstagez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_classrQ   Úenvironment_variablesÚgpuÚ	precisionÚ	optimizerr#   Ú
batch_sizeÚsequence_lengthÚpast_sequence_lengthr0   Útorch_latencyÚonnxruntime_latency)Ú
fieldnameszMRunning test for batch_size=%d sequence_length=%d past_sequence_length=%d ...)Úfloat16rM   rN   ztorch output z is tuple of size z, shape z shape )Úreturn_numpyr-   )rY   ÚrtolÚatolz:Pytorch and ONNX Runtime outputs are all close (tolerance=z).zZbatch_size=%d, sequence_length=%d, past_sequence_length=%d, onnxruntime_latency=%.2f %s %sz(disable_io_binding)z, torch_latency={torch_latency}z.2fÚNoneÚ	Exception)Úexc_infozResults are saved to file )Vr   ÚparseÚtransformers_versionÚRuntimeErrorÚloggerÚinfor\   r   ÚFLOAT16r   r"   ÚINT8rQ   Úpast_sequence_lengthsÚtorchÚset_num_threadsÚ
thread_numÚpsutilÚ	cpu_countÚprintÚ
__config__Úparallel_inforF   Úonnx_dirr   r
   rY   r   r   Úfrom_pretrainedÚmodel_name_or_pathr#   ÚdeviceÚtoÚn_layerÚget_onnx_pathsÚexport_onnxr.   r<   r4   rG   Únum_attention_headsÚhidden_sizer   Úquantize_onnx_modelÚquantize_torch_modelr   Úget_output_shapesÚmaxÚbatch_sizesÚsequence_lengthsÚget_output_buffersÚ
result_csvÚformatr   ÚnowÚstrftimeÚopenÚcsvÚ
DictWriterÚwriteheaderÚdebugÚget_dummy_inputsÚ
vocab_sizeÚvalidate_onnxr/   Úpytorch_inferenceÚ
test_timesÚ	enumerateÚ
isinstanceÚtupleÚlenÚshaper0   Úonnxruntime_inferenceÚ$onnxruntime_inference_with_binded_ior-   ÚappendrH   ÚnumpyÚcompare_outputsr	   r   Úwriterowri   Úerror)!r@   rF   Ú
output_dirrY   Ú
gpt2helperrG   Úmodelr~   Ú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_writerr^   r_   r`   Údummy_inputsÚoutput_shapesÚoutputsra   ÚiÚvalueÚort_outputsÚort_latencyÚcopy_outputsÚoutputÚrows!                                    rA   Úmainr¾   ¨   s^  € Ü‡}�}Ô)Ó*¬W¯]©]Øó.ò ô ÐLÓMÐMä
‡K�K�*˜T˜FÐ#Ô$Ø‡~�~œ×*Ñ*Ò*Ø×!Ò! d§l¢lÐ]Ð4]Ó]Ð2à‡~�~œŸ™Ò'Ø—<’<ÐAÐ!AÓAÐà‡z�z�Q‚Ø×)Ñ)¨a¨SÒ0ÐpÐ2pÓpÐ0ä	×Ñ¸D¿O¹OÈqÒ<Pœ&×*Ñ*°4Õ8ÐVZ×VeÑVeÔfÜ	Œ%×
Ñ
×
(Ñ
(Ó
*Ô+à—‘€IØ—‘€JÜ˜	 :¨t¯|©|Ô<ä × 0Ñ 0Ñ1°!Ñ4€KÜ€JÜ×'Ñ'¨×(?Ñ(?ÈT×M]ÑM]ÐirÔs€FØ×'Ñ'¨×(?Ñ(?ÈÐZcÐ'Ód€Eô �\‰\ d§l¢l™(¸Ó>€FØ	‡H�HˆVÔØ%Ÿ~™~°Ñ2ÐØ!×0Ñ0ØØ×ÑØ×ÑØØ+ð 1ó Ðð ' uÑ-€OÜ × 0Ñ 0Ñ1°!Ñ4€KØ×ÑØØØØ�‰Ø Ø$Ø&ð ô ð ×Ò˜TŸ^™^¬y×/@Ñ/@Ó@Ø*À$Ç.Á.ÔT]×TbÑTbÒBb¬3¨t¯~©~Ô+>ÐhnÑoˆØ× Ñ Ø˜UÑ#ØØ�N‰Nœi×/Ñ/Ñ/Ø�L‰L×,Ñ,Ø�L‰L×$Ñ$Ø$Ø!%Ø—*‘*ð 	!ô 		
ð �>‰>œYŸ^™^Ò+Ü�K‰KÐ-Ô.Ü×.Ñ.¨Ð@PÐQWÑ@XÐZrÔsÜ"×7Ñ7¸Ó>ˆEÜ�K‰KÐ3Ô4Ø.¨vÑ6ˆOà×ÒØ×&Ñ&ØØØØ(Ø*ð 'ó 
ˆô )ØØ�‰Ø %Ø—O‘OØ—‘ô€Gð €Øð #×4Ñ4ÜˆD×ÑÓÜˆD×&Ñ&Ó'ÜˆD×!Ñ!Ó"ØØ×ÑóÐð  ×2Ñ2Ð3DÀfÈdÏnÉnÔ`i×`qÑ`qÑNqÓr€Nà—?‘?ÒpÐ&?×&FÑ&FÄxÇ|Á|Ã~×G^ÑG^Ð_nÓGoÓ&p€LÜ	ˆl ¨bÔ	1ð C$°Xò
ˆô  —^‘^ H¸ÔFˆ
Ø×ÑÔ à×*Ñ*ó o	$ˆJØ#'×#8Ñ#8ó n$�Ø,0×,FÑ,Fó m$Ð(Ø%¨š>¨oÀÒ.AÐFZÐ^_ÒF_Ð_Ð_Ü—L‘LØgØ"Ø'Ø,ô	ð $.×#>Ñ#>Ø"Ø,Ø'Ø×2Ñ2Ø×*Ñ*ØŸ™Ø×)Ñ)ØØ!%§¡´9×3DÑ3DÑ!DØ)4Ø+6ð $?ó $�Lð %/×$@Ñ$@Ø"Ø,Ø'ØØ×(Ñ(ó%�MðO$Ø×-Ò-°×1JÒ1JØ5?×5QÑ5QÐRWÐYeÐgk×gvÑgvÓ5wÑ2˜G ]ô -6°gÓ,>ò Z¡  5Ü#-¨e´UÔ#;Ü$*§L¡LØ*7¸°sÐ:LÌSÐQVËZÈLÐX`ÐafÐghÑai×aoÑaoÐ`pÐ(qõ%&ô %+§L¡L°=ÀÀÀ7È5Ï;É;È-Ð1XÕ$YñZð '+˜GØ,0˜Mà×2Ò2Ø7A×7WÑ7WØ '¨°t·±ó8Ñ4˜K©ð 8B×7fÑ7fØ 'Ø ,Ø .Ø -Ø $§¡Ø-2Ø<@×<\Ñ<\ð 8gó 8Ñ4˜K¨ð  ×-Ò-Ø+6˜LØ#'×#:Ò#:à/1 Ø.9ò !N FØ$0×$7Ñ$7¸¿
¹
»×8JÑ8JÓ8LÕ$Mð!Nð  *×9Ñ9Ø 'Ø ,Ø,0×,<Ñ,<Ü%6°t·~±~Ñ%FÜ%6°t·~±~Ñ%Fð  :ô  ô !'§¡Ø&`ÔarÐsw÷  tBñ  tBñ  bCð  aDð  DFð  %Gô!"ô Ÿ™ØxØ&Ø+Ø0Ø'Ø6:×6MÒ6MÑ2ÐSUÙANÑ=ÐTVôð +/×*AÑ*AØ+/×+;Ñ+;Ø%)§Z¡ZÜ5RÓ5TØ#'§<¡<Ø)-¯©Ø)-×);Ñ);Ø+/×+;Ñ+;Ø*4Ø/>Ø4HØ26×2IÑ2IÙGT°¸cÑ/BÐZ`Ø6AÀ#Ð5Fñ˜ð  #×+Ñ+¨CÖ0òUm$òn$ño	$÷)C$ôJ ‡K�KÐ,¨\¨NÐ;Ô<ØÐøô %ò $ÜŸ™ [¸4˜Ô@Û#÷GC$ð C$ðB$ú÷CC$ð C$ús2   Ó;Dc×?Jb,â 	câ, cãcãcãcãc&Ú__main__)N)!r1   r‘   Úloggingr8   r   rv   rs   Úbenchmark_helperr   r   r   r   r   Úgpt2_helperr	   r
   r   r   Ú	packagingr   Úquantize_helperr   Útransformersr   r   rl   Ú	getLoggerrn   rB   r¾   Ú__name__r@   r.   © rC   rA   ú<module>rÉ      s…   ðó Û 
Û Û 	Ý ã Û ÷õ ÷ ]Ó \Ý Ý *Ý #Ý <à	ˆ×	Ñ	˜2Ó	€óDòNoðd ˆzÒÙÓ€DÙ�—‘ÔÙˆ…Jð rC   