§
    kŠtjSW  ã                   ó4  — 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 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 d dlZ ej        e¦  «        Z G d	„ d
e¦  «        Z G d„ de¦  «        Z G d„ d¦  «        Zdej        iZddddddi fd„Z d*d„Z!d+d„Z"d„ Z#d„ Z$d„ Z%d„ Z&d,d„Z'ej(        d fd„Z)d„ Z*d-d„Z+de,e-e.ef                  dz  fd „Z/ G d!„ d"e¦  «        Z0 G d#„ d$e0¦  «        Z1 G d%„ d&e0¦  «        Z2d.d(„Z3d)„ Z4dS )/é    N)ÚABCÚabstractmethod)ÚThreadPoolExecutor)Údatetime)ÚEnum)Úsleep)ÚAny)Úversionc                   ó$   — e Zd ZdZdZdZdZd„ ZdS )Ú	PrecisionÚfp32Úfp16Úint8Úint4c                 ó   — | j         S ©N©Úvalue©Úselfs    úg/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/onnxruntime/transformers/benchmark_helper.pyÚ__str__zPrecision.__str__%   ó
   € ØŒzÐó    N)Ú__name__Ú
__module__Ú__qualname__ÚFLOAT32ÚFLOAT16ÚINT8ÚINT4r   © r   r   r   r      s7   € € € € € Ø€GØ€GØ€DØ€Dðð ð ð ð r   r   c                   ó    — e Zd ZdZdZdZd„ ZdS )ÚOptimizerInfoÚno_optÚby_ortÚ	by_scriptc                 ó   — | j         S r   r   r   s    r   r   zOptimizerInfo.__str__0   r   r   N)r   r   r   ÚNOOPTÚBYORTÚBYSCRIPTr   r"   r   r   r$   r$   )   s4   € € € € € ð €EØ€EØ€Hðð ð ð ð r   r$   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚConfigModifierc                 ó   — || _         d S r   ©Ú
num_layers)r   r0   s     r   Ú__init__zConfigModifier.__init__5   s   € Ø$ˆŒˆˆr   c                 ó�  — | j         €d S t          |d¦  «        r.| j         |_        t                               d| j         › �¦  «         t          |d¦  «        r.| j         |_        t                               d| j         › �¦  «         t          |d¦  «        r0| j         |_        t                               d| j         › �¦  «         d S d S )NÚnum_hidden_layersz6Modifying pytorch model's number of hidden layers to: Úencoder_layersz7Modifying pytorch model's number of encoder layers to: zdecoder_layers z7Modifying pytorch model's number of decoder layers to: )r0   Úhasattrr3   ÚloggerÚinfor4   Údecoder_layers)r   Úconfigs     r   ÚmodifyzConfigModifier.modify8   sØ   € ØŒ?Ð"ØˆFÝ�6Ð.Ñ/Ô/ð 	dØ'+¤ˆFÔ$Ý�KŠKÐbÐQUÔQ`ÐbÐbÑcÔcÐcÝ�6Ð+Ñ,Ô,ð 	eØ$(¤OˆFÔ!Ý�KŠKÐcÐRVÔRaÐcÐcÑdÔdÐdÝ�6Ð,Ñ-Ô-ð 	eØ$(¤OˆFÔ!Ý�KŠKÐcÐRVÔRaÐcÐcÑdÔdÐdÐdÐdð	eð 	er   c                 ó   — | j         S r   r/   r   s    r   Úget_layer_numzConfigModifier.get_layer_numE   s
   € ØŒÐr   N)r   r   r   r1   r:   r<   r"   r   r   r-   r-   4   sD   € € € € € ð%ð %ð %ðeð eð eðð ð ð ð r   r-   Úfloat32TéÿÿÿÿFc	                 óÀ  ‡— t          j        ¦   «         }	|rt           j        j        |	_        nt           j        j        |	_        |rd|	_        |dk    r)||	_        t           	                    d|	j        › �¦  «         |rd|	_
        nd|	_
        |t          j        ¦   «         v r|g}
nE|r@|dk    rddg}
n8|dk    rd	dg}
n-|d
k    s|€ddg}
n |dk    rg d¢}
nt          d|› �¦  «        ‚dg}
‰rˆfd„|
D ¦   «         }
|r|	                     dd¦  «         d }	 t          j        | |	|
¬¦  «        }n0# t          $ r# t                               d| › d|
› �¦  «         Y nw xY w|S )NTr   z%Session option: intra_op_num_threads=é   ÚdmlÚDmlExecutionProviderÚCPUExecutionProviderÚmigraphxÚMIGraphXExecutionProviderÚcudaÚCUDAExecutionProviderÚtensorrt)ÚTensorrtExecutionProviderrG   rC   z)The execution provider is not supported: c                 ó0   •— g | ]}|‰v r
|‰|         fn|‘ŒS r"   r"   )Ú.0ÚnameÚprovider_optionss     €r   ú
<listcomp>z.create_onnxruntime_session.<locals>.<listcomp>…   s6   ø€ ÐpÐpÐpÐ^b°tÐ?OÐ7OÐ7O�dÐ,¨TÔ2Ð3Ð3ÐUYÐpÐpÐpr   z(mlas.enable_gemm_fastmath_arm64_bfloat16Ú1)Ú	providerszFailed to create session for z with providers=)ÚonnxruntimeÚSessionOptionsÚGraphOptimizationLevelÚORT_ENABLE_ALLÚgraph_optimization_levelÚORT_ENABLE_BASICÚenable_profilingÚintra_op_num_threadsr6   ÚdebugÚlog_severity_levelÚget_available_providersÚRuntimeErrorÚadd_session_config_entryÚInferenceSessionÚ	ExceptionÚ	exception)Úonnx_model_pathÚuse_gpuÚproviderÚenable_all_optimizationÚnum_threadsrW   ÚverboseÚ(enable_mlas_gemm_fastmath_arm64_bfloat16rM   Úsess_optionsrP   Úsessions           `   r   Úcreate_onnxruntime_sessionrj   O   s  ø€ õ Ô-Ñ/Ô/€Làð dÝ0;Ô0RÔ0aˆÔ-Ð-å0;Ô0RÔ0cˆÔ-àð -Ø(,ˆÔ%à�Q‚€Ø,7ˆÔ)Ý�ŠÐ`¸\Ô=^Ð`Ð`ÑaÔaÐaàð ,Ø*+ˆÔ'Ð'à*+ˆÔ'à•;Ô6Ñ8Ô8Ð8Ð8Ø�Jˆ	ˆ	Ø	ð -Ø�uÒÐØ/Ð1GÐHˆIˆIØ˜Ò#Ð#à+Ø&ðˆIˆIð ˜ÒÐ 8Ð#3Ø0Ð2HÐIˆIˆIØ˜Ò#Ð#ðð ð ˆIˆIõ ÐUÈ8ÐUÐUÑVÔVÐVà+Ð,ˆ	àð qØpÐpÐpÐpÐfoÐpÑpÔpˆ	à/ð _Ø×-Ò-Ð.XÐZ]Ñ^Ô^Ð^à€GðgÝÔ.¨ÀÐXaÐbÑbÔbˆˆøÝð gð gð gÝ×ÒÐe¸ÐeÐeÐZcÐeÐeÑfÔfÐfÐfÐfðgøøøð €Ns   ÄD. Ä.*EÅEc                 óð   — | r"t          j        dt           j        ¬¦  «         d S t          j        dt           j        ¬¦  «         t          j        d¦  «                             t           j        ¦  «         d S )Nz8[%(filename)s:%(lineno)s - %(funcName)20s()] %(message)s)ÚformatÚlevelz%(message)sÚtransformers)ÚloggingÚbasicConfigÚDEBUGÚINFOÚ	getLoggerÚsetLevelÚWARNING)rf   s    r   Úsetup_loggerrv   “   sx   € Øð DÝÔØMÝ”-ð	
ñ 	
ô 	
ð 	
ð 	
ð 	
õ
 	Ô =½¼ÐEÑEÔEÐEÝÔ˜.Ñ)Ô)×2Ò2µ7´?ÑCÔCÐCÐCÐCr   c                 óÖ  — | r3t           j                             | ¦  «        st          j        | ¦  «         |r3t           j                             |¦  «        st          j        |¦  «         |re|dk    r dt	          j        ¦   «         v s
J d¦   «         ‚n?t          t	          j        ¦   «         ¦  «                             ddg¦  «        r
J d¦   «         ‚t           	                    dt          j        › �¦  «         t           	                    dt          j        › �¦  «         t           	                    d	t          j        › �¦  «         t          j        t          j        ¦  «        t          j        d
¦  «        k    sJ ‚t          j        t          j        ¦  «        t          j        d¦  «        k    sJ ‚t          j        t          j        ¦  «        t          j        d
¦  «        k    sJ ‚d S )NrA   rB   zBPlease install onnxruntime-directml package to test GPU inference.rG   rE   zSPlease install onnxruntime-gpu package, or install migraphx, to test GPU inference.zPyTorch Version:zTransformers Version:zOnnxRuntime Version:z1.10.0z4.12.0)ÚosÚpathÚexistsÚmakedirsrQ   r[   ÚsetÚ
isdisjointr6   r7   ÚtorchÚ__version__rn   r
   Úparse)Ú	cache_dirÚ
output_dirrb   rc   s       r   Úprepare_environmentrƒ   ž   sÄ  € Øð �œŸš¨	Ñ2Ô2ð Ý
Œ�IÑÔÐàð  �"œ'Ÿ.š.¨Ñ4Ô4ð  Ý
Œ�JÑÔÐàð 	eØ�uÒÐØ)­[Ô-PÑ-RÔ-RÐRÐRÐRØTñ SÔRÐRÐRõ
 �;Ô>Ñ@Ô@ÑAÔA×LÒLØ(Ð*EÐFñô ð eð eàdñeô eð õ ‡K‚KÐ6¥5Ô#4Ð6Ð6Ñ7Ô7Ð7Ý
‡K‚KÐB­Ô(@ÐBÐBÑCÔCÐCÝ
‡K‚KÐ@¥{Ô'>Ð@Ð@ÑAÔAÐAõ Œ=�Ô*Ñ+Ô+­w¬}¸XÑ/FÔ/FÒFÐFÐFÐFÝŒ=�Ô1Ñ2Ô2µg´mÀHÑ6MÔ6MÒMÐMÐMÐMÝŒ=�Ô0Ñ1Ô1µW´]À8Ñ5LÔ5LÒLÐLÐLÐLÐLÐLr   c                 ó€  — t          | ¦  «        t          t          | ¦  «        ¦  «        z  dz  }t          j        | t          j        ¬¦  «        dz  }|d|z  z  }t          | ¦  «        |d›t          j        | d¦  «        dz  d›t          j        | d¦  «        dz  d›t          j        | d¦  «        dz  d›|d›|d›dœS )Ng     @�@)Údtypez.2féZ   é_   éc   )Ú
test_timesÚlatency_varianceÚlatency_90_percentileÚlatency_95_percentileÚlatency_99_percentileÚaverage_latency_msÚQPS)ÚsumÚfloatÚlenÚnumpyÚvarÚfloat64Ú
percentile)Úlatency_listÚ
batch_sizeÚ
latency_msrŠ   Ú
throughputs        r   Úget_latency_resultr›   º   sÜ   € Ý�\Ñ"Ô"¥U­3¨|Ñ+<Ô+<Ñ%=Ô%=Ñ=ÀÑF€JÝ”y µU´]ÐCÑCÔCÀfÑLÐØ˜v¨
Ñ2Ñ3€Jõ ˜,Ñ'Ô'Ø/Ð5Ð5Ý$)Ô$4°\À2Ñ$FÔ$FÈÑ$OÐ!UÐ!UÝ$)Ô$4°\À2Ñ$FÔ$FÈÑ$OÐ!UÐ!UÝ$)Ô$4°\À2Ñ$FÔ$FÈÑ$OÐ!UÐ!UØ!+Ð1Ð1ØÐ"Ð"ðð ð r   c                 ó(  — t          |ddd¬¦  «        5 }g d¢}t          j        ||¬¦  «        }|                     ¦   «          | D ]}|                     |¦  «         Œ	 d d d ¦  «         n# 1 swxY w Y   t
                               d|› �¦  «         d S )NÚaÚ Úascii©ÚmodeÚnewlineÚencoding)Úenginer
   rP   ÚdeviceÚ	precisionÚ	optimizerÚ
io_bindingÚ
model_nameÚinputsÚthreadsr˜   Úsequence_lengthÚcustom_layer_numr   r‰   r�   rŽ   rŠ   r‹   rŒ   r�   ©Ú
fieldnamesz&Detail results are saved to csv file: )ÚopenÚcsvÚ
DictWriterÚwriteheaderÚwriterowr6   r7   )ÚresultsÚcsv_filenameÚcsv_fileÚcolumn_namesÚ
csv_writerÚresults         r   Úoutput_detailsr»   Ê   sò   € Ý	ˆl ¨b¸7Ð	CÑ	CÔ	Cð (Àxð
ð 
ð 
ˆõ0 ”^ H¸ÐFÑFÔFˆ
Ø×ÒÑ Ô Ð Øð 	(ð 	(ˆFØ×Ò Ñ'Ô'Ð'Ð'ð	(ð7(ð (ð (ñ (ô (ð (ð (ð (ð (ð (ð (øøøð (ð (ð (ð (õ< ‡K‚KÐG¸ÐGÐGÑHÔHÐHÐHÐHs   ”A	A*Á*A.Á1A.c                 ó"  ‡— t          |ddd¬¦  «        5 }g d¢Šg }|j        D ]L}|j        dgk    r|                     d|› �¦  «         Œ'|j        D ]}|                     d|› d|› �¦  «         ŒŒMt	          j        |‰|z   ¬¦  «        }|                     ¦   «          |j        D �]4}d	D �]-}	|j        D �]!}
d
D �]}|j	        D �]}i }| D ]ï}|d         |k    rá|d         |	k    rÕ|d         |
k    rÉ|d         |k    r½|d         |k    r±ˆfd„| 
                    ¦   «         D ¦   «         }|sD|                     |¦  «         |                     t                               |d¦  «        ¦  «         n‰D ]}||         ||         k    sJ ‚Œ|d         }|d         }|r|d         |d|› d|› �<   Œá|d         |d|› �<   Œð|r|                     |¦  «         �Œ�Œ�Œ#�Œ/�Œ6	 d d d ¦  «         n# 1 swxY w Y   t                               d|› �¦  «         d S )Nr�   rž   rŸ   r    )r©   rª   r­   r¤   r
   rP   r¥   r¦   r§   r¨   r«   ÚbÚ_sr®   )é   é   é   )TFrž   r©   rª   r¤   r¨   r«   c                 ó$   •— i | ]\  }}|‰v ¯	||“ŒS r"   r"   )rK   ÚkÚvÚheader_namess      €r   ú
<dictcomp>z"output_summary.<locals>.<dictcomp>  s+   ø€ Ð.dÐ.dÐ.d¹¸¸1ÐRSÐWcÐRcÐRc¨q°!ÐRcÐRcÐRcr   r˜   r¬   rŽ   z'Summary results are saved to csv file: )r°   Úbatch_sizesÚsequence_lengthsÚappendr±   r²   r³   ÚmodelsÚenginesre   ÚitemsÚupdateÚdictÚfromkeysr´   r6   r7   )rµ   r¶   Úargsr·   Ú
data_namesr˜   r¬   r¹   r©   Úinput_countÚengine_namer¨   r«   Úrowrº   ÚheadersrÃ   r½   ÚsrÅ   s                      @r   Úoutput_summaryr×   ì   s(  ø€ Ý	ˆl ¨b¸7Ð	CÑ	CÔ	Cð 49Àxð
ð 
ð 
ˆð ˆ
ØÔ*ð 	Kð 	KˆJØÔ$¨¨Ò,Ð,Ø×!Ò!Ð"2 jÐ"2Ð"2Ñ3Ô3Ð3Ð3à'+Ô'<ð Kð K�OØ×%Ò%Ð&I¨*Ð&IÐ&I¸Ð&IÐ&IÑJÔJÐJÐJðKõ ”^ H¸È
Ñ9RÐSÑSÔSˆ
Ø×ÒÑ Ô Ð Øœ+ð 	9ñ 	9ˆJØ(ð 9ñ 9�Ø#'¤<ð 9ñ 9�KØ&7ð 9ñ 9˜
Ø'+Ô'7ð 9ñ 9˜GØ"$˜CØ*1ð Tð T à$*¨<Ô$8¸JÒ$FÐ$FØ(.¨xÔ(8¸KÒ(GÐ(GØ(.¨xÔ(8¸KÒ(GÐ(GØ(.¨|Ô(<À
Ò(JÐ(JØ(.¨yÔ(9¸WÒ(DÐ(Dà.dÐ.dÐ.dÐ.dÀÇÂÁÄÐ.dÑ.dÔ.d GØ+.ð %HØ(+¯
ª
°7Ñ(;Ô(;Ð(;Ø(+¯
ª
µ4·=²=ÀÈRÑ3PÔ3PÑ(QÔ(QÐ(QÐ(Qà1=ð )Hð )H¨AØ36°q´6¸WÀQ¼ZÒ3GÐ3GÐ3GÐ3GÐ3GØ(.¨|Ô(< AØ(.Ð/@Ô(A AØ'(ð %TØ<BÐCWÔ<X¨¨L°¨L¨L°Q¨L¨LÑ(9Ð(9à7=Ð>RÔ7S¨¨G°¨G¨G©øØ"ð 9Ø *× 3Ò 3°CÑ 8Ô 8Ð 8ùñ19ñ9ñ9ñ9ð	9ð149ð 49ð 49ñ 49ô 49ð 49ð 49ð 49ð 49ð 49ð 49øøøð 49ð 49ð 49ð 49õl ‡K‚KÐH¸,ÐHÐHÑIÔIÐIÐIÐIs   •GG'Ç'G+Ç.G+c           
      óŽ  — t          |ddd¬¦  «        5 }ddddgt          t          t          |                      ¦   «         ¦  «        ¦  «                             ¦   «         ¦  «        ¢}t          j        ||¬	¦  «        }|                     ¦   «          | D ]{}t          t          j        ¦   «         ¦  «        | |         d<   t          j        | |         d<   t          j        | |         d<   || |         d<   |                     | |         ¦  «         Œ|	 d d d ¦  «         n# 1 swxY w Y   t                                d
|› �¦  «         d S )Nr�   rž   rŸ   r    Úmodel_filenamer   rn   r~   r®   z(Fusion statistics is saved to csv file: )r°   ÚlistÚnextÚiterÚvaluesÚkeysr±   r²   r³   Ústrr   Únowrn   r   r~   r´   r6   r7   )Úmodel_fusion_statisticsr¶   r·   r¸   r¹   Úkeys         r   Úoutput_fusion_statisticsrã   &  sŠ  € Ý	ˆl ¨b¸7Ð	CÑ	CÔ	Cð >ÀxàØØØð	
õ
 •$•tÐ3×:Ò:Ñ<Ô<Ñ=Ô=Ñ>Ô>×CÒCÑEÔEÑFÔFð
ˆõ ”^ H¸ÐFÑFÔFˆ
Ø×ÒÑ Ô Ð Ø*ð 	>ð 	>ˆCÝ7:½8¼<¹>¼>Ñ7JÔ7JÐ# CÔ(¨Ñ4Ý;GÔ;SÐ# CÔ(¨Ñ8Ý49Ô4EÐ# CÔ(¨Ñ1Ø=@Ð# CÔ(Ð)9Ñ:Ø×ÒÐ 7¸Ô <Ñ=Ô=Ð=Ð=ð	>ð>ð >ð >ñ >ô >ð >ð >ð >ð >ð >ð >øøøð >ð >ð >ð >õ  ‡K‚KÐI¸<ÐIÐIÑJÔJÐJÐJÐJs   ”C<DÄD!Ä$D!c                 ó  ‡ ‡— i }t          j        ˆˆ fd„d|¬¦  «         t          j        ˆˆ fd„d|¬¦  «        }|                     |¦  «         |                     ddi¦  «         |                     t          ||¦  «        ¦  «         |S )Nc                  ó0   •— ‰                      d ‰ ¦  «        S r   ©Úrun©Ú
ort_inputsÚort_sessions   €€r   ú<lambda>zinference_ort.<locals>.<lambda><  s   ø€ ˜+Ÿ/š/¨$°
Ñ;Ô;€ r   r¿   ©ÚnumberÚrepeatc                  ó0   •— ‰                      d ‰ ¦  «        S r   ræ   rè   s   €€r   rë   zinference_ort.<locals>.<lambda>=  s   ø€ ¨¯ª¸¸zÑ)JÔ)J€ r   r¨   F)Útimeitrî   rÍ   r›   )rê   ré   Úresult_templateÚrepeat_timesr˜   Úwarm_up_repeatrº   r—   s   ``      r   Úinference_ortrô   :  s�   øø€ Ø€FÝ
„MÐ;Ð;Ð;Ð;Ð;ÀAÈnÐ]Ñ]Ô]Ð]Ý”=Ð!JÐ!JÐ!JÐ!JÐ!JÐSTÐ]iÐjÑjÔj€LØ
‡M‚M�/Ñ"Ô"Ð"Ø
‡M‚M�< Ð'Ñ(Ô(Ð(Ø
‡M‚MÕ$ \°:Ñ>Ô>Ñ?Ô?Ð?Ø€Mr   c           
      ó   ‡ ‡— i }‰                       ¦   «         Š|D ]�}t          j        ||         ¦  «                             |	¦  «        }t                               t          ||         j        ¦  «        |
¦  «        }‰                     ||j	        j
        d||j        |                     ¦   «         ¦  «         Œžt          |¦  «        dk    rt          |||	¦  «         t          |¦  «        D ]\\  }}‰                     |||         j	        j
        dt"          j        ||         j        ||                              ¦   «         ¦  «         Œ]t'          j        ˆˆ fd„d|¬¦  «         t'          j        ˆˆ fd„d|¬¦  «        }|                     |¦  «         |                     ddi¦  «         |                     t-          ||¦  «        ¦  «         |S )Nr   c                  ó.   •— ‰                      ‰ ¦  «        S r   ©Úrun_with_iobinding©r¨   rê   s   €€r   rë   z/inference_ort_with_io_binding.<locals>.<lambda>q  ó   ø€ �×.Ò.¨zÑ:Ô:€ r   r¿   rì   c                  ó.   •— ‰                      ‰ ¦  «        S r   r÷   rù   s   €€r   rë   z/inference_ort_with_io_binding.<locals>.<lambda>w  rú   r   r¨   T)r¨   r~   Ú
from_numpyÚtoÚIO_BINDING_DATA_TYPE_MAPÚgetrß   r…   Ú
bind_inputr¥   ÚtypeÚshapeÚdata_ptrr’   ÚallocateOutputBuffersÚ	enumerateÚbind_outputr“   r=   rð   rî   rÍ   r›   )rê   ré   rñ   rò   Úort_output_namesÚort_outputsÚoutput_buffersÚoutput_buffer_max_sizesr˜   r¥   Ú	data_typeró   rº   rL   Únp_inputÚ
input_typeÚiÚort_output_namer—   r¨   s   `                  @r   Úinference_ort_with_io_bindingr  D  sú  øø€ ð €Fð ×'Ò'Ñ)Ô)€Jàð 

