Ë
    cQêjÃN  ã                   ó@  — d dl Z d dlZd dlZ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
m
Z
 d dlmZ d dlZd dlZd dlZd dlmZmZ e	 G d„ d«      «       Ze	 G d„ d	«      «       Z	 	 	 dd
„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"e#dk(  r
dZ$ e"«        yy)é    N)Ú	dataclass)Údatetime)ÚPath)Úgenerate_test_dataÚget_bert_inputsc                   ó�   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed	<   eed
<   eed<   eed<   eed<   y)ÚTestSettingÚ
batch_sizeÚsequence_lengthÚ
test_casesÚ
test_timesÚuse_gpuÚuse_io_bindingÚproviderÚintra_op_num_threadsÚseedÚverboseÚlog_severityÚaverage_sequence_lengthÚrandom_sequence_lengthN)Ú__name__Ú
__module__Ú__qualname__ÚintÚ__annotations__ÚboolÚstr© ó    úl/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/onnxruntime/transformers/bert_perf_test.pyr	   r	   !   sI   … àƒOØÓØƒOØƒOØƒMØÓØƒMØÓØ
ƒIØƒMØÓØ Ó Ø Ô r   r	   c                   ój   — e Zd ZU eed<   eed<   eed<   eed<   eed<   edz  ed<   edz  ed<   eed	<   y)
ÚModelSettingÚ
model_pathÚinput_ids_nameÚsegment_ids_nameÚinput_mask_nameÚ	opt_levelNÚinput_tuning_resultsÚoutput_tuning_resultsÚ	mask_type)r   r   r   r   r   r   r   r   r    r"   r"   2   s7   … àƒOØÓØÓØÓØƒNØ ™*Ó$Ø ™:Ó%Ø„Nr   r"   c                 óÚ  — dd l }|j                  |«       |rd|j                  «       vrt        d«       |r-|dk(  rddg}n&|dk(  rddg}n|d	k(  rddg}n|d
k(  rg d¢}nddg}ndg}|j	                  «       }	||	_        |j                  j                  |	_        |€|j                  j                  |	_        n¬|dk(  r|j                  j                  |	_        n‹|dk(  r|j                  j                  |	_        nj|dk(  r|j                  j                  |	_        nI|dk(  r|j                  j                  |	_        n(|dk(  r|j                  j                  |	_        n||	_        |�||	_        |j#                  | |	|¬«      }
|rŒ|dk(  rd|
j%                  «       v s‰J ‚|dk(  rd|
j%                  «       v spJ ‚|d	k(  rd|
j%                  «       v sWJ ‚|d
k(  r(d|
j%                  «       v sJ ‚d|
j%                  «       v s*J ‚d|
j%                  «       v sJ ‚d|
j%                  «       v sJ ‚|�:t'        |«      5 }|
j)                  t+        j,                  |«      «       d d d «       |
S |
S # 1 sw Y   |
S xY w)Nr   ÚCUDAExecutionProviderzWarning: Please install onnxruntime-gpu package instead of onnxruntime, and use a machine with GPU for testing gpu performance.ÚdmlÚDmlExecutionProviderÚCPUExecutionProviderÚmigraphxÚMIGraphXExecutionProviderÚcudaÚtensorrt)ÚTensorrtExecutionProviderr,   r/   é   é   é   éc   )Ú	providersr4   )ÚonnxruntimeÚset_default_logger_severityÚget_available_providersÚprintÚSessionOptionsÚlog_severity_levelÚExecutionModeÚORT_SEQUENTIALÚexecution_modeÚGraphOptimizationLevelÚORT_ENABLE_ALLÚgraph_optimization_levelÚORT_DISABLE_ALLÚORT_ENABLE_BASICÚORT_ENABLE_EXTENDEDÚORT_ENABLE_LAYOUTr   ÚInferenceSessionÚget_providersÚopenÚset_tuning_resultsÚjsonÚload)r#   r   r   r   rE   r   Útuning_results_pathr:   Úexecution_providersÚsess_optionsÚsessionÚfs               r    Úcreate_sessionrU   >   s®  € ó à×+Ñ+¨LÔ9áÐ+°;×3VÑ3VÓ3XÑXÜð Nô	
ñ Ø�uÒØ#9Ð;QÐ"RÑØ˜Ò#à+Ø&ð#Ñð ˜ÒØ#:Ð<RÐ"SÑØ˜Ò#ò#Ñð $;Ð<RÐ"SÑà5Ð6Ðà×-Ñ-Ó/€LØ&2€LÔ#Ø"-×";Ñ";×"JÑ"J€LÔàÐ'Ø0;×0RÑ0R×0aÑ0aˆÕ-Ø	! QÒ	&Ø0;×0RÑ0R×0bÑ0bˆÕ-Ø	! QÒ	&Ø0;×0RÑ0R×0cÑ0cˆÕ-Ø	! QÒ	&Ø0;×0RÑ0R×0fÑ0fˆÕ-Ø	! QÒ	&Ø0;×0RÑ0R×0dÑ0dˆÕ-Ø	! RÒ	'Ø0;×0RÑ0R×0aÑ0aˆÕ-à0HˆÔ-àÐ'Ø,@ˆÔ)à×*Ñ*¨:°|ÐObÐ*Óc€GáØ�uÒØ)¨W×-BÑ-BÓ-DÑDÐDÐDØ˜Ò#Ø.°'×2GÑ2GÓ2IÑIÐIÐIØ˜ÒØ*¨g×.CÑ.CÓ.EÑEÐEÐEØ˜Ò#Ø.°'×2GÑ2GÓ2IÑIÐIÐIØ*¨g×.CÑ.CÓ.EÑEÐEÐEà*¨g×.CÑ.CÓ.EÑEÐEÐEà%¨×)>Ñ)>Ó)@Ñ@Ð@Ð@àÐ&ÜÐ%Ó&ð 	5¨!Ø×&Ñ&¤t§y¡y°£|Ô4÷	5ð €Nˆ7€N÷	5ð €Nús   È/%I É I*c                 ó   — t         j                  t        j                  t         j                  t        j                  t         j                  t        j                  t         j
                  t        j                  i}||    S ©N)ÚtorchÚfloat32ÚnpÚfloat16Úint32Úint64Úlonglong)Ú
torch_typeÚtype_maps     r    Ú
numpy_typera   “   sJ   € ä�‰”r—z‘zÜ�‰”r—z‘zÜ�‰”R—X‘XÜ�‰”R—[‘[ð	€Hð �JÑÐr   c                 ó6  — | j                  «       D ��ci c]*  \  }}|t        j                  |«      j                  |«      “Œ, }}}|j                  «       D ��ci c]*  \  }}|t        j                  |«      j                  |«      “Œ, }}}||fS c c}}w c c}}w rW   )ÚitemsrX   Ú
from_numpyÚto)ÚinputsÚoutputsÚdeviceÚnameÚarrayÚinput_tensorsÚoutput_tensorss          r    Úcreate_input_output_tensorsrm   �   sŒ   € ØQW×Q]ÑQ]ÓQ_×`Á+À$È�Tœ5×+Ñ+¨EÓ2×5Ñ5°fÓ=Ñ=Ð`€MÑ`ØRY×R_ÑR_ÓRa×bÁ;À4È�dœE×,Ñ,¨UÓ3×6Ñ6°vÓ>Ñ>Ðb€NÑbØ˜.Ð(Ð(ùó aùÛbs   ”/BÁ/Bc           
      óÚ  — | j                  «       }|j                  «       D ]Z  \  }}|j                  ||j                  j                  dt        |j                  «      |j                  |j                  «       «       Œ\ |j                  «       D ]Z  \  }}|j                  ||j                  j                  dt        |j                  «      |j                  |j                  «       «       Œ\ |S ©Nr   )
Ú
io_bindingrc   Ú
bind_inputrh   Útypera   ÚdtypeÚshapeÚdata_ptrÚbind_output)Úsessrk   rl   rp   ri   Útensors         r    Úcreate_io_bindingry   £   sÌ   € Ø—‘Ó"€JØ%×+Ñ+Ó-ò 
‰ˆˆfØ×ÑØØ�M‰M×ÑØÜ�v—|‘|Ó$Ø�L‰LØ�O‰OÓõ	
ð
ð '×,Ñ,Ó.ò 
‰ˆˆfØ×ÑØØ�M‰M×ÑØÜ�v—|‘|Ó$Ø�L‰LØ�O‰OÓõ	
ð
ð Ðr   c                 óà  — g }g }|j                   rdnd}t        |«      D ]É  \  }}| j                  ||«      }	|j                  |	«       i }
t	        t        |«      «      D ]  }|	|   |
||   <   Œ t        ||
|«      \  }}t        | ||«      }| j                  |«       t        j                  «       }| j                  |«       t        j                  «       |z
  }|j                  |«       ŒË ||fS )Nr2   Úcpu)r   Ú	enumerateÚrunÚappendÚrangeÚlenrm   ry   Úrun_with_iobindingÚtimeitÚdefault_timer)rS   Ú
all_inputsÚoutput_namesÚtest_settingÚresultsÚlatency_listrh   Ú_test_case_idrf   Úresultrg   Úirk   rl   rp   Ú
start_timeÚlatencys                    r    Ú%onnxruntime_inference_with_io_bindingrŽ   º   sÿ   € Ø€GØ€LØ#×+Ò+‰V°€FÜ!*¨:Ó!6ò %Ñˆ�vØ—‘˜\¨6Ó2ˆØ�‰�vÔØˆÜ”s˜<Ó(Ó)ò 	1ˆAØ'-¨a¡yˆG�L ‘OÒ$ð	1ô )DÀFÈGÐU[Ó(\Ñ%ˆ�~Ü& w°¸~ÓNˆ
ð 	×"Ñ" :Ô.ä×)Ñ)Ó+ˆ
Ø×"Ñ" :Ô.Ü×&Ñ&Ó(¨:Ñ5ˆØ×Ñ˜GÕ$ð!%ð$ �LÐ Ð r   c                 ó\  — t        |«      dkD  r%| j                  |t        j                  |«      «       g }g }t	        |«      D ]d  \  }}t        j                  «       }| j                  ||«      }t        j                  «       |z
  }	|j                  |«       |j                  |	«       Œf ||fS ro   )r€   r}   ÚrandomÚchoicer|   r‚   rƒ   r~   )
rS   r„   r…   r‡   rˆ   r‰   rf   rŒ   rŠ   r�   s
             r    Úonnxruntime_inferencer’   Ó   s    € Ü
ˆ:ƒ˜Òà�‰�L¤&§-¡-°
Ó";Ô<à€GØ€LÜ!*¨:Ó!6ò %Ñˆ�vÜ×)Ñ)Ó+ˆ
Ø—‘˜\¨6Ó2ˆÜ×&Ñ&Ó(¨:Ñ5ˆØ�‰�vÔØ×Ñ˜GÕ$ð%ð �LÐ Ð r   c                 óÖ  — |j                  «       }dt        j                  j                  | «      › d�}|d|j                  › d|j
                  › d�j                  dd«      z  }|d|j                  › d|j                  › d�z  }|d	|j                  › d
|j                  › d�z  }|d|j                  › d|j                  › d�z  }|d|j                  › d�z  }|d|j                  › �z  }|S )Nzmodel=ú,zgraph_optimization_level=z,intra_op_num_threads=zGraphOptimizationLevel.ORT_Ú zbatch_size=z,sequence_length=ztest_cases=z,test_times=zuse_gpu=z,use_io_binding=zaverage_sequence_length=zrandom_sequence_length=)Úget_session_optionsÚosÚpathÚbasenamerE   r   Úreplacer
   r   r   r   r   r   r   r   )r#   rS   r†   rR   Úoptions        r    Ú	to_stringrœ   ã   s9  € Ø×.Ñ.Ó0€LØ”b—g‘g×&Ñ& zÓ2Ð3°1Ð5€FØ
Ð)¨,×*OÑ*OÐ)PÐPfÐgs÷  hIñ  hIð  gJð  JKð  L÷  Tñ  TØ% róñ €Fð �˜L×3Ñ3Ð4Ð4EÀl×FbÑFbÐEcÐcdÐeÑe€FØ
�˜L×3Ñ3Ð4°LÀ×AXÑAXÐ@YÐYZÐ[Ñ[€FØ
�˜×-Ñ-Ð.Ð.>¸|×?ZÑ?ZÐ>[Ð[\Ð]Ñ]€FØ
Ð(¨×)MÑ)MÐ(NÈaÐPÑP€FØ
Ð'¨×(KÑ(KÐ'LÐMÑM€FØ€Mr   c           	      ó$  — t        | j                  |j                  |j                  || j                  |j
                  | j                  ¬«      }|j                  «       D �cg c]  }|j                  ‘Œ }}t        | j                  ||«      }||v rt        d|«       y t        d|«       g }	|j                  r=t        |j                  «      D ]$  }
t        ||||«      \  }}|	j                  |«       Œ& n;t        |j                  «      D ]#  }
t!        |||«      \  }}|	j                  |«       Œ% t#        j$                  |	«      dz  }t'        j(                  |«      }t#        j*                  |d«      }t#        j*                  |d«      }t#        j*                  |d«      }t#        j*                  |d«      }t#        j*                  |d	«      }|j,                  d
|z  z  }|||||||f||<   t        dj/                  t/        |d«      t/        |d«      «      «       | j0                  rÜt2        j4                  j7                  | j0                  «      }t2        j4                  j9                  |«      rL|}|j;                  dd«      d   › dt=        j>                  «       jA                  «       › d�}t        d|d|d«       |jC                  «       }tE        |d«      5 }tG        jH                  ||«       d d d «       t        d|«       y y c c}w # 1 sw Y   ŒxY w)N)r   rP   zskip duplicated test:zRunning test:éè  é2   éK   éZ   é_   r8   g     @�@z,Average latency = {} ms, Throughput = {} QPSú.2fz.jsonr5   r   ú.zWARNING:zexists, will write tozinstead.ÚwzTuning results is saved to)%rU   r#   r   r   r'   r   r(   Úget_outputsri   rœ   r=   r   r   r   rŽ   Úextendr’   rZ   rj   Ú
statisticsÚmeanÚ
percentiler
   Úformatr)   r—   r˜   ÚabspathÚexistsÚrsplitr   ÚnowÚ	timestampÚget_tuning_resultsrL   rN   Údump)Úmodel_settingr†   Úperf_resultsr„   r   rS   Úoutputr…   ÚkeyÚall_latency_listÚ_ir‡   rˆ   Ú
latency_msÚaverage_latencyÚ
latency_50Ú
latency_75Ú
latency_90Ú
latency_95Ú
latency_99Ú
throughputÚoutput_pathÚold_output_pathÚtrsrT   s                            r    Úrun_one_testrÄ   ò   sÖ  € ÜØ× Ñ Ø×ÑØ×ÑØØ×ÑØ!×.Ñ.Ø)×>Ñ>ô€Gð /6×.AÑ.AÓ.CÖD F�F—K“KÐD€LÐDä
�M×,Ñ,¨g°|Ó
D€CØ
ˆlÑÜÐ% sÔ+Øä	ˆ/˜3ÔàÐØ×"Ò"Ü˜×/Ñ/Ó0ò 	2ˆBÜ$IØ˜ \°<ó%Ñ!ˆG�\ð ×#Ñ# LÕ1ñ		2ô ˜×/Ñ/Ó0ò 	2ˆBÜ$9¸'À:È|Ó$\Ñ!ˆG�\Ø×#Ñ# LÕ1ð	2ô
 —‘Ð*Ó+¨dÑ2€Jä —o‘o jÓ1€OÜ—‘˜z¨2Ó.€JÜ—‘˜z¨2Ó.€JÜ—‘˜z¨2Ó.€JÜ—‘˜z¨2Ó.€JÜ—‘˜z¨2Ó.€JØ×(Ñ(¨F°_Ñ,DÑE€Jð 	ØØØØØØð€L�Ñô 
Ø6×=Ñ=¼fÀ_ÐV[Ó>\Ô^dÐeoÐqvÓ^wÓxôð ×*Ò*Ü—g‘g—o‘o m×&IÑ&IÓJˆÜ�7‰7�>‰>˜+Ô&Ø)ˆOØ*×1Ñ1°'¸1Ó=¸aÑ@ÐAÀÄ8Ç<Á<Ã>×C[ÑC[ÓC]ÐB^Ð^cÐfˆKÜ�*˜oÐ/FÈÐU_Ô`à×(Ñ(Ó*ˆÜ�+˜sÓ#ð 	 qÜ�I‰I�c˜1Ô÷	äÐ*¨KÕ8ð +ùò] E÷l	ð 	ús   Á!LËLÌLc                 ó„   — t        j                  t        | ||||f¬«      }|j                  «        |j	                  «        y )N)ÚtargetÚargs)ÚmultiprocessingÚProcessrÄ   ÚstartÚjoin)r³   r†   r´   r„   r   Úprocesss         r    Úlaunch_testrÍ   7  s=   € Ü×%Ñ%ÜàØØØØ ð
ô	€Gð ‡M�M„OØ‡L�L…Nr   c                 ót  — |j                   �t        | ||||j                   «       y t        j                  d¬«      }t        j                  d¬«      }t	        ||h«      }t        dt        d|«      «      D ]  }||vsŒ|j                  |«       Œ |j                  d¬«       |D ]  }t        | ||||«       Œ y )NF)ÚlogicalTr5   é   )Úreverse)	r   rÍ   ÚpsutilÚ	cpu_countÚlistr   Úminr~   Úsort)	r³   r†   r´   r„   rÓ   Úlogical_coresÚcandidate_threadsr‹   r   s	            r    Úrun_perf_testsrÙ   F  sÊ   € Ø×(Ñ(Ð4ÜØØØØØ×-Ñ-ô	
ð 	ä× Ñ ¨Ô/€IÜ×$Ñ$¨TÔ2€Mä˜m¨YÐ7Ó8ÐÜ�1”c˜"˜mÓ,Ó-ò (ˆØÐ%Ò%Ø×$Ñ$ QÕ'ð(ð ×Ñ 4ÐÔ(à 1ò aÐÜ�M <°¸zÐK_Õ`ñar   c                 óÄ  — t        | j                  | j                  | j                  | j                  «      \  }}}t        d|j                  › d|j                  › d|j                  › �«       t        |j                  |j                  |j                  |j                  |j                  ||||j                  |j                  | j                  ¬«      }t        | |||«       y )NzGenerating z samples for batch_size=z sequence_length=)r*   )r   r#   r$   r%   r&   r=   r   r
   r   r   r   r   r   r   r*   rÙ   )r³   r†   r´   Ú	input_idsÚsegment_idsÚ
input_maskr„   s          r    Úrun_performancerÞ   ^  së   € Ü)8Ø× Ñ Ø×$Ñ$Ø×&Ñ&Ø×%Ñ%ó	*Ñ&€Iˆ{˜Jô 
Ø
�l×-Ñ-Ð.Ð.FÀ|×G^ÑG^ÐF_Ð_pÐq}÷  rNñ  rNð  qOð  	Pôô $Ø×ÑØ×$Ñ$Ø×ÑØ×ÑØ×ÑØØØØ×,Ñ,Ø×+Ñ+Ø×)Ñ)ô€Jô �= ,°¸jÕIr   c                  ó  — t        j                  «       } | j                  ddt        d¬«       | j                  dddt        dd¬	«       | j                  d
ddt        d¬«       | j                  ddt        dd¬«       | j                  dddt        dd¬«       | j                  ddt        g d¢dd¬«       | j                  ddt        dd¬«       | j                  dddd ¬!«       | j                  d¬"«       | j                  d#dt        d$g d%¢d&¬'«       | j                  d(ddd)¬!«       | j                  d¬*«       | j                  d+ddd,¬!«       | j                  d¬-«       | j                  d.dt        d d/¬«       | j                  d0d1dt        d d2¬«       | j                  d3dt        d d4¬«       | j                  d5dt        d d6¬«       | j                  d7dt        d d8¬«       | j                  d9d t        d:¬;«       | j                  d<d t        d=¬;«       | j                  d>d?d@t        dA¬;«       | j                  dBdCdddD¬!«       | j                  d¬E«       | j                  dFdt        d$dG¬«       | j                  «       }|S )HNz--modelTzbert onnx model path)Úrequiredrr   Úhelpz-bz--batch_sizeú+zKbatch size of input. Allow one or multiple values in the range of [1, 128].)rà   rr   Únargsrá   z-sz--sequence_lengthz maximum sequence length of inputz	--samplesFé
   z!number of samples to be generated)rà   rr   Údefaultrá   z-tz--test_timesr   zJnumber of times to run per sample. By default, the value is 1000 / samplesz--opt_level)r   r5   r6   r7   r8   r8   zfonnxruntime optimization level: 0 - disable all, 1 - basic, 2 - extended, 3 - layout, 99 - enable all.)rà   rr   Úchoicesrå   rá   z--seedr7   zPrandom seed. Use the same seed to make sure test data is same in multiple tests.z	--verboseÚ
