Ë
    cQêj%a  ã                  ó  — d dl m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	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mZ d dlmZmZmZmZ d dlZ ej8                  e«      Zdd„Zd„ Z d„ Z!d	„ Z"d
„ Z#d„ Z$d„ Z%edk(  r e%«        yy)é    )ÚannotationsN)Úsetup_logger)Úadd_io_bindings_as_tensorsÚget_initial_inputs_and_outputs)Ú
AutoConfigÚAutoModelForCausalLMÚAutoTokenizerÚBitsAndBytesConfigc                ó  — | j                   dv �rd }| j                  dk(  r¤| j                  dk(  r•t        dddt        j
                  ¬«      }t        j                  | j                  dk7  r| j                  n| j                  | j                  | j                  | j                  | j                  dd|| j                  d	i¬
«	      }n”	 t        j                  | j                  dk7  r| j                  n| j                  | j                  | j                  | j                  | j                  d| j                  dk(  rdnd¬«      j                  | j                   «      }|j'                  «        | j                   dk(  rt	        j(                  |«      }|S t+        j,                  «       }| j                  dk(  rdd| j                  ifnd}t+        j.                  | j0                  ||g¬«      }|S # t"        $ r™}t%        d|«       t        j                  | j                  dk7  r| j                  n| j                  | j                  | j                  | j                  | j                  dd¬«      j                  | j                   «      }Y d }~�Œ-d }~ww xY w)N¾   úpt-eagerú
pt-compileÚint4ÚcudaTÚnf4)Úload_in_4bitÚbnb_4bit_use_double_quantÚbnb_4bit_quant_typeÚbnb_4bit_compute_dtypeÚ Úflash_attention_2Ú80GB)Ú	cache_dirÚtorch_dtypeÚuse_auth_tokenÚtrust_remote_codeÚ	use_cacheÚattn_implementationÚquantization_configÚ
max_memoryÚsdpa)r   r   r   r   r   r   z&Try to load a model using eager mode: Úeagerr   ÚCUDAExecutionProviderÚ	device_idÚCPUExecutionProvider)Úsess_optionsÚ	providers)Úbenchmark_typeÚonnx_precisionÚdevicer
   ÚtorchÚfloat16r   Úfrom_pretrainedÚhf_dir_pathÚ