ð 

ˆÝÔ# J¨tÔ$4Ñ5Ô5×8Ò8¸Ñ@Ô@ˆÝ-×1Ò1µ#°jÀÔ6FÔ6LÑ2MÔ2MÈyÑYÔYˆ
Ø×ÒØØŒOÔ ØØØŒNØ×ÒÑÔñ	
ô 	
ð 	
ð 	
õ ˆ>ÑÔ˜aÒÐÝ˜nÐ.EÀvÑNÔNÐNå'Ð(8Ñ9Ô9ð 
ð 
Ñˆˆ?Ø×ÒØØ˜1ÔÔ$Ô)ØÝŒMØ˜ŒNÔ Ø˜1Ô×&Ò&Ñ(Ô(ñ	
ô 	
ð 	
ð 	
õ „MØ:Ð:Ð:Ð:Ð:ØØðñ ô ð õ ”=Ø:Ð:Ð:Ð:Ð:ØØðñ ô €Lð
 ‡M‚M�/Ñ"Ô"Ð"Ø
‡M‚M�< Ð&Ñ'Ô'Ð'Ø
‡M‚MÕ$ \°:Ñ>Ô>Ñ?Ô?Ð?Ø€Mr   c                 óx   — |D ]6}|                       t          j        |t          j        |¬¦  «        ¦  «         Œ7d S )N)r…   r¥   )rÉ   r~   Úemptyr=   )r	  r
  r¥   r  s       r   r  r  �  sK   € ð %ð Rð RˆØ×Ò�eœk¨!µ5´=ÈÐPÑPÔPÑQÔQÐQÐQðRð Rr   é{   c                 ó  — t          j        | ¦  «         t          j                              | ¦  «         t          j        | ¦  «         t          j                             | ¦  «         t          j                             | ¦  «         dS )z5Set random seed manually to get deterministic resultsN)ÚrandomÚseedr“   r~   Úmanual_seedrF   Úmanual_seed_all)r  s    r   Úset_random_seedr  ‰  sk   € å
