Ë
    cQêjšI  ã                   óÈ   — 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mZ  ej                  e«      Zd„ Zd„ Zd„ Zd„ Zd	„ Zed
k(  r e«        yy)é    N)Úsetup_logger)ÚBenchmarkRecord)ÚWhisperConfigÚWhisperProcessorc                  óº  — t        j                  «       } | j                  ddt        dd¬«       | j                  ddd d¬	«       | j                  d
dd ddgd¬«       | j                  ddt        d¬«       | j                  ddt        d¬«       | j                  dddd¬«       | j                  dddd¬«       | j                  dt        d¬ «       | j                  d!t        d"¬ «       | j                  d#t        dd$¬«       | j                  d%t        dg d&¢d'¬(«       | j                  d)t        dd*d+gd,¬(«       | j                  d-t        d.d/¬0«       | j                  d1ddd2¬«       | j                  d3t        dd4¬0«       | j                  d5t        d d6¬0«       | j                  d7dd¬8«       | j                  «       }t        |d9|j                  j                  d:«      d;   j                  d<d=«      «       d>|j                  › d=|j                  › �}|j                  s||_        t        j                  |j                  d¬?«       |xj                  d@z  c_        |S )ANz-aú--audio-pathTz0Path to folder of audio files for E2E evaluation)ÚtypeÚrequiredÚhelpz-lz
--languagezLanguage of audio file)Údefaultr   z-tz--taskÚ
transcribeÚ	translatezTask to complete)r   Úchoicesr   z-wú--warmup-runsé   )r	   r   z-nú
--num-runsé
   z--hf-pt-eagerFÚ
store_truez,Benchmark in PyTorch without `torch.compile`)r   Úactionr   z--hf-pt-compilez)Benchmark in PyTorch with `torch.compile`ú--hf-ort-dir-pathzDPath to folder containing ONNX models for Optimum + ORT benchmarking)r	   r   ú--ort-model-pathz'Path to ONNX model for ORT benchmarkingú--model-namez9Model name in Hugging Face (e.g. openai/whisper-large-v2)ú--precision)Úint4Úint8Úfp16Úfp32zPrecision to run model)r	   r
   r   r   ú--deviceÚcpuÚcudazDevice to benchmark modelsú--device-idr   zGPU device ID)r	   r   r   z	--verbosezPrint detailed logsz	--timeoutz8Number of mins to attempt the benchmark before moving onú--log-folderz'Path to folder to save logs and resultsú--tune)r   r   Ú
