Ë
    cQêjfU  ã                   óv  — 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mZ d dlmZ d dlmZ d dlmZmZmZ d dlmZ d dlmZmZmZ d dlZ ej@                  e!«      Z"de jF                  fd	„Z$de jF                  fd
„Z%d„ Z&d„ Z'd„ Z(d„ Z)d„ Z*d„ Z+d„ Z,d„ Z-e!dk(  r e-«        yy)é    N)Úmeasure_memoryÚsetup_logger)Úget_library_path)ÚORTModelForSpeechSeq2Seq)ÚProfilerActivityÚprofileÚrecord_function)Útrange)ÚAutoModelForSpeechSeq2SeqÚWhisperConfigÚWhisperProcessorÚargsc                 ó˜  ‡ ‡‡	‡
— ‰ j                   dvrt        d«      ‚ˆ fd„Šˆ fd„Š	‰ j                  ‰ j                  ‰ j                  ‰ j
                  ‰ j                  ‰ j                  dœ}‰ j                   dk(  �r|j                  «       D ]B  \  }}t        j                  |gd|v rt        j                  nt        j                  ¬«      ||<   ŒD ‰ j                  r3t        j                  ‰ j                  gt        j                  ¬«      |d	<   ‰ j                  r3t        j                  ‰ j                   gt        j                  ¬«      |d