„K�ÑÔÐÝ	„L×Ò�dÑÔÐÝ	Ô�dÑÔÐÝ	„J×Ò˜4Ñ Ô Ð Ý	„J×Ò˜tÑ$Ô$Ð$Ð$Ð$r   Úreturnc            	      óÔ  — ddl m} m}m}m}m}m}m} 	  |¦   «          g } |¦   «         }t          |t          ¦  «        sd S t          |¦  «        D ]j}	 | ||	¦  «        ¦  «        }
t          |
t          ¦  «        r d S |                     |	 | ||	¦  «        ¦  «        |
j        |
j        |
j        dœ¦  «         Œk |¦   «          |S # | $ r}t!          d|¦  «         Y d }~d S d }~ww xY w)Nr   ©Ú	NVMLErrorÚnvmlDeviceGetCountÚnvmlDeviceGetHandleByIndexÚnvmlDeviceGetMemoryInfoÚnvmlDeviceGetNameÚnvmlInitÚnvmlShutdown)ÚidrL   ÚtotalÚfreeÚusedú-Error fetching GPU information using nvml: %s)Úpy3nvml.py3nvmlr  r  r  r   r!  r"  r#  Ú
isinstanceÚintÚrangerß   rÉ   r%  r&  r'  Úprint)r  r  r  r   r!  r"  r#  rº   Údevice_countr  r7   Úerrors               r   Úget_gpu_infor0  •  s‚  € ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðØˆ‰
Œ
ˆ
ØˆØ)Ð)Ñ+Ô+ˆÝ˜,­Ñ,Ô,ð 	Ø�4å�|Ñ$Ô$ð 	ð 	ˆAØ*Ð*Ð+EÐ+EÀaÑ+HÔ+HÑIÔIˆDÝ˜$¥Ñ$Ô$ð Ø�t�tØ�MŠMàØ-Ð-Ð.HÐ.HÈÑ.KÔ.KÑLÔLØ!œZØ œIØ œIðð ñô ð ð ð 	ˆ‰ŒˆØˆøØð ð ð ÝÐ=¸uÑEÔEÐEØˆtˆtˆtˆtˆtøøøøðøøøs$   ”+C Á;C Á>AC ÃC'ÃC"Ã"C'c                   óZ   — e Zd Zdd„Zd„ Zedeeee	f                  dz  fd„¦   «         Z
dS )ÚMemoryMonitorTc                 ó   — || _         d S r   )Úkeep_measuring)r   r4  s     r   r1   zMemoryMonitor.__init__¼  s   € Ø,ˆÔÐÐr   c                 óà   — dd l }d}	 t          ||                     t          j        ¦   «         ¦  «                             ¦   «         j        dz  ¦  «        }t          d¦  «         | j        snŒf|S )Nr   Té   ç{®Gázt?)	ÚpsutilÚmaxÚProcessrx   ÚgetpidÚmemory_infoÚrssr   r4  )r   r8  Ú	max_usages      r   Úmeasure_cpu_usagezMemoryMonitor.measure_cpu_usage¿  sq   € Øˆˆˆàˆ	ð	Ý˜I v§~¢~µb´i±k´kÑ'BÔ'B×'NÒ'NÑ'PÔ'PÔ'TÐW^Ñ'^Ñ_Ô_ˆIÝ�%‰LŒLˆLØÔ&ð Øð		ð
 Ðr   r  Nc                 ó   — t          ¦   «         ‚r   )ÚNotImplementedErrorr   s    r   Úmeasure_gpu_usagezMemoryMonitor.measure_gpu_usageÊ  s   € å!Ñ#Ô#Ð#r   ©T)r   r   r   r1   r?  r   rÚ   rÎ   rß   r	   rB  r"   r   r   r2  r2  »  sp   € € € € € ð-ð -ð -ð -ð	ð 	ð 	ð ð$ 4¨¨S°#¨X¬Ô#7¸$Ñ#>ð $ð $ð $ñ „^ð$ð $ð $r   r2  c                   óN   ‡ — e Zd Zdˆ fd„	Zdeeeef                  dz  fd„Zˆ xZ	S )ÚCudaMemoryMonitorTc                 óJ   •— t          ¦   «                              |¦  «         d S r   )Úsuperr1   )r   r4  Ú	__class__s     €r   r1   zCudaMemoryMonitor.__init__Ð  s!   ø€ Ý‰Œ×Ò˜Ñ(Ô(Ð(Ð(Ð(r   r  Nc                 ó  ‡