store_truezprint verbose information)rà   Úactionrá   )r   z--log_severityr6   )r   r5   r6   r7   é   z.0:Verbose, 1:Info, 2:Warning, 3:Error, 4:Fatal)rà   rr   rå   ræ   rá   z	--use_gpuzuse GPU)r   z--use_io_bindingzuse io_binding)r   z
--providerzExecution provider to usez-nz--intra_op_num_threadsz>=0, set intra_op_num_threadsz--input_ids_namezinput name for input idsz--segment_ids_namezinput name for segment idsz--input_mask_namezinput name for attention maskz--input_tuning_resultsz3tuning results (json) to be loaded before benchmark)rå   rr   rá   z--output_tuning_resultsz1tuning results (json) to be saved after benchmarkz-az--average_sequence_lengthéÿÿÿÿz)average sequence length excluding paddingz-rz--random_sequence_lengthz3use uniform random instead of fixed sequence length)r   z--mask_typezmmask type: (1: mask index or sequence length, 2: raw 2D mask, 3: key len, cumulated lengths of query and key))ÚargparseÚArgumentParserÚadd_argumentr   r   Úset_defaultsÚ
parse_args)ÚparserrÇ   s     r    Úparse_argumentsrñ   {  s=  € Ü×$Ñ$Ó&€FØ
×Ñ˜	¨D´sÐAWÐÔXà
×ÑØØØÜØØZð ô ð ×ÑØØØÜØ/ð ô ð ×ÑØØÜØØ0ð ô ð ×ÑØØØÜØØYð ô ð ×ÑØØÜÚ ØØuð ô ð ×ÑØØÜØØ_ð ô ð ×ÑØØØØ(ð	 ô ð ×Ñ ÐÔ&à
×ÑØØÜØÚØ=ð ô ð ×Ñ˜¨e¸LÈyÐÔYØ
×Ñ ÐÔ&à
×ÑÐ*°UÀ<ÐVfÐÔgØ
×Ñ uÐÔ-à
×ÑØØÜØØ(ð ô ð ×ÑØØ ØÜØØ,ð ô ð ×ÑØØÜØØ'ð ô ð ×ÑØØÜØØ)ð ô ð ×ÑØØÜØØ,ð ô ð ×ÑØ ØÜØBð	 ô ð ×ÑØ!ØÜØ@ð	 ô ð ×ÑØØ#ØÜØ8ð ô ð ×ÑØØ"ØØØBð ô ð ×Ñ¨uÐÔ5à
×ÑØØÜØØ|ð ô ð ×ÑÓ€DØ€Kr   c                  ó†  — t        «       } | j                  dk(  r't        dt        d| j                  z  «      «      | _        | j
                  dk  r| j                  | _        t        j                  «       }|j                  «       }t        | j                  «      }t        |«      dk\  rt        |«      dk  st        d«      ‚t        | j                  | j                   | j"                  | j$                  | j&                  | j(                  | j*                  | j,                  «      }|D ]ª  }t/        || j                  | j                  | j                  | j0                  | j2                  | j4                  | j6                  | j8                  | j:                  | j<                  | j
                  | j>                  «      }tA        d|«       tC        |||«       Œ¬ tE        |jG                  «       dd„ ¬	«      }tH        jJ                  jM                  tO        | j                  «      jP                  d