model_namer   r   ÚauthÚtrustr$   ÚtoÚtarget_deviceÚ	ExceptionÚprintÚevalÚcompileÚortÚSessionOptionsÚInferenceSessionÚonnx_model_path)ÚargsÚmodelÚ
bnb_configÚer&   Úeps         úx/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/onnxruntime/transformers/models/llama/benchmark_e2e.pyÚ	get_modelrB   8   s3  € Ø×ÑÐ8Ò8ØˆØ×Ñ &Ò(¨T¯[©[¸FÒ-BÜ+Ø!Ø*.Ø$)Ü',§}¡}ô	ˆJô )×8Ñ8Ø$(×$4Ñ$4¸Ò$:�× Ò ÀÇÁØŸ.™.Ø ×,Ñ,Ø#Ÿy™yØ"&§*¡*ØØ$7Ø$.Ø ŸN™N¨FÐ3ô
‰Eð)Ü,×<Ñ<Ø(,×(8Ñ(8¸BÒ(>�D×$Ò$ÀDÇOÁOØ"Ÿn™nØ $× 0Ñ 0Ø#'§9¡9Ø&*§j¡jØ"Ø@DÇÁÈvÒ@UÑ)<Ð[aô÷ ‘"�T×'Ñ'Ó(ð ð. 	�
‰
Œà×Ñ ,Ò.Ü—M‘M %Ó(ˆEð €Lô ×)Ñ)Ó+ˆð �{‰{˜fÒ$ð % {°D·N±NÐ&CÑDà'ð 	ô
 ×$Ñ$ T×%9Ñ%9ÈÐacÐ`dÔeˆà€Løô9 ò )ô Ð>ÀÔBÜ,×<Ñ<Ø(,×(8Ñ(8¸BÒ(>�D×$Ò$ÀDÇOÁOØ"Ÿn™nØ $× 0Ñ 0Ø#'§9¡9Ø&*§j¡jØ"Ø(/ô÷ ‘"�T×'Ñ'Ó(ö ûð	)ús   ÃBG) Ç)	JÇ2BJÊJc                ó6  — | j                   dk(  r%t        j                  «       5   |di |¤Ž}d d d «       d }| j                   dv r9| j                  dk7  r]t        j                  j                  | j                  «       n3t        |||| j                  | j                  «      }|j                  «        t        j                  «       }t        |«      D ]�  }| j                   dv r^t        j                  «       5   |di |¤Ž}| j                  dk7  r)t        j                  j                  | j                  «       d d d «       Œo|j                  |«       |j                  «        Œ‘ t        j                  «       }||z
  |z  }	|	|fS # 1 sw Y   �ŒWxY w# 1 sw Y   ŒÈxY w)Nr   r   Úcpu© )r(   r+   Úno_gradr*   r   Úsynchronizer3   r   Úuse_fp16Úuse_buffer_shareÚsynchronize_inputsÚtimeÚperf_counterÚrangeÚrun_with_iobindingÚsynchronize_outputs)
r<   r=   ÚrunsÚinputsÚoutputsÚ
io_bindingÚstartÚ_ÚendÚavgs
             rA   Úrun_inferencerX   x   sd  € Ø×Ñ˜lÒ*Ü�]‰]‹_ñ 	&Ù‘o˜f‘oˆG÷	&ð €JØ×ÑÐ8Ñ8Ø�;‰;˜%ÒÜ�J‰J×"Ñ" 4×#5Ñ#5Õ6ä/°°v¸wÈÏÉÐW[×WlÑWlÓmˆ
Ø×%Ñ%Ô'ô ×ÑÓ€EÜ�4‹[ò -ˆØ×ÑÐ"<Ñ<Ü—‘“ñ ?Ù™/ &™/�Ø—;‘; %Ò'Ü—J‘J×*Ñ*¨4×+=Ñ+=Ô>÷?ð ?ð
 ×$Ñ$ ZÔ0Ø×*Ñ*Õ,ð-ô ×
Ñ
Ó
€CØ�‰;˜$Ñ
€CØ�ˆ<Ð÷5	&ñ 	&ú÷ ?ð ?ús   ¤	FÃ5AFÆFÆF	c           
     óÐ   — t        «        t        ||||| j                  | j                  | j                  | j
                  «      \  }}t        | || j                  ||«      \  }}||fS ©N)Úclear_cacher   r3   rH   rI   ÚenginerX   Úwarmup_runs)	r<   r=   ÚconfigÚ	tokenizerÚprompt_lengthÚpromptrQ   rR   rU   s	            rA   Úprepare_model_for_inferencerb   —   sf   € Ü„MÜ4Ø�	˜=¨&°$×2DÑ2DÀdÇmÁmÐUY×UjÑUjÐlp×lwÑlwó�O€FˆGô ˜t U¨D×,<Ñ,<¸fÀgÓN�J€A€wØ�7ˆ?Ðó    c                 óh   — t        j                  «        t        j                  j	                  «        y rZ   )ÚgcÚcollectr+   r   Úempty_cacherE   rc   rA   r[   r[       s   € Ü‡J�J„LÜ	‡J�J×ÑÕrc   c                óÒ   — t        j                  | ddddddddd	|d
z  › d�d|d
z  › d�d	|› d�d|› d�ddg¬«      }|j                  |d¬«       t        j	                  d|› d�«       y )Nz
Batch SizezPrompt LengthzPrompt Processing Latency (ms)z"Prompt Processing Throughput (tps)zSampling Latency (ms)zSampling Throughput (tps)z"First Token Generated Latency (ms)z&First Token Generated Throughput (tps)úAverage Latency of First é   z Tokens Generated (ms)úAverage Throughput of First z Tokens Generated (tps)zWall-Clock Latency (s)zWall-Clock Throughput (tps))ÚcolumnsF)ÚindexzResults saved in ú!)ÚpdÚ	DataFrameÚto_csvÚloggerÚinfo)ÚresultsÚfilenameÚ
gen_lengthÚdfs       rA   Úsave_resultsrx   ¥   sœ   € Ü	�‰ØàØØ,Ø0Ø#Ø'Ø0Ø4Ø'¨
°a©Ð'8Ð8NÐOØ*¨:¸©?Ð*;Ð;RÐSØ'¨
 |Ð3IÐJØ*¨:¨,Ð6MÐNØ$Ø)ð
ô
€Bð( ‡I�Iˆh˜e€IÔ$Ü
‡K�KÐ# H :¨QÐ/Õ0rc   c                 óÜ  — t        j                  «       } | j                  ddt        dg d¢¬«       | j                  ddt        dd	¬
«       | j                  ddddd¬«       | j                  ddddd¬«       | j                  ddt        t        j
                  j                  dd«      d¬«       | j                  dt        dd¬«       | j                  dddd¬«       | j                  d d!dt        j
                  j                  dd"d#d$«      d%¬&«       | j                  d'ddd(¬«       | j                  d)ddd*¬«      f | j                  d+d,d-¬.«       | j                  d/d0d1¬.«       | j                  d2d3dt        d4g d5¢d6¬7«       | j                  d8d9t        d:d;¬«       | j                  d<d=t        t        j                  j                  «       rd>nd?d?d>g¬@«       | j                  dAdBt        dC¬D«       | j                  dEdFt        dG¬D«       | j                  dHdIt        dJ¬D«       | j                  dKt        dL¬D«       | j                  «       }t        j                  j                  |j                  «       t        j                  |j                  «       dM|j                   v rVt#        |dN|j$                  j'                  «       › dO�«       |j(                  dPk(  r|j(                  dQ|j*                  if|_        |j                   dMk(  r|j,                  sJ dR«       ‚|j.                  j1                  dS«      |_        |j2                  j1                  dS«      |_        t#        |dT|j4                  «       |j4                  dUv s|j4                  dVk(  r|j$                  d?k(  rd4ndW|_        |j$                  d?k7  rdX|j*                  › �n|j$                  }|j4                  dWk(  rt        j6                  nt        j8                  }|j                   dMk(  rdMndY}t#        |dZ|«       t#        |d[|«       t#        |d\|«       t#        |d]|j4                  dWk(  «       |j:                  xr |dMk(  |_        |S )^Nz-btz--benchmark-typeT)r   r   r8   )ÚtypeÚrequiredÚchoicesz-mz--model-nameFz<Hugging Face name of model (e.g. 'meta-llama/Llama-2-7b-hf'))rz   r{   Úhelpz-az--authÚ
store_truez5Use Hugging Face authentication token to access model)ÚdefaultÚactionr}   z-tz--trustzeWhether or not to allow for custom models defined on the Hugging Face Hub in their own modeling filesz-cz--cache-dirú.Úmodel_cachez´Path to directory containing all Hugging Face files (e.g. config, tokenizer, PyTorch model). Use when loading model as `AutoModel.from_pretrained(model_name, cache_dir=cache_dir)`.)rz   r   r}   z--hf-dir-pathr   z Path to directory containing all Hugging Face files (e.g. config, tokenizer, PyTorch model). Use when loading model as `AutoModel.from_pretrained(folder_path)`.z-oz--onnx-model-pathzPath to ONNX model)r{   r}   z-fz--prompts-fileÚmodelsÚllamazprompts.jsonzsJSON file containing entries in the format 'prompt length: prompt' where prompt length = tokenized length of prompt)r{   r   r}   z--use_buffer_sharez3Use when GroupQueryAttention (GQA) is in ONNX modelz--anomaly-filteringzõUse this flag to filter anomaly accelerator times for tokens generated.               This may give more accurate latency and throughput metrics for tokens generated.               Wall-clock metrics are still reported with anomaly times though.z-bz--batch-sizesz1 2)r   z-sz--prompt-lengthsz16 64 256 1024z-pz--precisionÚfp32)r   Úint8Úfp16r…   zePrecision for model. For ONNX models, the model's precision should be set before running this script.)r{   rz   r   r|   r}   z-gz--generation-lengthé   z Number of new tokens to generatez-dz--devicer   rD   )rz   r   r|   z-idz--device-idr   )rz   r   z-wz--warmup-runsé   z-nz
--num-runséd   z--seedrj   r8   Úexecution_providerÚExecutionProviderr#   r$   z,Please specify a path to `--onnx-model-path`ú r)   >   r…   r†   r   r‡   zcuda:Úptr3   r   r\   rH   )ÚargparseÚArgumentParserÚadd_argumentÚstrÚosÚpathÚjoinÚintr+   r   Úis_availableÚ
parse_argsÚnpÚrandomÚseedÚmanual_seedr(   Úsetattrr*   Úupperr‹   r$   r;   Úbatch_sizesÚsplitÚprompt_lengthsÚ	precisionr,   Úfloat32rI   )Úparserr<   r3   r   r\   s        rA   Úget_argsr¥   ¾   s”  € Ü×$Ñ$Ó&€Fà
×ÑØØÜØÚ1ð ô ð ×ÑØØÜØØKð ô ð ×ÑØØØØØDð ô ð ×ÑØØØØØtð ô ð ×ÑØØÜÜ—‘—‘˜S -Ó0ð Dð ô ð ×ÑØÜØð pð	 ô ð ×ÑØØØØ!ð	 ô ð ×ÑØØØÜ—‘—‘˜S (¨G°^ÓDð Cð ô ð ×ÑØØØØBð	 ô ð 	×ÑØ!ØØðPð	 	ó 	
ñ	ð ×ÑØØØð ô ð ×ÑØØØ ð ô ð ×ÑØØØÜØÚ0Øtð ô ð ×ÑØØÜØØ/ð ô ð ×ÑØØÜÜŸ*™*×1Ñ1Ô3‘¸Ø˜�ð ô ð ×Ñ˜˜}´3ÀÐÔBØ
×Ñ˜˜o´CÀÐÔCØ
×Ñ˜˜l´¸cÐÔBØ
×Ñ˜¤s°AÐÔ6à×ÑÓ€Dô ‡I�I‡N�N�4—9‘9ÔÜ	×Ñ�d—i‘iÔ ð �×#Ñ#Ñ#Ü�Ð*¨t¯{©{×/@Ñ/@Ó/BÐ.CÐCTÐ,UÔVØ×"Ñ"Ð&=Ò=Ø'+×'>Ñ'>ÀÈdÏnÉnÐ@]Ð&^ˆDÔ#ð ×Ñ˜eÒ#Ø×#Ò#ÐSÐ%SÓSÐ#à×'Ñ'×-Ñ-¨cÓ2€DÔØ×-Ñ-×3Ñ3°CÓ8€DÔô ˆDÐ" D§N¡NÔ3à—.‘.Ð$4Ñ4¸¿¹È6Ò9QÐVZ×VaÑVaÐejÒVj‰Ðqwð 	„Nð 15·±¸uÒ0D�e˜DŸN™NÐ+Ñ,È$Ï+É+€MØ#'§>¡>°VÒ#;”%—-’-ÄÇÁ€KØ×)Ñ)¨UÒ2‰U¸€FÜˆD�/ =Ô1ÜˆD�- Ô-ÜˆD�(˜FÔ#ÜˆD�*˜dŸn™n°Ñ6Ô7à ×1Ñ1ÒE°fÀ±o€DÔà€Krc   c                 ó”  ‡9‡:— t        «       } t        d«       t        j                  | j                  «       d }t        | j                  «      5 }t        j                  |d„ ¬«      }d d d «       t        j                  | j                  dk7  r| j                  n| j                  | j                  | j                  | j                  ¬«      }t!        j                  | j                  dk7  r| j                  n| j                  | j                  | j                  | j                  ¬«      }t#        | «      }g }t%        j&                  | j(                  | j*                  «      D �]^  \  }}t-        |«      t-        |«      }}t        j                  d|› d|› �«       t/        «        || j0                  z   }	||vr[t3        t5        j6                  d|› d	| j                  › d
| j                  › d|› d|› d|› d|› d|› d| j                  › d|› d�«      «      ‚||   g|z  }
||g}	 t        j                  d«       t9        | |||||
«      \  }}t;        | || j<                  ||«      \  }}|dz  }|||z  z  }t        j                  d|› d�«       t        j                  d|||z  z  › d�«       |j?                  ||g«       t        j                  d«       t/        «        t9        | |||||
«      \  }}|d   jA                  «       }|jB                  d   }|jD                  }tG        |d«      r|jH                  n|jJ                  |jL                  z  }tO        jP                  || jR                  tN        jT                  ¬«      }g }g }tW        jX                  «       }||	k  �ryt;        | |d||«      \  }}|j[                  |«       tW        jX                  «       }|d   jB                  d   dkD  r‡|d    j]                  d«      dz
  }|j_                  d¬!«      ja                  d|jb                  «      je                  |d|jb                  «      }tO        jf                  |d   d|«      ji                  «       }n|d   d d …dd d …f   }tO        jj                  |d¬!«      }||z  |jl                  k(  }|jo                  ||jl                  «      jq                  |dg«      }tW        jX                  «       } |j[                  | |z
  «       tO        jr                  ||gd¬!«      }|dz  }||d<   tO        jr                  |d    | ju                  tN        jv                  «      jq                  |d«      gd«      |d <   d"|v r3tO        jx                  |d"   d¬!«      d#   jq                  |d«      dz   |d"<   |d   jB                  d   dk7  r"|d   d d …d d…d d …f   j{                  «       |d<   |d   j}                  «        | j~                  d$k(  r
|d%   |d%<   �n	| j€                  sýtƒ        |j„                  «      D ]"  }!|d&|!› d'�   |d(|!› d'�<   |d&|!› d)�   |d(|!› d)�<   Œ$ |d    jB                  d   }"tƒ        |j„                  «      D ]™  }!tO        jP                  |||"|| jR                  | j†                  ¬«      }#tO        jP                  |||"|| jR                  | j†                  ¬«      }$|j‰                  d&|!› d'�|#j{                  «       d&|!› d)�|$j{                  «       i«       Œ› ||	k  r�ŒytW        jX                  «       }%|j‹                  d#«       | jŒ                  rad*Š9t�        |«      Š:t‘        |«      }&t“        t•        ˆ9ˆ:fd+„|«      «      }t‘        |«      }'t        j                  d,|&|'z
  › d-‰9› d.‰:dz  › d/�«       t]        |«      t‘        |«      z  }(|(dz  })|d|(z  z  }*t        j                  d0|)› d�«       t        j                  d1|*› d�«       |d#   }+|+dz  },|d|+z  z  }-t        j                  d2|,› d�«       t        j                  d3|-› d�«       | j0                  d4z  }.t]        |d |. «      t‘        |d |. «      z  }/|/dz  }0|d|/z  z  }1t        j                  d5|.› d6|0› d�«       t        j                  d7|.› d6|1› d�«       t]        |«      t‘        |«      z  }2|2dz  }3|d|2z  z  }4t        j                  d5| j0                  › d6|3› d�«       t        j                  d7| j0                  › d6|4› d�«       |%|z
  }5||| j0                  z   |5z  z  }6t        j                  d8|5› d9�«       t        j                  d:||| j0                  z   |5z  z  › d�«       t        j                  d;«       |j?                  |)|*|,|-|0|1|3|4|5|6g
«       |j[                  |«       �Œa d>| j~                  › d?t˜        j˜                  j›                  «       d@›dA�}8t�        ||8| j0                  «       y # 1 sw Y   �	Œ£xY w# t–        $ r)}7t        j                  d<|› d|› d=|7› �«       Y d }7~7�Œäd }7~7ww xY w)BNFc                óh   — | j                  «       D ��ci c]  \  }}t        |«      |“Œ c}}S c c}}w rZ   )Úitemsr–   )ÚdÚkÚvs      rA   ú<lambda>zmain.<locals>.<lambda>j  s*   € ÐST×SZÑSZÓS\×<]É4È1Èa¼SÀ»VÀQ¹YÓ<]€ ùÓ<]s   ”.)Úobject_hookr   )r   r   r   zRunning batch size = z, prompt length = z2
                                A prompt of size z was not found in 'zv'. There are a couple of solutions to fix this.
                                1) You can change one of the keys in 'z' to be z).
                                    If za < actual prompt's length, the benchmark E2E tool will repeat the first word in the prompt until zB = actual prompt's length.
                                    If zm > actual prompt's length, the benchmark E2E tool will automatically trim the actual prompt's length so that zd = actual prompt's length.
                                2) You can add a new key-value entry in 'z' of the form 'z,': 'your prompt goes here'.
                zMeasuring prompt processing...iè  z&Average Latency of Prompt Processing: z msz)Average Throughput of Prompt Processing: z tpszMeasuring token generation...Ú	input_idséÿÿÿÿÚhead_dim)r*   Údtypeé   ÚlogitsÚattention_mask)ÚdimÚposition_idsr   rŽ   Úpast_key_valueszpresent.z.keyzpast_key_values.z.valueé
   c                ó   •— | ‰‰z  k  S rZ   rE   )Úacc_timeÚanomaly_threshold_factorÚ
min_time_ss    €€rA   r¬   zmain.<locals>.<lambda>  s   ø€ ¨HÐ7OÐR\Ñ7\Ñ,\€ rc   zFiltered out z$ anomaly accelerator times that are zx greater than z ms...zAverage Latency of Sampling: z Average Throughput of Sampling: z"Latency of First Token Generated: z%Throughput of First Token Generated: rj   ri   z Tokens Generated: rk   zWall-Clock Latency: z szWall-Clock Throughput: zAdding results to CSVz$Could not benchmark at batch size = z - Ú
benchmark_Ú_e2e_z%Y-%m-%d_%H:%M:%Sz.csv)Or¥   r   rr   rs   Ú__dict__ÚopenÚprompts_fileÚjsonÚloadr   r-   r.   r/   r   r0   r1   r	   rB   Ú	itertoolsÚproductrŸ   r¡   r–   r[   Úgeneration_lengthÚNotImplementedErrorÚtextwrapÚdedentrb   rX   Únum_runsÚextendÚcloneÚshapeÚnum_key_value_headsÚhasattrr°   Úhidden_sizeÚnum_attention_headsr+   Úzerosr3   ÚboolrK   rL   ÚappendÚsumÚ	unsqueezeÚrepeatÚ
vocab_sizeÚviewÚgatherÚsqueezeÚargmaxÚeos_token_idÚmasked_fillÚreshapeÚcatr2   Úint64ÚmaxÚ
contiguousÚzero_r\   rI   rM   Únum_hidden_layersr   ÚupdateÚpopÚanomaly_filteringÚminÚlenÚlistÚfilterr4   ÚdatetimeÚnowrx   );r<   Úsize_to_promptÚfr^   r_   r=   Úall_csv_metricsÚ
batch_sizer`   Ú
max_lengthra   Úcsv_metricsrQ   rR   Úaccelerator_prompt_latency_sÚaccelerator_prompt_latency_msÚaccelerator_prompt_thrptÚall_token_idsÚcurrent_lengthÚ	num_headsÚ	head_sizeÚhas_eosÚaccelerator_timesÚsampling_timesÚwall_clock_start_timeÚaccelerator_time_latency_sÚsampling_start_timeÚprompt_end_indicesÚidxsÚnext_token_logitsÚnext_tokensÚtokens_to_addÚsampling_end_timeÚiÚnew_sequence_lengthÚpresent_keyÚpresent_valueÚwall_clock_end_timeÚ	orig_sizeÚnew_sizeÚavg_sampling_latency_sÚavg_sampling_latency_msÚavg_sampling_thrptÚfirst_token_latency_sÚfirst_token_latency_msÚfirst_token_thrptÚhalfwayÚhalfway_token_latency_sÚhalfway_token_latency_msÚhalfway_token_thrptÚall_token_latency_sÚall_token_latency_msÚall_token_thrptÚwall_clock_latency_sÚwall_clock_thrptr?   ru   r»   r¼   s;                                                            @@rA   Úmainr  b  sg  ù€ Ü‹:€DÜ�ÔÜ
‡K�K�—‘Ôð €NÜ	ˆd×ÑÓ	 ð _ AÜŸ™ 1Ñ2]Ô^ˆ÷_ô ×'Ñ'Ø ×,Ñ,°Ò2ˆ×Ò¸¿¹Ø—.‘.Ø—y‘yØŸ*™*ô	€Fô ×-Ñ-Ø ×,Ñ,°Ò2ˆ×Ò¸¿¹Ø—.‘.Ø—y‘yØŸ*™*ô	€Iô �d‹O€Eà€OÜ%.×%6Ñ%6°t×7GÑ7GÈ×I\ÑI\Ó%]ó ]tÑ!ˆ
�MÜ$'¨
£O´S¸Ó5G�Mˆ
Ü�‰Ð+¨J¨<Ð7IÈ-ÈÐYÔZÜŒØ" T×%;Ñ%;Ñ;ˆ
à Ñ.Ü%Ü—‘ð2Ø2?°Ð@SÐTX×TeÑTeÐSfð gGØGK×GXÑGXÐFYÐYaÐboÐapð q(Ø(5 ð  7Xð  Yfð  Xgð g(Ø(5 ð  7dð  erð  dsð sJØJN×J[ÑJ[ÐI\Ð\kÐlyÐkzð {ðóó
ð 
ð ! Ñ/Ð0°:Ñ=ˆØ! =Ð1ˆðH	tä�K‰KÐ8Ô9Ü9¸$ÀÀvÈyÐZgÐioÓp‰OˆF�GÜ4AÀ$ÈÈtÏ}É}Ð^dÐfmÓ4nÑ1Ð(¨'ð -IÈ4Ñ,OÐ)Ø'1°]ÐEaÑ5aÑ'bÐ$Ü�K‰KÐ@ÐA^Ð@_Ð_bÐcÔdÜ�K‰KØ;¸JÈ-ÐZvÑJvÑ<wÐ;xÐx|Ð}ôð ×ÑÐ =Ð?WÐXÔYô �K‰KÐ7Ô8ÜŒMÜ9¸$ÀÀvÈyÐZgÐioÓp‰OˆF�Gà" ;Ñ/×5Ñ5Ó7ˆMØ*×0Ñ0°Ñ4ˆNØ×2Ñ2ˆIä#*¨6°:Ô#>�—’ÀF×DVÑDVÐZ`×ZtÑZtÑDtð ô —k‘k *°T×5GÑ5GÌuÏzÉzÔZˆGð !#ÐØˆNä$(×$5Ñ$5Ó$7Ð!Ø  JÓ.ä6CÀDÈ%ÐQRÐTZÐ\cÓ6dÑ3Ð*¨GØ!×(Ñ(Ð)CÔDô '+×&7Ñ&7Ó&9Ð#Ø˜8Ñ$×*Ñ*¨1Ñ-°Ò1Ø)/Ð0@Ñ)A×)EÑ)EÀaÓ)HÈ1Ñ)LÐ&à*×4Ñ4¸Ð4Ó;ß™  6×#4Ñ#4Ó5ß™˜j¨!¨V×->Ñ->Ó?ð ô
 ).¯©°W¸XÑ5FÈÈ4Ó(P×(XÑ(XÓ(ZÑ%à(/°Ñ(9º!¸RÂ¸(Ñ(CÐ%Ü#Ÿl™lÐ+<À"ÔE�ð " KÑ/°9×3IÑ3IÑI�ð !,× 7Ñ 7¸À×AWÑAWÓ X× `Ñ `ÐblÐnoÐapÓ q�Ü$(×$5Ñ$5Ó$7Ð!Ø×%Ñ%Ð&7Ð:MÑ&MÔNä %§	¡	¨=¸-Ð*HÈbÔ Q�Ø !Ñ#�ð '4��{Ñ#Ü+0¯9©9ØÐ,Ñ-°°¯}©}¼U¿[¹[Ó/I×/QÑ/QÐR\Ð^_Ó/`ÐaÐcdó,�Ð'Ñ(ð " VÑ+Ü-2¯Y©Y°v¸nÑ7MÐSTÔ-UÐVWÑ-X×-`Ñ-`ÐakÐmnÓ-oÐrsÑ-s�F˜>Ñ*ð ˜8Ñ$×*Ñ*¨1Ñ-°Ò2Ø(/°Ñ(9º!¸R¸a¸RÂ¸(Ñ(C×(NÑ(NÓ(P�G˜HÑ%Ø˜Ñ!×'Ñ'Ô)ð —;‘; $Ò&à07Ð8IÑ0J�FÐ,Ó-Ø×.Ò.ä" 6×#;Ñ#;Ó<ò ]˜Ø=DÀxÐPQÈsÐRVÐEWÑ=X˜Ð!1°!°°DÐ9Ñ:Ø?FÈÐRSÐQTÐTZÐG[Ñ?\˜Ð!1°!°°FÐ;Ò<ð]ð +1Ð1AÑ*B×*HÑ*HÈÑ*KÐ'Ü" 6×#;Ñ#;Ó<ò ˜Ü&+§k¡kØ&Ø%Ø/Ø%Ø#'×#5Ñ#5Ø"&×"2Ñ"2ô'˜ô ).¯©Ø&Ø%Ø/Ø%Ø#'×#5Ñ#5Ø"&×"2Ñ"2ô)˜ð  Ÿ™à"*¨1¨#¨TÐ 2°K×4JÑ4JÓ4LØ"*¨1¨#¨VÐ 4°m×6NÑ6NÓ6Pðõð#ðo ! JÔ.ô^ #'×"3Ñ"3Ó"5Ðð ×!Ñ! !Ô$Ø×%Ò%Ø+-Ð(Ü Ð!2Ó3�
ÜÐ 1Ó2�	Ü$(ÜÔ\Ð^oÓpó%Ð!ô Ð0Ó1�Ü—‘Ø# I°Ñ$8Ð#9Ð9]Ð^vÐ]wð  xGð  HRð  UYñ  HYð  GZð  Z`ð  aôô &)¨Ó%8¼3¸~Ó;NÑ%NÐ"Ø&<¸tÑ&CÐ#Ø!+¨qÐ3IÑ/IÑ!JÐÜ�K‰KÐ7Ð8OÐ7PÐPSÐTÔUÜ�K‰KÐ:Ð;MÐ:NÈdÐSÔTð %6°aÑ$8Ð!Ø%:¸TÑ%AÐ"Ø *¨aÐ2GÑ.GÑ HÐÜ�K‰KÐ<Ð=SÐ<TÐTWÐXÔYÜ�K‰KÐ?Ð@QÐ?RÐRVÐWÔXð ×,Ñ,°Ñ1ˆGÜ&)Ð*;¸H¸WÐ*EÓ&FÌÐM^Ð_gÐ`gÐMhÓIiÑ&iÐ#Ø'>ÀÑ'EÐ$Ø",°Ð4KÑ0KÑ"LÐÜ�K‰KÐ3°G°9Ð<OÐPhÐOiÐilÐmÔnÜ�K‰KÐ6°w°iÐ?RÐSfÐRgÐgkÐlÔmô #&Ð&7Ó"8¼3Ð?PÓ;QÑ"QÐØ#6¸Ñ#=Ð Ø(¨AÐ0CÑ,CÑDˆOÜ�K‰KØ+¨D×,BÑ,BÐ+CÐCVÐWkÐVlÐloÐpôô �K‰KÐ6°t×7MÑ7MÐ6NÐNaÐbqÐarÐrvÐwÔxð $7Ð9NÑ#NÐ Ø)¨m¸d×>TÑ>TÑ.TÐXlÑ-lÑmÐÜ�K‰KÐ.Ð/CÐ.DÀBÐGÔHÜ�K‰KØ)¨*¸È×I_ÑI_Ñ9_ÐcwÑ8wÑ*xÐ)yÐy}Ð~ôô
 �K‰KÐ/Ô0Ø×Ñà+Ø&Ø*Ø%Ø,Ø'Ø(Ø#Ø(Ø$ðôð ×"Ñ" ;Ö/ðu]tð~ ˜DŸK™K˜=¨¬h×.?Ñ.?×.CÑ.CÓ.EÐFWÐ-XÐX\Ð]€HÜ� (¨D×,BÑ,BÕC÷g_ñ _ûô^ ò 	tÜ�K‰KÐ>¸z¸lÐJ\Ð]jÐ\kÐknÐopÐnqÐr×sÒsûð	tús,   ÁhÈS2hÜJ-hèhè	ièiéiÚ__main__)r<   zargparse.Namespace)&Ú
__future__r   r�   rí   re   rÄ   rÂ   Úloggingr“   rÈ   rK   Únumpyr™   Úpandasro   r+   Úbenchmark_helperr   Úllama_inputsr   r   Útransformersr   r   r	   r
   Úonnxruntimer8   Ú	getLoggerÚ__name__rr   rB   rX   rb   r[   rx   r¥   r  rE   rc   rA   ú<module>r*     s�   ðõ@ #ã Û Û 	Û Û Û Û 	Û Û ã Û Û Ý )ß Sß \Ó \ã à	ˆ×	Ñ	˜8Ó	$€ó=ò@ò>òò
1ò2aòHzDðz ˆzÒÙ…Fð rc   