<   ‰ j"                  r3t        j                  ‰ j$                  gt        j                  ¬«      |d<   t&        j)                  d‰ j*                  › �«       ˆˆ	fd„}t-        ‰ |‰ j.                  «        |‰ j.                  «      }‰ j.                  r||d<   |S t&        j)                  d«       ‰ j                   dk(  rdndŠ
ˆ ˆ
fd„}t-        ‰ ||«        ||«      }‰ j                   dk(  r||d<   |S |j1                  ‰ j2                  rt4        j6                  nt4        j                  ‰ j8                  ¬«      |d<   ‰ j:                  |d<   d|d<   d|d<   ‰ j                  r‰ j                  |d<   |S )N>   Úortúhf-ortúhf-pt-eagerúhf-pt-compilez/Unable to auto-detect inputs for provided modelc                  óp   •— t        j                  ‰j                  «      } t        j                  | «      } | S ©N)ÚwhisperÚ
load_audioÚ
audio_pathÚpad_or_trim)Úaudior   s    €úv/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/onnxruntime/transformers/models/whisper/benchmark.pyÚload_via_ffmpegz#get_inputs.<locals>.load_via_ffmpeg$   s,   ø€ Ü×"Ñ" 4§?¡?Ó3ˆÜ×#Ñ# EÓ*ˆØˆó    c                  ó  •— t        ‰j                  d«      5 } t        j                  t	        | j                  «       «      t        j                  ¬«      }t        j                  |g«      }d d d «       |S # 1 sw Y   S xY w)NÚrb©Údtype)Úopenr   ÚnpÚasarrayÚlistÚreadÚuint8Úarray)Úfr   r   s     €r   Úload_via_numpyz"get_inputs.<locals>.load_via_numpy)   s_   ø€ Ü�$—/‘/ 4Ó(ð 	&¨AÜ—J‘Jœt A§F¡F£H›~´R·X±XÔ>ˆEÜ—H‘H˜e˜WÓ%ˆE÷	&ð ˆ÷	&ð ˆús   ˜AA5Á5A?)Ú
max_lengthÚ
min_lengthÚ	num_beamsÚnum_return_sequencesÚlength_penaltyÚrepetition_penaltyr   Úpenaltyr    Údecoder_input_idsÚlogits_processorÚtemperaturezLoad audio: c                 ó$   •— | r ‰«       S  ‰«       S r   © )Úonnx_e2er   r*   s    €€r   ú<lambda>zget_inputs.<locals>.<lambda>D   s   ø€ ¹¡^Ó%5€ ÁÓGX€ r   Úaudio_streamzFeature extraction: r#   Úptc                 ój   •— ‰j                   j                  | g‰‰j                  ¬«      j                  S )N)Úreturn_tensorsÚsampling_rate)Ú	processorÚfeature_extractorr=   Úinput_features)r   r   Úreturn_types    €€r   r8   zget_inputs.<locals>.<lambda>P   s3   ø€  §¡×!AÑ!AØ	ˆ ¸4×;MÑ;Mð "Bó "ç�nð r   r@   )r!   ÚdeviceÚinputsÚno_repeat_ngram_sizeTÚearly_stoppingÚ	use_cacheÚforced_decoder_ids)Úbenchmark_typeÚ	Exceptionr+   r,   r-   r.   r/   r0   Úitemsr#   r(   Úfloat32Úint32Úhas_decoder_input_idsr2   Úhas_logits_processorr3   Úhas_temperaturer4   ÚloggerÚinfor   Útime_fnÚhas_audio_streamÚtoÚuse_fp16ÚtorchÚfloat16Útarget_devicerD   )r   rC   ÚkÚvÚload_audio_fnÚ
audio_dataÚprocessor_fnr@   r   r*   rA   s   `       @@@r   Ú
get_inputsr^       sp  û€ Ø×ÑÐ"SÑSÜÐIÓJÐJôô
ð —o‘oØ—o‘oØ—^‘^Ø $× 9Ñ 9Ø×-Ñ-Ø"×5Ñ5ñ€Fð ×Ñ˜eÓ#à—L‘L“Nò 	X‰DˆAˆqÜŸ™ ! ¸)Àq¹.¬B¯JªJÌbÏhÉhÔWˆF�1ŠIð	Xà×%Ò%Ü*,¯(©(°D×4JÑ4JÐ3KÔSU×S[ÑS[Ô*\ˆFÐ&Ñ'Ø×$Ò$Ü)+¯©°4×3HÑ3HÐ2IÔQS×QYÑQYÔ)ZˆFÐ%Ñ&Ø×ÒÜ$&§H¡H¨d×.>Ñ.>Ð-?ÄrÇzÁzÔ$RˆF�=Ñ!ô ‡K�K�,˜tŸ™Ð/Ð0Ô1ÜX€MÜˆD�- ×!6Ñ!6Ô7Ù˜t×4Ñ4Ó5€Jà×Òà!+ˆˆ~ÑØˆô ‡K�KÐ&Ô'Ø×-Ñ-°Ò6‘$¸D€Kô€Lô ˆD�, 
Ô+Ù! *Ó-€Nà×Ñ˜eÒ#à#1ˆÐÑ Øˆà%×(Ñ(Ø#Ÿ}š}Œe�mŠm´%·-±-È×HZÑHZð )ó €Fˆ8Ñð &*×%>Ñ%>€FÐ!Ñ"Ø#€FÐÑØ€Fˆ;Ñà×ÒØ'+×'=Ñ'=ˆÐ#Ñ$à€Mr   c                 óŠ  — d\  }}d\  }}| j                   dv rÌ| j                  r| j                  n| j                  }t        j                  «       }t	        j
                  || j                  rt        j                  nt        j                  d¬«      j                  | j                  «      }t        j                  «       }| j                   dk(  r•t        j                  |«      }n| j                   dv rYt        j                  «       }| j                  |_        |j#                  t%        «       «       | j&                  r'd|_        d|_        nt-        d| j                   › �«      ‚| j                   d	k(  r®t/        | j0                  «      t2        u r| j0                  d
   n| j0                  }t/        | j0                  «      t2        u r| j0                  d   nd }t        j                  «       }t5        j
                  | j6                  |||d¬«      }t        j                  «       }| j                   dk(  rwt8        j;                  d| j<                  › �«       t        j                  «       }t        j>                  | j<                  || j0                  g¬«      }t        j                  «       }t8        j;                  d||z
  › d�«       |S )N)NN¾   r   r   T)Útorch_dtyperF   r   >   r   r   é   úCannot recognize r   r   )ÚproviderÚprovider_optionsÚsession_optionsÚuse_io_bindingr   zLoading model from )Ú	providerszLoaded model in ú s) rH   Úhf_pt_model_pathÚ
model_nameÚtimer   Úfrom_pretrainedrU   rV   rW   rK   rT   rX   Úcompiler   ÚSessionOptionsr   Úenable_profilingÚregister_custom_ops_libraryr   ÚverboseÚlog_verbosity_levelÚlog_severity_levelrI   ÚtypeÚexecution_providerÚtupler   Úhf_ort_dir_pathrP   rQ   Úort_model_pathÚInferenceSession)r   ÚmodelÚsess_optionsÚ
start_timeÚend_timeÚsourcerd   re   s           r   Ú	get_modelr€   h   sH  € Ø$Ñ€Eˆ<Ø%Ñ€J�ð ×ÑÐ>Ñ>Ø*.×*?Ò*?�×&Ò&ÀTÇ_Á_ˆÜ—Y‘Y“[ˆ
Ü)×9Ñ9ØØ)-¯ªœŸš¼E¿M¹MØô
÷ ‰"ˆT×ÑÓ
 ð	 	ô
 —9‘9“;ˆà×Ñ /Ò1Ü—M‘M %Ó(‰Eà	×	Ñ	Ð 1Ñ	1Ü×)Ñ)Ó+ˆØ(,¯©ˆÔ%Ø×0Ñ0Ô1AÓ1CÔDØ�<Š<Ø/0ˆLÔ,Ø./ˆLÕ+ô Ð+¨D×,?Ñ,?Ð+@ÐAÓBÐBà×Ñ˜hÒ&ä15°d×6MÑ6MÓ1NÔRWÑ1W�4×*Ñ*¨1Ò-Ð]a×]tÑ]tˆÜ9=¸d×>UÑ>UÓ9VÔZ_Ñ9_˜4×2Ñ2°1Ò5ÐeiÐä—Y‘Y“[ˆ
Ü(×8Ñ8Ø× Ñ ØØ-Ø(Øô
ˆô —9‘9“;ˆà×Ñ˜eÒ#ä�‰Ð)¨$×*=Ñ*=Ð)>Ð?Ô@Ü—Y‘Y“[ˆ
Ü×$Ñ$Ø×ÑØØ×.Ñ.Ð/ô
ˆô
 —9‘9“;ˆä
‡K�KÐ" 8¨jÑ#8Ð"9¸Ð<Ô=à€Lr   c                 ó>  — t        |«      t        u r|d   n|}t        |«      t        u r|d   n|}t        j                  | j                  «      }| j
                  dk(  rt        | j                  «      n%t        | j                  t        j                  d¬«      }| j                  r ||«      }t        j                  |«       |D ]
  } ||«       Œ | j                  dk7  rt        j                  j                  |«       t!        j                   «       }	| j
                  dk(  rt        | j"                  «      n%t        | j"                  t        j                  d¬«      }
|
D ]
  } ||«       Œ | j                  dk7  rt        j                  j                  |«       t!        j                   «       }| j
                  dk7  rt        j                  d«       d}||	z
  | j"                  z  }||z  }t        j                  d	|› d
�«       t        j                  d|› d�«       y )Nr   rb   r   zWarm up)ÚfileÚdescÚcpuÚ	BenchmarkÚ z	Latency: ri   zThroughput: z qps)ru   rw   rV   rB   rX   rH   ÚrangeÚwarmup_runsr
   ÚsysÚstdoutrr   rP   rQ   ÚcudaÚsynchronizerl   Únum_runs)r   ÚfnrC   Úwarmup_inputsÚbenchmark_inputsÚtorch_deviceÚwarmup_rangeÚoutputsÚ_r}   Úbench_ranger~   Ú
batch_sizeÚlatencyÚ
throughputs                  r   rR   rR   ¨   sÅ  € Ü!% f£´Ñ!6�F˜1’I¸F€MÜ$(¨£L´EÑ$9�v˜a’y¸vÐÜ—<‘< × 2Ñ 2Ó3€Lð
 ×Ñ %Ò'ô 	ˆd×ÑÔä�D×$Ñ$¬3¯:©:¸IÔFð ð ‡|‚|Ù�]Ó#ˆÜ�‰�GÔàò ˆÙ
ˆ=Õðð ‡{�{�eÒÜ�
‰
×Ñ˜|Ô,Ü—‘“€Jð ×Ñ %Ò'ô 	ˆd�m‰mÔä�D—M‘M¬¯
©
¸ÔEð ð
 ò ˆÙ
ÐÕðð ‡{�{�eÒÜ�
‰
×Ñ˜|Ô,Ü�y‰y‹{€Hð ×Ñ˜eÒ#Ü�‰�BŒà€JØ˜*Ñ$¨¯©Ñ5€GØ˜gÑ%€Jä
‡K�K�)˜G˜9 BÐ'Ô(Ü
‡K�K�,˜z˜l¨$Ð/Ô0Ø
r   c                 ó0  — | j                   j                  «       › d| j                  › d| j                  › d|j                  j                  dd«      › d|› dt        j                  j                  «       d›�}d }| j                   dv rÝt        t        j                  t        j                  gdd¬«      5 }t        d«      5   ||«       d d d «       d d d «       j                  d¬	«      j                  | j                  | j                   ¬
«      }t"        j$                  j'                  | j(                  |› d�«      }t+        |d«      5 }|j-                  |«       d d d «       |S  ||«       |› d�}|S # 1 sw Y   Œ¬xY w# 1 sw Y   Œ°xY w# 1 sw Y   |S xY w)Nú-r”   z%Y-%m-%d_%H:%M:%Sr`   T)Ú
activitiesÚrecord_shapesÚprofile_memoryÚmodel_inferenceé   )Úgroup_by_stack_n)Úsort_byÚ	row_limitz.logÚwú.json)rH   ÚlowerÚ	precisionrB   Ú__name__ÚreplaceÚdatetimeÚnowr   r   ÚCPUÚCUDAr	   Úkey_averagesÚtableÚpt_filter_byÚpt_num_rowsÚosÚpathÚjoinÚ
log_folderr"   Úwrite)	r   rŽ   rC   Úinputs_typeÚprefixÚfilenameÚprofÚ	prof_datar)   s	            r   Ú
profile_fnr»   Ù   sª  € ð ×#Ñ#×)Ñ)Ó+Ð,¨A¨d¯n©nÐ-=¸Q¸t¿{¹{¸mÈ1ÈRÏ[É[×M`ÑM`ÐadÐfiÓMjÐLkÐklÐmxÐlyÐyzô  |D÷  |Mñ  |M÷  |Qñ  |Qó  |Sð  Teð  {fð  g€FØ€Hà×ÑÐ>Ñ>äÜ(×,Ñ,Ô.>×.CÑ.CÐDÐTXÐimô
ð 	àÜ Ð!2Ó3ñ Ù�6”
÷÷	ð
 ×%Ñ%°qÐ%Ó9×?Ñ?È×HYÑHYÐei×euÑeuÐ?Óvˆ	ä—7‘7—<‘< §¡°F°8¸4°ÓAˆÜ�(˜CÓ ð 	 AØ�G‰G�IÔ÷	ð €Oñ 	ˆ6Œ
ð �X˜UÐ#ˆà€O÷ð ú÷	ð 	ú÷	ð €Oús0   Â3E?Â?	E3ÃE?ÅFÅ3E<	Å8E?Å?FÆFc                 óÒ  ‡‡— t        j                  «       }t        j                  |«      }|j	                  d¬«        ‰‰«       t
        j                  d|j	                  d ¬«      › d�«       t        j                  «        t        j                  j                  «        t        | j                  dk7  ˆˆfd„| j                  ¬«       t        j                   j#                  «        y )Ngš™™™™™¹?)ÚintervalzCPU usage: ú%r„   c                  ó   •—  ‰ ‰«      S r   r6   )rŽ   rC   s   €€r   r8   zmeasure_fn.<locals>.<lambda>  s   ø€ ¹rÀ&»z€ r   )Úis_gpuÚfuncÚmonitor_type)r±   ÚgetpidÚpsutilÚProcessÚcpu_percentrP   rQ   ÚgcÚcollectrV   r‹   Úempty_cacher   rB   rÂ   r‰   rŠ   Úflush)r   rŽ   rC   ÚpidÚprocesss    ``  r   Ú
measure_fnrÍ   ö   s¢   ù€ ä
�)‰)‹+€CÜ�n‰n˜SÓ!€GØ×Ñ ÐÔ%á€v„JÜ
‡K�K�+˜g×1Ñ1¸4Ð1Ó@ÐAÀÐCÔDô ‡J�J„LÜ	‡J�J×ÑÔÜ˜4Ÿ;™;¨%Ñ/Ô7IÐX\×XiÑXiÕjô ‡J�J×ÑÕr   c                 ó‚  ‡ ‡‡
— ˆfd„Š
ˆ ˆ
fd„}|}‰ j                   dk(  r ||«       ‰ j                  �rt        ‰ ||d«      }‰ j                   dk(  �rò|d t        d«        }‰j                  j
                  j                  «       }|dz   }t        j                  j                  |«      rYt        j                  d|› d	|› �«       t        j                  |t        j                  j                  ‰ j                  |«      «       ‰j                  j
                  j                  «       }|d