jS                  | j0                  rdnddjM                  tE        |«      D �cg c]  }tU        |«      ‘Œ c}«      | j                  tW        jX                  «       j[                  d«      «      «      }	t]        |	dd¬«      5 }
t_        j`                  |
dd¬«      }d }|D ]¹  \  }}|jc                  d«      }|€Fg d¢}|je                  |D �cg c]  }|jc                  d«      d   ‘Œ c}«       |jg                  |«       |D �cg c]  }tS        |d«      ‘Œ }}|je                  |D �cg c]  }|jc                  d«      d   ‘Œ c}«       |jg                  |«       Œ» 	 d d d «       tA        d|	«       y c c}w c c}w c c}w c c}w # 1 sw Y   Œ*xY w)Nr   r5   rž   é€   z batch_size not in range [1, 128]ztest settingFc                 ó   — | d   S )Nr5   r   )Úxs    r    ú<lambda>zmain.<locals>.<lambda>M  s   € ÈqÐQRÉt€ r   )rÑ   r¶   zperf_results_{}_B{}_S{}_{}.txtÚGPUÚCPUú-z%Y%m%d-%H%M%Szw+r•   )Únewlineú	ú
)Ú	delimiterÚlineterminatorr”   )zLatency(ms)ÚLatency_P50ÚLatency_P75ÚLatency_P90ÚLatency_P95ÚLatency_P99zThroughput(QPS)ú=r£   zTest summary is saved to)4rñ   r   Úmaxr   Úsamplesr   r   rÈ   ÚManagerÚdictÚsetr
   rÕ   Ú	Exceptionr"   Úmodelr$   r%   r&   r'   r(   r)   r*   r	   r   r   r   r   r   r   r   r   r=   rÞ   Úsortedrc   r—   r˜   rË   r   Úparentr«   r   r   r¯   ÚstrftimerL   ÚcsvÚwriterÚsplitr§   Úwriterow)rÇ   Úmanagerr´   Úbatch_size_setr³   r
   r†   Úsorted_resultsrõ   Úsummary_fileÚtsv_fileÚ
tsv_writerÚheadersr¶   Úperf_resultÚparamsÚvaluess                    r    Úmainr    s  € ÜÓ€Dà‡�˜!ÒÜ˜a¤ T¨D¯L©LÑ%8Ó!9Ó:ˆŒà×#Ñ# qÒ(Ø'+×';Ñ';ˆÔ$ä×%Ñ%Ó'€GØ—<‘<“>€Lä˜Ÿ™Ó)€NÜ�Ó 1Ò$¬¨^Ó)<ÀÒ)CÜÐ:Ó;Ð;ä Ø�
‰
Ø×ÑØ×ÑØ×ÑØ�‰Ø×!Ñ!Ø×"Ñ"Ø�‰ó	€Mð %ò Cˆ
Ü"ØØ× Ñ Ø�L‰LØ�O‰OØ�L‰LØ×ÑØ�M‰MØ×%Ñ%Ø�I‰IØ�L‰LØ×ÑØ×(Ñ(Ø×'Ñ'ó
ˆô  	ˆn˜lÔ+Ü˜ |°\ÕBð%Cô* ˜L×.Ñ.Ó0¸%Á^ÔT€Nä—7‘7—<‘<ÜˆT�Z‰ZÓ×ÑØ(×/Ñ/Ø—\’\‰E uØ�H‰H¤f¨^Ó&<Ö= ”c˜!•fÒ=Ó>Ø× Ñ Ü�L‰L‹N×#Ñ# OÓ4ó		
ó€Lô 
ˆl˜D¨"Ô	-ð (°Ü—Z‘Z °DÈÔNˆ
ØˆØ .ò 	(ÑˆC�Ø—Y‘Y˜s“^ˆFØˆò�ð —‘¸Ö@°A §¡¨£¨Q£Ò@ÔAØ×#Ñ# GÔ,à0;Ö<¨1”f˜Q Õ&Ð<ˆFÐ<Ø�M‰M°FÖ;¨q˜1Ÿ7™7 3›<¨›?Ò;Ô<Ø×Ñ Õ'ñ#	(÷(ô, 
Ð
$ lÕ3ùò7 >ùò(  Aùò =ùÚ;÷'(ð (ús=   ÉN#Ê4A	N7Ë=N(ÌN7Ì4N-ÍN7ÍN2Í3N7Î(N7Î7O Ú__main__)Nr6   N)%rë   r  rN   rÈ   r—   r�   r¨   r‚   Údataclassesr   r   Úpathlibr   ÚnumpyrZ   rÒ   rX   Úbert_test_datar   r   r	   r"   rU   ra   rm   ry   rŽ   r’   rœ   rÄ   rÍ   rÙ   rÞ   rñ   r  r   Ú__spec__r   r   r    ú<module>r$     sÕ   ðó Û 
Û Û Û 	Û Û Û Ý !Ý Ý ã Û Û ß >ð ÷!ð !ó ð!ð  ÷ð ó ðð  "ØØóRòj ò)òò.!ò2!ò òB9òJòaò0Jò:_òDQ4ðh ˆzÒà€Há…Fð	 r   