‡‡‡— ddl m}m}mŠm}mŠm}m} g Šg Š
	  |¦   «           |¦   «         }t          |t          ¦  «        st                               d|› �¦  «         d S d„ t          |¦  «        D ¦   «         Šˆˆfd„t          |¦  «        D ¦   «         Š
	 t          |¦  «        D ]l} | ‰|¦  «        ¦  «        }t          |t          ¦  «        r t                               d|› �¦  «          d S t          ‰|         |j        dz  ¦  «        ‰|<   Œmt!          d	¦  «         | j        snŒ” |¦   «          ˆ
ˆfd
„t          |¦  «        D ¦   «         S # |$ r&}	t                               d|	¦  «         Y d }	~	d S d }	~	ww xY w)Nr   r  z*nvmlDeviceGetCount result is not integer: c                 ó   — g | ]}d ‘ŒS ©r   r"   ©rK   r  s     r   rN   z7CudaMemoryMonitor.measure_gpu_usage.<locals>.<listcomp>ç  s   € Ð<Ð<Ð< 1˜QÐ<Ð<Ð<r   c                 ó8   •— g | ]} ‰ ‰|¦  «        ¦  «        ‘ŒS r"   r"   )rK   r  r  r!  s     €€r   rN   z7CudaMemoryMonitor.measure_gpu_usage.<locals>.<listcomp>è  s1   ø€ ÐfÐfÐfÈQÐ)Ð)Ð*DÐ*DÀQÑ*GÔ*GÑHÔHÐfÐfÐfr   Tz%nvmlDeviceGetMemoryInfo returns str: r6  r7  c                 ó4   •— g | ]}|‰|         ‰|         d œ‘ŒS ©)Ú	device_idrL   Úmax_used_MBr"   ©rK   r  Úgpu_nameÚmax_gpu_usages     €€r   rN   z7CudaMemoryMonitor.measure_gpu_usage.<locals>.<listcomp>ô  sD   ø€ ð ð ð ð ð	 "#Ø$ QœKØ#0°Ô#3ðð ðð ð r   r(  )r)  r  r  r  r   r!  r"  r#  r*  r+  r6   r/  r,  rß   r9  r'  r   r4  )r   r  r  r   r"  r#  r.  r  r7   r/  rS  rT  r  r!  s             @@@@r   rB  z#CudaMemoryMonitor.measure_gpu_usageÓ  s6  øøøø€ ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð ˆØˆð	ØˆH‰JŒJˆJØ-Ð-Ñ/Ô/ˆLÝ˜l­CÑ0Ô0ð Ý—’ÐXÈ,ÐXÐXÑYÔYÐYØ�tà<Ð<­¨lÑ(;Ô(;Ð<Ñ<Ô<ˆMØfÐfÐfÐfÐfÕRWÐXdÑReÔReÐfÑfÔfˆHð	Ý˜|Ñ,Ô,ð Rð R�AØ2Ð2Ð3MÐ3MÈaÑ3PÔ3PÑQÔQ�DÝ! $­Ñ,Ô,ð $ÝŸšÐ%SÈTÐ%SÐ%SÑTÔTÐTØ#˜t˜tÝ'*¨=¸Ô+;¸T¼YÈÑ=PÑ'QÔ'Q�M !Ñ$Ð$Ý�e‘”�ØÔ*ð Øð	ð ˆL‰NŒNˆNðð ð ð ð õ ˜|Ñ,Ô,ðñ ô ð øð ð 	ð 	ð 	Ý�LŠLÐHÈ%ÑPÔPÐPØ�4�4�4�4�4øøøøð	øøøs&   œAE Á$BE Ã4AE ÅE?ÅE:Å:E?rC  )
r   r   r   r1   rÚ   rÎ   rß   r	   rB  Ú__classcell__©rH  s   @r   rE  rE  Ï  sj   ø€ € € € € ð)ð )ð )ð )ð )ð )ð+ 4¨¨S°#¨X¬Ô#7¸$Ñ#>ð +ð +ð +ð +ð +ð +ð +ð +r   rE  c                   ó,   ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Zˆ xZS )ÚRocmMemoryMonitorTc                 ó`  •— t          ¦   «                              |¦  «         d}t          j                             |¦  «        r-|t
          j        vrt
          j                             |¦  «         	 dd l}|| _        | j                             ¦   «          d S # t          $ r d | _        Y d S w xY w)Nz/opt/rocm/libexec/rocm_smir   )