z   }t        j                  j                  |«      rYt        j                  d|› d	|› �«       t        j                  |t        j                  j                  ‰ j                  |«      «       ‰j                   j
                  j                  «       }|dz   }t        j                  j                  |«      rYt        j                  d|› d	|› �«       t        j                  |t        j                  j                  ‰ j                  |«      «       y t        j#                  d«       t%        ‰ ||«        ||«      \  }}	t        j#                  dt        |d   «      › d�«       t        j#                  d|	d   › �«       t'        ‰ ||«       y )Nc                 ó,   •—  ‰j                   di | ¤Ž}|S )Nr6   )Úgenerate)rC   Úpredicted_idsr{   s     €r   Úget_pred_idsz&run_hf_inference.<locals>.get_pred_ids
  s   ø€ à&˜Ÿ™Ñ0¨Ñ0ˆØÐr   c                 ó²   •—  ‰| «      }g }t        ‰j                  «      D ]1  }|j                  ‰j                  j	                  |d¬«      d   «       Œ3 ||fS )NT©Úskip_special_tokensr   )r‡   r.   Úappendr>   Úbatch_decode)rC   rÑ   Útranscriptionr”   r   rÒ   s       €€r   Úgen_and_decz%run_hf_inference.<locals>.gen_and_dec  sb   ø€ á$ VÓ,ˆØˆÜ�t×0Ñ0Ó1ò 	jˆAØ× Ñ  §¡×!<Ñ!<¸]Ð`dÐ!<Ó!eÐfgÑ!hÕið	jà˜mÐ+Ð+r   r   zgen-and-decr   r¤   z-encoder.jsonú	Renaming ú to z-decoder.jsonz-decoder-with-past.jsonz
Evaluating PyTorch...úGenerated token length: r   ú tokensúTranscription: )rH   r   r»   ÚlenÚencoderÚsessionÚend_profilingr±   r²   ÚisfilerP   ÚwarningÚrenamer³   r´   ÚdecoderÚdecoder_with_pastrQ   rR   rÍ   )r   rC   r{   rÙ   Úgenerate_fnÚnew_lognameÚ
new_prefixÚold_lognamerÑ   rØ   rÒ   s   ` `       @r   Úrun_hf_inferencerì     s  ú€ ôõ
,ð  €Kà×Ñ˜oÒ-á�FÔà‡|ƒ|Ü   {°F¸MÓJˆØ×Ñ (Ó*à$ _¬¨G« }Ð5ˆJàŸ-™-×/Ñ/×=Ñ=Ó?ˆKØ$ Ñ6ˆKÜ�w‰w�~‰~˜kÔ*Ü—‘ ¨;¨-°t¸K¸=ÐIÔJÜ—	‘	˜+¤r§w¡w§|¡|°D·O±OÀ[Ó'QÔRàŸ-™-×/Ñ/×=Ñ=Ó?ˆKØ$ Ñ6ˆKÜ�w‰w�~‰~˜kÔ*Ü—‘ ¨;¨-°t¸K¸=ÐIÔJÜ—	‘	˜+¤r§w¡w§|¡|°D·O±OÀ[Ó'QÔRà×1Ñ1×9Ñ9×GÑGÓIˆKØ$Ð'@Ñ@ˆKÜ�w‰w�~‰~˜kÔ*Ü—‘ ¨;¨-°t¸K¸=ÐIÔJÜ—	‘	˜+¤r§w¡w§|¡|°D·O±OÀ[Ó'QÔRàô ‡K�KÐ)Ô*ÜˆD�+˜vÔ&Ù#.¨vÓ#6Ñ €M�=Ü
‡K�KÐ*¬3¨}¸QÑ/?Ó+@Ð*AÀÐIÔJÜ
‡K�K�/ -°Ñ"2Ð!3Ð4Ô5Üˆt�[ &Õ)r   c                 ó@  ‡ ‡— dˆ ˆfd„	}ˆfd„}ˆfd„}ˆ fd„}‰ j                   dk7  r|n|} ||«      }‰ j                  rxt        ‰ ||d«      }	‰j                  «       }
t        j                  d|
› d|	› �«       t        j                  |
t        j                  j                  ‰ j                  |	«      «       y t        j                  d	«       |}t        ‰ ||«        ||«      }‰ j                   dk7  r|j                  «       }|d
   }‰ j                  rt        j                  d|d
   d
   › �«       n_ ||d
   d
   «      }t        j                  dt        |«      › d�«       ‰ j                   j#                  |d
   d¬«      d
   }t%        |› «       t'        ‰ ||«       y )Nc                 ó‚  •— ‰j                  «       D �ch c]  }|j                  ’Œ }}t        | j                  «       «      }||z
  }t	        |«      r#t
        j                  d|› �«       t        d«      ‚||z
  }t	        |«      r#|D ]  }t
        j                  d|› d�«       | |= Œ  ‰j                  dk7  rƒ‰j                  «       }| j                  «       D ]  \  }	}
|j                  |	|
«       Œ ‰j                  «       D ]4  }|j                  |j                  ‰j                  ‰j                  ¬«       Œ6 |S | S c c}w )Nz(The following model inputs are missing: zEThere are missing inputs to the model. Please add them and try again.zRemoving unnecessary input 'z' from user provided inputsr„   )Údevice_typeÚ	device_id)r^   ÚnameÚsetÚkeysrß   rP   ÚerrorrI   rQ   rB   Ú
io_bindingrJ   Úbind_cpu_inputÚget_outputsÚbind_outputrð   )rC   ÚwarmupÚmodel_inputÚmodel_inputsÚuser_inputsÚmissing_inputsÚunnecessary_inputsÚunnecessary_inputrõ   rY   rZ   Úoutputr   r{   s               €€r   Úprepare_ort_inputsz-run_ort_inference.<locals>.prepare_ort_inputsI  sD  ø€ à<A×<LÑ<LÓ<NÖO¨[˜×(Ó(ÐOˆÐOÜ˜&Ÿ+™+›-Ó(ˆØ%¨Ñ3ˆÜˆ~ÔÜ�L‰LÐCÀNÐCSÐTÔUÜÐcÓdÐdð )¨<Ñ7ÐÜÐ!Ô"Ø%7ò .Ð!Ü—‘Ð:Ð;LÐ:MÐMhÐiÔjØÐ,Ñ-ð.ð
 �;‰;˜%ÒØ×)Ñ)Ó+ˆJØŸ™›ò 0‘��1Ø×)Ñ)¨!¨QÕ/ð0à×+Ñ+Ó-ò g�Ø×&Ñ& v§{¡{ÀÇÁÐW[×WeÑWeÐ&ÕfðgàÐàˆùò/ Ps   ”D<c                 ó*   •— ‰j                  | «       | S r   )Úrun_with_iobinding)rõ   r{   s    €r   Úwith_io_bindingz*run_ort_inference.<locals>.with_io_bindingd  s   ø€ à× Ñ  Ô,ØÐr   c                 ó,   •— ‰j                  d | «      }|S r   )Úrun)rC   r“   r{   s     €r   Úwithout_io_bindingz-run_ort_inference.<locals>.without_io_bindingi  s   ø€ à—)‘)˜D &Ó)ˆØˆr   c                 ó„   •— ‰j                   | v r0t        j                  | ‰j                   k(  «      d   d   }| d |dz    S | S )Nr   rb   )Úeos_token_idr#   Úwhere)r   Ú	first_endr   s     €r   Úhandle_outputz(run_ort_inference.<locals>.handle_outputn  sJ   ø€ Ø×Ñ Ñ&ÜŸ™ ¨4×+<Ñ+<Ñ!<Ó=¸aÑ@ÀÑCˆIØ˜/˜I¨™MÐ*Ð*àˆr   r„   Úe2erÚ   rÛ   z
Evaluating ONNX Runtime...r   rÞ   rÜ   rÝ   TrÔ   )F)rB   r   r»   râ   rP   rä   r±   rå   r²   r³   r´   rQ   rR   Úcopy_outputs_to_cpurS   rß   r>   r×   ÚprintrÍ   )r   rC   r{   r  r  r  r  rè   Ú
ort_inputsré   rë   Úort_evaluate_inputsÚort_outputsÚactual_outputrØ   s   ` `            r   Úrun_ort_inferencer  H  sz  ù€ öô6ô
ô
ð &*§[¡[°EÒ%9‘/Ð?Q€KÙ# FÓ+€Jà‡|‚|Ü   {°JÀÓFˆð ×)Ñ)Ó+ˆÜ�‰˜ ; -¨t°K°=ÐAÔBÜ
�	‰	�+œrŸw™wŸ|™|¨D¯O©O¸[ÓIÔJàô ‡K�KÐ.Ô/Ø$ÐäˆD�+Ð2Ô3Ù˜jÓ)€KØ‡{�{�eÒØ!×5Ñ5Ó7ˆØ˜a‘.€Kà×Òä�‰�o k°!¡n°QÑ&7Ð%8Ð9Õ:ñ & k°!¡n°QÑ&7Ó8ˆÜ�‰Ð.¬s°=Ó/AÐ.BÀ'ÐJÔKØŸ™×3Ñ3°KÀ±NÐX\Ð3Ó]Ð^_Ñ`ˆä��Ô!äˆt�[ *Õ-r   c                 ó¤   — | j                   dv rt        | ||«       y | j                   dk(  rt        | ||«       y t        d| j                   › �«      ‚)N>   r   r   r   r   rc   )rH   rì   r  rI   )r   rC   r{   s      r   Úrun_inferencer  š  sQ   € Ø×ÑÐHÑHÜ˜˜v uÕ-Ø	×	Ñ	 Ò	%Ü˜$ ¨Õ.äÐ+¨D×,?Ñ,?Ð+@ÐAÓBÐBr   c            	      ót  — t        j                  «       } | j                  ddt        dg d¢¬«       | j                  ddt        dd¬	«       | j                  d
dt        ddg d¢d¬«       | j                  dt        dd¬«       | j                  dt        dd¬«       | j                  dt        dd¬«       | j                  ddt        dd¬	«       | j                  ddt        t        j
                  j                  «       rdndddg¬«       | j                  d d!t        d"¬#«       | j                  d$d%t        d&¬#«       | j                  d'd(t        d)¬#«       | j                  d*t        d+¬#«       | j                  d,t        d-d.¬«       | j                  d/t        d0¬#«       | j                  d1t        d"¬#«       | j                  d2t        d3¬#«       | j                  d4t        d3¬#«       | j                  d5t        d6¬#«       | j                  d7t        d6¬#«       | j                  d8t        d9¬#«       | j                  d:t        d;d<¬«       | j                  d=t        d3d>¬«       | j                  d?t        d6d@¬«       | j                  dAdBdC¬D«       | j                  dEt        dFdG¬«       | j                  dHt        dIdJ¬«       | j                  dKdBdC¬D«       | j                  dLt        t        j                  j                  dM«      dN¬«       | j                  «       }t        j                  j                  |j                  «       t	        j                   |j                  «       |j"                  |_        dO|j&                  v rP|j"                  j)                  «       › dP�|_        |j*                  dQk(  r|j*                  dR|j,                  if|_        |j&                  dSk(  r|j.                  sJ dT«       ‚|j&                  dOk(  r|j0                  sJ dU«       ‚t3        j4                  |j6                  «      |_        |S )VNz-btz--benchmark-typeT)r   r   r   r   )ru   ÚrequiredÚchoicesz-mz--model-namez;Hugging Face name of model (e.g. 'openai/whisper-large-v2'))ru   r  Úhelpz-pz--precisionÚfp32)Úint4Úint8Úfp16r  zePrecision for model. For ONNX models, the model's precision should be set before running this script.)ru   r  Údefaultr  r  z--hf-pt-model-pathr†   zNPath to directory containing all PyTorch files (e.g. tokenizer, PyTorch model))ru   r  r  z--hf-ort-dir-pathzaPath to directory containing all ONNX files (e.g. tokenizer, encoder, decoder, decoder_with_past)z--ort-model-pathzPath to ONNX modelz-az--audio-pathz%Path to audio file for E2E evaluationz-dz--devicer‹   r„   )ru   r  r  z-idz--device-idr   )ru   r  z-wz--warmup-runsrŸ   z-nz