model_sizeú/éÿÿÿÿú.ú-z./)Úexist_oké<   )ÚargparseÚArgumentParserÚadd_argumentÚstrÚintÚ
parse_argsÚsetattrÚ
model_nameÚsplitÚreplacer$   Ú	precisionÚ
log_folderÚosÚmakedirsÚtimeout)ÚparserÚargsÚlog_folder_names      úz/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/onnxruntime/transformers/models/whisper/benchmark_all.pyÚget_argsr>      sÐ  € Ü×$Ñ$Ó&€Fà
×ÑØØÜØØ?ð ô ð ×ÑØØØØ%ð	 ô ð ×ÑØØØØ˜{Ð+Øð ô ð ×ÑØØÜØð	 ô ð ×ÑØØÜØð	 ô ð ×ÑØØØØ;ð	 ô ð ×ÑØØØØ8ð	 ô ð ×ÑØÜØSð ô ð ×ÑØÜØ6ð ô ð ×ÑØÜØØHð	 ô ð ×ÑØÜØÚ0Ø%ð ô ð ×ÑØÜØØ˜�Ø)ð ô ð ×ÑØÜØØð	 ô ð ×ÑØØØØ"ð	 ô ð ×ÑØÜØØGð	 ô ð ×ÑØÜØØ6ð	 ô ð ×Ñ˜¨%¸ÐÔEà×ÑÓ€DäˆD�, §¡× 5Ñ 5°cÓ :¸2Ñ >× FÑ FÀsÈCÓ PÔQØ˜4Ÿ?™?Ð+¨1¨T¯^©^Ð,<Ð=€OØ�?Š?Ø)ˆŒÜ‡K�K�—‘¨$Õ/ð 	‡L‚L�BÑ…Là€Kó    c                 óš  — g }d }d}d}d}d}d\  }	}
d\  }}d\  }}}}d\  }}d}d}d	}d
}t        |«      5 }|D �]ø  }|j                  dd«      }||v rd}n||v rd}n
||v s||v rd}||v r't        |t        |«      |j	                  d«       «      }ŒY||v r>t        |t        |«      |j	                  d«       «      }|dk(  r||}
}	d }|dk(  sŒ”||}}d }Œ›||v r1t        |t        |«      |j	                  d«       «      }||z  }|dz  }ŒÐ||v sŒÕd|v r3t        ||j	                  d«      dz   |j	                  d«       «      dz  }nY||j                  |«      t        |«      z   d  j                  dd«      }t        j                  |«      |    d   }t        |«      dz  }|	r|	nd|r|ndz   |r|ndz   }|d   }|r||z  nd}t        j                  d|› d�«       t        j                  d|› d�«       t        j                  d|› �«       |||	|
|r|nd|r|nd|||||g
z   }|j                  |«       �Œû 	 d d d «       |S # 1 sw Y   |S xY w)NzLoad audio: zFeature extraction: zEvaluating PyTorch...zEvaluating ONNX Runtime...)NN)NNNNz	Latency: zThroughput: zGenerated token length: zpeak=ú
Ú z
load-audiozfeature-extractionÚprocessú éè  ÚCPUú=é   z MBú'ú"Úmax_used_MBr   r&   zTotal latency: z szAudio duration: zReal-time factor: )Úopenr4   ÚfloatÚlenÚrfindr/   ÚfindÚjsonÚloadsÚloggerÚinfoÚappend) Ú	device_idÚlog_fileÚbase_resultsÚentriesÚstepÚload_audio_patternÚfeat_ext_patternÚpytorch_patternÚonnxruntime_patternÚload_audio_latency_sÚload_audio_throughput_sÚfeat_ext_latency_sÚfeat_ext_throughput_sÚtoken_lengthÚ	latency_sÚper_token_latency_sÚper_token_latency_msÚ
throughputÚmemoryÚlatency_patternÚthroughput_patternÚtoken_length_patternÚmemory_patternÚfÚ
input_lineÚlineÚpeakÚusageÚtotal_latencyÚaudio_durationÚrtfÚentrys                                    r=   Úprocess_log_filerv   œ   s  € Ø€Gð €DØ'ÐØ-ÐØ-€OØ6Ðà4>Ñ1ÐÐ1Ø0:Ñ-ÐÐ-ØI_ÑF€L�)Ð0Ð2FØ#Ñ€J�ð "€OØ'ÐØ5ÐØ€Nä	ˆh‹ð A&˜1Øó @	&ˆJØ×%Ñ% d¨BÓ/ˆDð " TÑ)Ø#‘Ø! TÑ)Ø+‘Ø  DÑ(Ð,?À4Ñ,GØ �ð  $Ñ&Ü! $¤s¨?Ó';¸d¿j¹jÈ»oÐ"NÓO‘	Ø# tÑ+Ü" 4¬Ð,>Ó(?À$Ç*Á*ÈSÃ/Ð#RÓS�
Ø˜<Ò'ØDMÈzÐ*AÐ(Ø�DØÐ/Ó/Ø@IÈ:Ð(=Ð&Ø‘DØ%¨Ñ-Ü" 4¬Ð,@Ó(AÀDÇJÁJÈsÃOÐ#TÓU�Ø&/°,Ñ&>Ð#Ø':¸TÑ'AÑ$Ø 4Ò'Ø˜D‘=ô # 4¨¯
©
°3«¸!Ñ(;¸d¿j¹jÈÓ>OÐ#PÓQÐTXÑX‘Fð   §	¡	¨.Ó 9¼CÀÓ<OÑ OÐ QÐR×ZÑZÐ[^Ð`cÓd�DÜ ŸJ™J tÓ,¨YÑ7¸ÑF�EÜ" 5›\¨DÑ0�Fñ
 .BÑ)ÀqÙ-?Ñ)ÀQñHá$-‘y°1ñ6ð ð
 ".¨bÑ!1�Ù:H�} ~Ò5Èb�Ü—‘˜o¨m¨_¸BÐ?Ô@Ü—‘Ð.¨~Ð.>¸bÐAÔBÜ—‘Ð0°°Ð6Ô7ð %Ø Ø(Ø+Ù*<Ñ&À"Ù-BÑ)ÈØØ(ØØØð(ñ �ð —‘˜uÖ%ñA@	&÷A&ðF €N÷GA&ðF €Nús   ¶BI ÃA I ÄD'I É I
c           	      ó$  — dd l }|j                  | g d¢¬«      }|d   j                  d«      |d<   |d   j                  d«      |d<   |d   j                  d«      |d<   |d	   j                  d«      |d	<   |d
   j                  d«      |d