rG  r1   rx   ry   rz   ÚsysrÉ   Úrocm_smiÚinitializeRsmiÚImportError)r   r4  Úrocm_smi_pathr[  rH  s       €r   r1   zRocmMemoryMonitor.__init__  s®   ø€ Ý‰Œ×Ò˜Ñ(Ô(Ð(Ø4ˆÝŒ7�>Š>˜-Ñ(Ô(ð 	/Ø¥C¤HÐ,Ð,Ý”—’ Ñ.Ô.Ð.ð	!ØˆOˆOˆOà$ˆDŒMØŒM×(Ò(Ñ*Ô*Ð*Ð*Ð*øÝð 	!ð 	!ð 	!Ø ˆDŒMˆMˆMˆMð	!øøøs   Á2$B ÂB-Â,B-c                 ób   — | j         €dS | j                              |d¦  «        d         dz  dz  S )Nr>   ÚVRAMr   i   )r[  Ú
getMemInfo)r   Údevs     r   Úget_used_memoryz!RocmMemoryMonitor.get_used_memory  s6   € ØŒ=Ð Ø�2ØŒ}×'Ò'¨¨VÑ4Ô4°QÔ7¸$Ñ>ÀÑEÐEr   c                 óÊ  ‡‡— | j         €d S | j         �&t          | j                              ¦   «         ¦  «        nd}d„ t          |¦  «        D ¦   «         Šd„ t          |¦  «        D ¦   «         Š	 t          |¦  «        D ].}t	          ‰|         |                      |¦  «        ¦  «        ‰|<   Œ/t          j        d¦  «         | j        snŒ[ˆˆfd„t          |¦  «        D ¦   «         S )Nr   c                 ó   — g | ]}d ‘ŒS rK  r"   rL  s     r   rN   z7RocmMemoryMonitor.measure_gpu_usage.<locals>.<listcomp>  s   € Ð8Ð8Ð8˜q˜Ð8Ð8Ð8r   c                 ó   — g | ]}d |› �‘ŒS )ÚGPUr"   rL  s     r   rN   z7RocmMemoryMonitor.measure_gpu_usage.<locals>.<listcomp>  s   € Ð;Ð;Ð; !�I˜!�I�IÐ;Ð;Ð;r   Tr7  c                 ó4   •— g | ]}|‰|         ‰|         d œ‘ŒS rO  r"   rR  s     €€r   rN   z7RocmMemoryMonitor.measure_gpu_usage.<locals>.<listcomp>"  sD   ø€ ð 
ð 
ð 
ð ð	 Ø  œØ,¨QÔ/ðð ð
ð 
ð 
r   )	r[  r’   ÚlistDevicesr,  r9  rc  Útimer   r4  )r   r.  r  rS  rT  s      @@r   rB  z#RocmMemoryMonitor.measure_gpu_usage  s  øø€ ØŒ=Ð Ø�4à;?¼=Ð;T•s˜4œ=×4Ò4Ñ6Ô6Ñ7Ô7Ð7ÐZ[ˆØ8Ð8¥E¨,Ñ$7Ô$7Ð8Ñ8Ô8ˆØ;Ð;¥u¨\Ñ':Ô':Ð;Ñ;Ô;ˆð	Ý˜<Ñ(Ô(ð Rð R�Ý#& }°QÔ'7¸×9MÒ9MÈaÑ9PÔ9PÑ#QÔ#Q�˜aÑ Ð ÝŒJ�uÑÔÐØÔ&ð Øð	ð
ð 
ð 
ð 
ð 
õ ˜<Ñ(Ô(ð
ñ 
ô 
ð 	
r   rC  )r   r   r   r1   rc  rB  rU  rV  s   @r   rX  rX    s^   ø€ € € € € ð!ð !ð !ð !ð !ð !ðFð Fð Fð

ð 
ð 
ð 
ð 
ð 
ð 
r   rX  rF   c                 ól  — d }|dk    rt           }nt          } |d¦  «        }| �r™|�|}n|                     ¦   «         }|€d S |€|S t          ¦   «         5 } |¦   «         }|                     |j        ¦  «        }	 |                     |¦  «        }	|	                     ¦   «         }
d|_        |                     ¦   «         }n # d|_        |                     ¦   «         }w xY w|€	 d d d ¦  «         d S t                               d|› d|› �¦  «         t          |¦  «        dk    rƒt          |¦  «        dk    rpt          |¦  «        t          |¦  «        k    rPd}t          |¦  «        D ]0\  }}|d         }||         d         }||z
  }t          ||¦  «        }Œ1|cd d d ¦  «         S d d d ¦  «         n# 1 swxY w Y   d S |�|}n|                     ¦   «         }|€|S t          ¦   «         5 } |¦   «         }|                     |j        ¦  «        }	 |                     |¦  «        }	|	                     ¦   «         }