--num-runsé
   z--seedé   z--sampling-ratei€>  zSampling rate for audio (in Hz)z--max-lengthiÀ  z--min-lengthz--num-beamsrb   z--num-return-sequencesz--length-penaltyg      ð?z--repetition-penaltyz--no-repeat-ngram-sizeé   z--decoder-input-idsz[]zìThe forced decoder ids for generation. Format is [start token, timestamp token, language token, task token]. Default is [start token]. See `decoder_input_ids` in https://github.com/microsoft/Olive/tree/main/examples/whisper for details.z--logits-processorzLWhether to use timestamps logits processor or not (0 for false, 1 for true).z--temperaturez!Temperature value for generation.z	--profileFÚ
store_true)r  Úactionz--pt-filter-byÚself_cpu_time_totalz"What to filter PyTorch profiler byz--pt-num-rowsiè  z.Number of rows for PyTorch profiler to displayz	--verbosez--log-folderú.zFolder to cache log filesr   ÚExecutionProviderÚCUDAExecutionProviderrð   r   z,Please specify a path to `--hf-ort-dir-path`z+Please specify a path to `--ort-model-path`)ÚargparseÚArgumentParserÚadd_argumentÚstrrV   r‹   Úis_availableÚintÚfloatr±   r²   r³   Ú
parse_argsr#   ÚrandomÚseedÚmanual_seedrB   rÂ   rH   Úupperrv   rð   rx   ry   ÚastÚliteral_evalr2   )Úparserr   s     r   r0  r0  £  s6  € Ü×$Ñ$Ó&€Fà
×ÑØØÜØÚAð ô ð ×ÑØØÜØØJð ô ð ×ÑØØÜØØÚ0Øtð ô ð ×ÑØÜØØ]ð	 ô ð ×ÑØÜØØpð	 ô ð ×ÑØÜØØ!ð	 ô ð ×Ñ˜˜n´3ÀÐLsÐÔtØ
×ÑØØÜÜŸ*™*×1Ñ1Ô3‘¸Ø˜�ð ô ð ×Ñ˜˜}´3ÀÐÔBØ
×Ñ˜˜o´CÀÐÔCØ
×Ñ˜˜l´¸bÐÔAØ
×Ñ˜¤s°AÐÔ6ð ×ÑÐ)´¸UÐIjÐÔkð ×Ñ˜¬S¸#ÐÔ>Ø
×Ñ˜¬S¸!ÐÔ<Ø
×Ñ˜¬C¸ÐÔ;Ø
×ÑÐ0´sÀAÐÔFØ
×ÑÐ*´ÀÐÔDØ
×ÑÐ.´UÀCÐÔHØ
×ÑÐ0´sÀAÐÔFð ×ÑØÜØð |ð	 ô ð ×ÑØÜØØ[ð	 ô ð ×ÑØÜØØ0ð	 ô ð ×Ñ˜¨U¸<ÐÔHØ
×ÑØœsÐ,AÐHlð ô ð ×Ñ˜¬c¸4ÐFvÐÔwØ
×Ñ˜¨U¸<ÐÔHØ
×Ñ˜¬S¼"¿'¹'¿,¹,ÀsÓ:KÐRmÐÔnà×ÑÓ€Dô ‡I�I‡N�N�4—9‘9ÔÜ	×Ñ�d—i‘iÔ àŸ™€DÔà�×#Ñ#Ñ#Ø%)§[¡[×%6Ñ%6Ó%8Ð$9Ð9JÐ"KˆÔØ×"Ñ"Ð&=Ò=Ø'+×'>Ñ'>ÀÈdÏnÉnÐ@]Ð&^ˆDÔ#ð ×Ñ˜hÒ&Ø×#Ò#ÐSÐ%SÓSÐ#Ø×Ñ˜eÒ#Ø×"Ò"ÐQÐ$QÓQÐ"ô !×-Ñ-¨d×.DÑ.DÓE€DÔà€Kr   c                  ó2  — t        «       } t        | j                  «       t        j	                  | j
                  «       dt        j                  j                  _	        t        j                  | j                  «      }t        j                  | j                  «      }| j                  dk7  rd| j                  › �n| j                  }| j                   dk(  xs | j                   dv xr | j                  dk7  }t#        | d|«       t#        | d|«       t#        | d|«       t#        | d	d