<   |d   j                  d«      |d<   |d   j                  d«      |d<   |d   j                  d«      |d<   |d   j                  d«      |d<   |d   j                  d«      |d<   |d   j                  d«      |d<   |d   j                  d«      |d<   |d   j                  d«      |d<   dd l}|j                  }t        |D �cg c],  }|j                  dv sŒ|j                  › d|j                  › �‘Œ. c}«      }d}d}	|r.|d   j                  d«      d   }|d   j                  d«      d   }	g }
|j                  «       D �]×  \  }}|d   dk(  rt        |d   |d   |d   |d   ||	«      }n8t        |d   |d   |d   |d   t        j                  t        j                  «      }|d   |j                  j                  d<   |d   |j                  _        |d   |j                  _        |d   |j$                  j                  d<   |d	   |j$                  j                  d<   |d
   |j$                  j                  d <   |d   |j$                  j                  d!<   |d   |j$                  j                  d"<   |d   |j$                  j                  d#<   |d   |j$                  j                  d$<   |d   |j$                  j                  d%<   |d   d&z  |j$                  _        |d   |j$                  _        |d   |j$                  _        |
j-                  |«       �ŒÚ t        j.                  ||
«       t        j0                  |j3                  d'd(«      |
«       t4        j7                  d)|› d*�«       y c c}w )+Nr   )úWarmup RunsúMeasured Runsú
Model NameÚEngineÚ	PrecisionÚDeviceú
Audio FileúDuration (s)úToken LengthúLoad Audio Latency (s)úLoad Audio Throughput (qps)úFeature Extractor Latency (s)ú"Feature Extractor Throughput (qps)úLatency (s)úPer Token Latency (ms/token)úThroughput (qps)úMemory (GB)úReal Time Factor (RTF))Úcolumnsrx   r/   ry   r   rM   r€   r�   r‚   rƒ   r„   r…   r†   r‡   rˆ   r‰   )Úonnxruntimezonnxruntime-gpuz==rB   rH   r{   r‹   rz   r|   r}   r~   Ú
audio_fileÚdurationrc   Úload_audio_latencyÚload_audio_throughputÚfeature_extractor_latency_sÚ feature_extractor_throughput_qpsrf   rt   rE   ú.csvz.jsonzResults saved in ú!)ÚpandasÚ	DataFrameÚastypeÚpkg_resourcesÚworking_setÚsortedÚkeyÚversionr3   Úiterrowsr   ÚtorchÚ__name__Ú__version__ÚconfigÚ
customizedÚwarmup_runsÚmeasured_runsÚmetricsÚlatency_ms_meanÚthroughput_qpsÚmax_memory_usage_GBrU   Úsave_as_csvÚsave_as_jsonr4   rS   rT   )ÚresultsÚfilenameÚpdÚdfr—   Úinstalled_packagesÚiÚinstalled_packages_listÚort_pkg_nameÚort_pkg_versionÚrecordsÚ_ÚrowÚrecords                 r=   Úsave_resultsr·   ÷   sC  € Ûà	�‰Øò
ð 
ó 
€Bð2 ˜=Ñ)×0Ñ0°Ó7€B€}ÑØ˜_Ñ-×4Ñ4°UÓ;€B€ÑØ˜NÑ+×2Ñ2°7Ó;€B€~ÑØ˜NÑ+×2Ñ2°5Ó9€B€~ÑØ#%Ð&>Ñ#?×#FÑ#FÀwÓ#O€BÐÑ Ø(*Ð+HÑ(I×(PÑ(PÐQXÓ(Y€BÐ$Ñ%Ø*,Ð-LÑ*M×*TÑ*TÐU\Ó*]€BÐ&Ñ'Ø/1Ð2VÑ/W×/^Ñ/^Ð_fÓ/g€BÐ+Ñ,Ø˜=Ñ)×0Ñ0°Ó9€B€}ÑØ)+Ð,JÑ)K×)RÑ)RÐSZÓ)[€BÐ%Ñ&ØÐ 2Ñ3×:Ñ:¸7ÓC€BÐÑØ˜=Ñ)×0Ñ0°Ó9€B€}ÑØ#%Ð&>Ñ#?×#FÑ#FÀwÓ#O€BÐÑ ó à&×2Ñ2ÐÜ$Ø*<Öl QÀÇÁÐIkÒ@kˆA�E‰Eˆ7�"�Q—Y‘Y�KÒ	 ÒlóÐð €LØ€OÙØ.¨qÑ1×7Ñ7¸Ó=¸aÑ@ˆØ1°!Ñ4×:Ñ:¸4Ó@ÀÑCˆð €GØ—+‘+“-ó ‰ˆˆ3Øˆx‰=˜MÒ)Ü$Ø�LÑ! 3 {Ñ#3°S¸±]ÀCÈÁMÐS_Ðapó‰Fô %Ø�LÑ! 3 {Ñ#3°S¸±]ÀCÈÁMÔSX×SaÑSaÔch×ctÑctóˆFð 25°\Ñ1Bˆ�‰× Ñ  Ñ.Ø$'¨Ñ$6ˆ�‰Ô!Ø&)¨/Ñ&:ˆ�‰Ô#à03°NÑ0Cˆ�‰×!Ñ! *Ñ-Ø47¸Ñ4Gˆ�‰×!Ñ! .Ñ1Ø:=Ð>VÑ:Wˆ�‰×!Ñ!Ð"6Ñ7Ø=@ÐA^Ñ=_ˆ�‰×!Ñ!Ð"9Ñ:ØCFÐGfÑCgˆ�‰×!Ñ!Ð"?Ñ@ØHKÐLpÑHqˆ�‰×!Ñ!Ð"DÑEØ<?Ð@^Ñ<_ˆ�‰×!Ñ!Ð"8Ñ9Ø+.Ð/GÑ+Hˆ�‰×!Ñ! %Ñ(à),¨]Ñ);¸dÑ)Bˆ�‰Ô&Ø(+Ð,>Ñ(?ˆ�‰Ô%Ø-0°Ñ-?ˆ�‰Ô*à�‰�vÖð5ô8 ×Ñ ¨'Ô2Ü× Ñ  ×!1Ñ!1°&¸'Ó!BÀGÔLÜ
‡K�KÐ# H :¨QÐ/Õ0ùòQ 	ms   ÅPÅ2Pc                 óp  — |› dt         j                   j                  «       d›d�}t        j                  j	                  | j
                  |«      }t        |d«      5 }t        j                  |||¬«      }	 |j                  | j                  «       d d d «       t        j                  d«       | j                  | j                   | j"                  || j$                  | j&                  ||g}	t)        | j*                  ||	«      }