d|_        |                     ¦   «         }n # d|_        |                     ¦   «         }w xY wt                               d|d	›d
|d	›d�¦  «         ||z
  cd d d ¦  «         S # 1 swxY w Y   d S )NÚrocmFzGPU memory usage: before=z  peak=r¿   r   rQ  zCPU memory usage: before=z.1fz
 MB, peak=z MB)rX  rE  rB  r   Úsubmitrº   r4  r6   r7   r’   r  r9  r?  )Úis_gpuÚfuncÚmonitor_typeÚstart_memoryÚmemory_monitor_typeÚmonitorÚmemory_before_testÚexecutorÚ
mem_threadÚ	fn_threadÚ_r>  Úmax_usedr  Úmemory_beforeÚbeforeÚafterr'  s                     r   Úmeasure_memoryr}  ,  s×  € ØÐØ�vÒÐÝ/ÐÐå/Ðà!Ð! %Ñ(Ô(€Gàñ "ØÐ#Ø!-ÐÐà!(×!:Ò!:Ñ!<Ô!<ÐØÐ%Ø�4àˆ<Ø%Ð%åÑ!Ô!ð 	  XØ)Ð)Ñ+Ô+ˆGØ!Ÿš¨Ô)BÑCÔCˆJð0Ø$ŸOšO¨DÑ1Ô1�	Ø×$Ò$Ñ&Ô&�à).�Ô&Ø&×-Ò-Ñ/Ô/�	�	øð */�Ô&Ø&×-Ò-Ñ/Ô/�	Ð/Ð/Ð/Ð/àÐ Øð	 ð 	 ð 	 ñ 	 ô 	 ð 	 ð 	 ð 	 õ �KŠKÐZÐ4FÐZÐZÈyÐZÐZÑ[Ô[Ð[ÝÐ%Ñ&Ô&¨!Ò+Ð+µ°I±´À!Ò0CÐ0CÍÐL^ÑH_ÔH_ÕcfÐgpÑcqÔcqÒHqÐHqà�Ý(1Ð2DÑ(EÔ(Eð 3ð 3Ñ$�A�}Ø*¨=Ô9�FØ% aœL¨Ô7�EØ  6™>�DÝ" 8¨TÑ2Ô2�H�HØð-	 ð 	 ð 	 ð 	 ñ 	 ô 	 ð 	 ð 	 ð 	 ð 	 ð 	 ñ 	 ô 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 øøøð 	 ð 	 ð 	 ð 	 ð. ˆtð ÐØ)ÐÐà$×6Ò6Ñ8Ô8Ðà€|Ø!Ð!å	Ñ	Ô	ð . Ø%Ð%Ñ'Ô'ˆØ—_’_ WÔ%>Ñ?Ô?ˆ
ð	,Ø Ÿš¨Ñ-Ô-ˆIØ× Ò Ñ"Ô"ˆAà%*ˆGÔ"Ø"×)Ò)Ñ+Ô+ˆIˆIøð &+ˆGÔ"Ø"×)Ò)Ñ+Ô+ˆIÐ+Ð+Ð+Ð+å�ŠÐdÐ0BÐdÐdÐdÐR[ÐdÐdÐdÐdÑeÔeÐeØÐ-Ñ-ð.ð .ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .ð .ð .s[   Á%F2Á;)C Â$F2Ã CÃF2Ã0B)F2Æ2F6Æ9F6Ç*%J)È)IÈ9J)ÉI2É2*J)Ê)J-Ê0J-c                  ól   — g d¢} d}| D ]*}t          j        |¦  «        }|€Œ|r|dz  }||› d|› �z  }Œ+|S )N)ÚORT_DISABLE_FUSED_ATTENTIONÚ!ORT_DISABLE_FUSED_CROSS_ATTENTIONÚORT_DISABLE_TRT_FLASH_ATTENTIONÚ&ORT_DISABLE_MEMORY_EFFICIENT_ATTENTIONÚORT_TRANSFORMER_OPTIONSÚORT_CUDA_GEMM_OPTIONSrž   ú,ú=)rx   Úgetenv)Ú	env_namesÚenvrL   r   s       r   Úget_ort_environment_variablesrŠ  p  sn   € ðð ð €Ið €CØð !ð !ˆÝ”	˜$‘”ˆØˆ=ØØð 	Ø�3‰JˆCØ�$Ð Ð ˜Ð Ð Ñ ˆˆØ€Jr   rC  r   rK  )r  )rF   N)5r±   ro   rx   r  rZ  rj  rð   Úabcr   r   Úconcurrent.futuresr   r   Úenumr   r   Útypingr	   r“   r~   rn   Ú	packagingr
   rQ   rs   r   r6   r   r$   r-   r=   rþ   rj   rv   rƒ   r›   r»   r×   rã   rô   Úlonglongr  r  r  rÚ   rÎ   rß   r0  r2  rE  rX  r}  rŠ  r"   r   r   ú<module>r‘     ss  ðð €
€
€
Ø €€€Ø 	€	€	€	Ø €€€Ø 
€
€
€
Ø €€€Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à €€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð à	ˆÔ	˜8Ñ	$Ô	$€ðð ð ð ð �ñ ô ð ðð ð ð ð �Dñ ô ð ðð ð ð ð ñ ô ð ð, ˆuŒ}ðÐ ð Ø ØØØØ-2ØðAð Að Að AðHDð Dð Dð DðMð Mð Mð Mð8ð ð ð Ið Ið IðD7Jð 7Jð 7JðtKð Kð Kð(ð ð ð ð* ŒnØð:ð :ð :ð :ðzRð Rð Rð%ð %ð %ð %ð#�d˜4  S œ>Ô*¨TÑ1ð #ð #ð #ð #ðL$ð $ð $ð $ð $�Cñ $ô $ð $ð(/ð /ð /ð /ð /˜ñ /ô /ð /ðd(
ð (
ð (
ð (
ð (
˜ñ (
ô (
ð (
ðVA.ð A.ð A.ð A.ðHð ð ð ð r   