«       t#        | d|j$                  «       t        j	                  d| j&                  › �«       t)        | «      }| j*                  dk(  r~|j-                  «       D �ch c]  }|j.                  ’Œ }}d|v | _        t#        | dd|v «       t#        | dd|v «       t#        | dd|v «       | j&                  g k(  r|j2                  g| _        t-        | «      }t5        | ||«       y c c}w )NTr„   zcuda:r  >   r  r  r>   rX   rU   rS   Fr	  zForced decoder prompt ids: r   r9   rM   r2   rN   r3   rO   r4   )r0  r   rr   rP   rQ   Ú__dict__rV   ÚbackendsÚcudnnÚ	benchmarkr   rm   rk   r   rB   rð   r¦   Úsetattrr	  r2   r€   rH   r^   rñ   rS   Údecoder_start_token_idr  )	r   Úconfigr>   rX   rU   r{   rú   Úort_model_inputsrC   s	            r   ÚmainrA  $  sÎ  € Ü‹<€DÜ�—‘ÔÜ
‡K�K�—‘ÔØ%)„E‡N�N×ÑÔ"ä×*Ñ*¨4¯?©?Ó;€FÜ ×0Ñ0°·±ÓA€IØ04·±¸uÒ0D�e˜DŸN™NÐ+Ñ,È$Ï+É+€MØ�~‰~ Ñ'Òh¨D¯N©NÐ>NÐ,NÒ,gÐSW×S^ÑS^ÐbgÑSg€HäˆD�+˜yÔ)ÜˆD�/ =Ô1ÜˆD�*˜hÔ'ÜˆDÐ$ eÔ,ÜˆD�. &×"5Ñ"5Ô6ä
‡K�KÐ-¨d×.DÑ.DÐ-EÐFÔGô �d‹O€EØ×Ñ˜eÒ#à@E×@PÑ@PÓ@RÖS°˜K×,Ó,ÐSÐÐSØ .Ð2BÐ BˆÔÜ�Ð-Ð/BÐFVÐ/VÔWÜ�Ð,Ð.@ÐDTÐ.TÔUÜ�Ð'¨Ð:JÐ)JÔKà×!Ñ! RÒ'Ø&,×&CÑ&CÐ%DˆDÔ"ä˜Ó€FÜ�$˜ Õ&ùò Ts   ÆHÚ__main__).r)  r5  r©   rÇ   Úloggingr±   r‰   rl   Únumpyr#   rÄ   rV   r   Úbenchmark_helperr   r   Úonnxruntime_extensionsr   Úoptimum.onnxruntimer   Útorch.profilerr   r   r	   Útqdmr
   Útransformersr   r   r   Úonnxruntimer   Ú	getLoggerr§   rP   Ú	Namespacer^   r€   rR   r»   rÍ   rì   r  r  r0  rA  r6   r   r   ú<module>rN     sÄ   ðó Û 
Û Û 	Û Û 	Û 
Û ã Û Û Û ß 9Ý 3Ý 8ß EÑ EÝ ß SÑ Sã à	ˆ×	Ñ	˜8Ó	$€ðE�X×'Ñ'ó EðP=�H×&Ñ&ó =ò@.òbò:ò$=*ò@O.òdCò~òB!'ðH ˆzÒÙ…Fð r   