|
S # t        j                  $ r |j                  «        Y Œ—w xY w# 1 sw Y   ŒœxY w)Nr´   ú%Y-%m-%d_%H:%M:%Sz.logÚw)ÚstdoutÚstderrz Gathering data from log files...)ÚdatetimeÚnowr7   ÚpathÚjoinr6   rL   Ú
subprocessÚPopenÚwaitr9   ÚTimeoutExpiredÚkillrS   rT   r¢   Únum_runsr2   r5   Údevicerv   rV   )r;   Úbenchmark_cmdÚenginerŒ   r�   Úlog_filenameÚlog_pathrW   rC   rX   rª   s              r=   Ú	benchmarkrÌ   Q  s  € Ø�X˜Qœx×0Ñ0×4Ñ4Ó6Ð7HÐIÈÐN€LÜ�w‰w�|‰|˜DŸO™O¨\Ó:€HÜ	ˆh˜Ó	ð  Ü×"Ñ" =¸È(ÔSˆð	Ø�L‰L˜Ÿ™Ô&÷ô ‡K�KÐ2Ô3à×ÑØ�‰Ø�‰ØØ�‰Ø�‰ØØð	€Lô ˜tŸ~™~¨x¸ÓF€Gà€Nøô# ×(Ñ(ò 	Ø�L‰LŽNð	ú÷	ð ús*   ÁD,Á6DÄ#D)Ä&D,Ä(D)Ä)D,Ä,D5c                  ó(  — t        «       } t        | j                  «       t        j	                  | j
                  «       dt        j                  j                  _	        t        j                  | j                  «      }t        j                  | j                  «      }|j                  | j                  | j                   ¬«      }|j"                  g|D �cg c]  }|d   ‘Œ	 c}z   }| j                  r| j                   rdt%        |«      gng }| j                  r| j                   rdt%        |«      gng }| j&                  rdgng }g }	t)        j*                  | j,                  «      D �]j  }
t(        j.                  j1                  | j,                  |
«      }	 t3        j4                  |¬«      }t        j	                  d|› d�«       | j:                  r°dddd|ddd| j                  d| j<                  d| j>                  dt%        | j@                  «      dt%        | jB                  «      dt%        | jD                  «      d| jF                  g|z   }t        j	                  d«       t        | |d|
|«      }|	jI                  |«       | jJ                  r°dddd|ddd| j                  d| j<                  d| j>                  dt%        | j@                  «      dt%        | jB                  «      dt%        | jD                  «      d| jF                  g|z   }t        j	                  d«       t        | |d|
|«      }|	jI                  |«       | jL                  r¼dddd|dd d!| jL                  d| j                  d| j<                  d| j>                  dt%        | j@                  «      dt%        | jB                  «      dt%        | jD                  «      d| jF                  g|z   }t        j	                  d"«       t        | |d#|
|«      }|	jI                  |«       | jN                  s�Œ¬dddd|dd$d%| jN                  d| j                  d| j<                  d| j>                  dt%        | j@                  «      dt%        | jB                  «      dt%        | jD                  «      d| jF                  g|z   |z   }t        j	                  d&«       t        | |d'|
|«      }|	jI                  |«       �Œm | jP                  › d(| j<                  › d)tR        jR                  jU                  «       d*›d+�}tW        |	t(        j.                  j1                  | jF                  |«      «       y c c}w # t6        $ r@}d}t        j9                  d|› �d¬	«       t        j9                  d
|
› d�«       Y d }~�Œãd }~ww xY w),NT)ÚlanguageÚtaskrH   z--decoder-input-idsr#   )r¿   r&   z@An error occurred while trying to calculate the audio duration: )Úexc_infozJIf you get an error that says:
	soundfile.LibsndfileError: Error opening 'zt': File contains data in an unknown format.
you may not have installed `ffmpeg` in addition to installing `librosa`.zTesting z...Úpythonz-mzmodels.whisper.benchmarkr   z--benchmark-typezhf-pt-eagerr   r   r   r!   r   r   r"   z'Benchmark PyTorch without torch.compilezpytorch-eagerzhf-pt-compilez$Benchmark PyTorch with torch.compilezpytorch-compilezhf-ortr   z Benchmark Optimum + ONNX Runtimezoptimum-ortÚortr   zBenchmark ONNX Runtimer‹   r(   r´   r¹   r’   ),r>   r   ÚverboserS   rT   Ú__dict__r�   ÚbackendsÚcudnnrÌ   r   Úfrom_pretrainedr2   r   Úget_decoder_prompt_idsrÎ   rÏ   Údecoder_start_token_idr.   Útuner7   ÚlistdirÚ
audio_pathr¿   rÀ   ÚlibrosaÚget_durationÚ	ExceptionÚwarningÚhf_pt_eagerr5   rÇ   rV   r¢   rÆ   r6   ÚextendÚhf_pt_compileÚhf_ort_dir_pathÚort_model_pathr$   r½   r¾   r·   )r;   r    Ú	processorÚhf_forced_decoder_idsÚtoken_idÚort_forced_decoder_idsÚhf_decoder_input_ids_cmdÚort_decoder_input_ids_cmdÚort_tune_cmdÚall_resultsrŒ   rÜ   r�   ÚerÈ   rª   Úcsv_files                    r=   Úmainrð   l  s/  € Ü‹:€DÜ�—‘ÔÜ
‡K�K�—‘ÔØ%)„E‡N�N×ÑÔ"ä×*Ñ*¨4¯?©?Ó;€FÜ ×0Ñ0°·±ÓA€Ið &×<Ñ<ÀdÇmÁmÐZ^×ZcÑZcÐ<ÓdÐØ$×;Ñ;Ð<Ð\qÖ?rÐPXÀÈÃÒ?rÑrÐà?C¿}º}ÐQU×QZÒQZÐ	¤Ð$9Ó :Ñ;Ð`bð ð AEÇÂÐRV×R[ÒR[Ð	¤Ð$:Ó ;Ñ<Ðacð ð "&§¢�H‘:°€Là€KÜ—j‘j §¡Ó1ó F(ˆ
Ü—W‘W—\‘\ $§/¡/°:Ó>ˆ
ð	Ü×+Ñ+°Ô<ˆHô 	�‰�h˜z˜l¨#Ð.Ô/ð ×ÒàØØ*ØØØ"ØØØ—‘ØØ—‘ØØ—‘ØÜ�D—N‘NÓ#ØÜ�D×$Ñ$Ó%ØÜ�D—M‘MÓ"ØØ—‘ð+ð, )ñ-)ˆMô. �K‰KÐAÔBÜ  m°_ÀjÐRZÓ[ˆGØ×Ñ˜wÔ'ð ×ÒàØØ*ØØØ"ØØØ—‘ØØ—‘ØØ—‘ØÜ�D—N‘NÓ#ØÜ�D×$Ñ$Ó%ØÜ�D—M‘MÓ"ØØ—‘ð+ð, )ñ-)ˆMô. �K‰KÐ>Ô?Ü  mÐ5FÈ
ÐT\Ó]ˆGØ×Ñ˜wÔ'ð ×ÒàØØ*ØØØ"ØØ#Ø×$Ñ$ØØ—‘ØØ—‘ØØ—‘ØÜ�D—N‘NÓ#ØÜ�D×$Ñ$Ó%ØÜ�D—M‘MÓ"ØØ—‘ð/ð0 )ñ1)ˆMô2 �K‰KÐ:Ô;Ü  m°]ÀJÐPXÓYˆGØ×Ñ˜wÔ'ð ×Ôð ØØ.Ø"ØØ&ØØ&Ø×'Ñ'Ø"Ø—O‘OØ!Ø—N‘NØØ—K‘KØ!Ü˜Ÿ™Ó'Ø#Ü˜×(Ñ(Ó)Ø Ü˜Ÿ™Ó&Ø"Ø—O‘Oð/ð2 ,ñ3,ð4 ñ5ð ô: �K‰KÐ0Ô1Ü  m°]ÀJÐPXÓYˆGØ×Ñ˜wÖ'ðMF(ðP —/‘/Ð" ! D§N¡NÐ#3°1´X×5FÑ5F×5JÑ5JÓ5LÐM^Ð4_Ð_cÐd€HÜ�œbŸg™gŸl™l¨4¯?©?¸HÓEÕFùòg @søô ò 	ØˆHÜ�N‰NÐ]Ð^_Ð]`ÐaÐlpˆNÔqÜ�N‰NØ^Ð_iÐ^jð  k`ð  a÷ò ûð	ús   ÃUÆUÕ	VÕ5VÖVÚ__main__)r+   r½   rQ   Úloggingr7   rÁ   rÝ   r�   Úbenchmark_helperr   r¤   r   Útransformersr   r   Ú	getLoggerrž   rS   r>   rv   r·   rÌ   rð   © r?   r=   ú<module>r÷      sp   ðó Û Û Û Û 	Û ã Û Ý )Ý #ß 8à	ˆ×	Ñ	˜8Ó	$€òBòJXòvW1òtò6^GðB ˆzÒÙ…Fð r?   