§
    kŠtjâg  ã                   óš  — 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mZ d dlmZmZmZmZmZ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	„ Z+d
e j,        de-fd„Z.d
e j,        fd„Z/d„ Z0d„ Z1d„ Z2d„ Z3d„ Z4d„ Z5dd„Z6d„ Z7e)dk    r e7¦   «          dS dS )é    N)Úmeasure_memoryÚsetup_logger)Úget_rankÚget_size)Úadd_io_bindings_as_ortvaluesÚ%get_merged_sample_with_past_kv_inputsÚget_msft_sample_inputsÚget_sample_inputsÚget_sample_with_past_kv_inputsÚverify_ort_inputs)ÚORTModelForCausalLM)ÚProfilerActivityÚprofileÚrecord_function)Útrange)Ú
AutoConfigÚAutoModelForCausalLMÚAutoTokenizerc                 óì   — | j         dv rdS | j         dk    r>	 t          |j        ¦  «        S # t          $ r t          |j        j        ¦  «        cY S w xY wt          |                     ¦   «         ¦  «        S )N¾   úhf-pt-eagerúhf-pt-compiler   úhf-ort)Úbenchmark_typeÚlenÚinputs_namesÚ	ExceptionÚdecoderÚinput_namesÚ
get_inputs)ÚargsÚmodels     úm/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/onnxruntime/transformers/models/llama/benchmark.pyÚget_ort_model_inputs_lenr$   (   sŠ   € ØÔÐ>Ð>Ð>ØˆqØÔ˜hÒ&Ð&ð	2å�uÔ)Ñ*Ô*Ð*øÝð 	2ð 	2ð 	2å�u”}Ô0Ñ1Ô1Ð1Ð1Ð1ð	2øøøõ ˆu×ÒÑ!Ô!Ñ"Ô"Ð"s   ˜, ¬#AÁAr!   Úort_model_inputs_lenc                 óÄ  — d\  }}| j         dk    rdn| j        j        }| j         dv rXt          | j        | j        | j        | j        d¬¦  «        }t          | j        | j        | j        | j        | j        d¬¦  «        }�nÞ| j         dv rÎ|d	k    rXt          | j        | j        | j        | j        d¬¦  «        }t          | j        | j        | j        | j        | j        d¬¦  «        }�nwt          | j        | j        | j        | j        d
|| j        | j
        dd¬¦
  «
        }t          | j        | j        | j        d| j        || j        | j
        dd¬¦
  «
        }�n| j         dk    r{t          | j        | j        | j        | j        d
|| j        | j
        dd| j        ¬¦  «        }t          | j        | j        | j        d| j        || j        | j
        dd| j        ¬¦  «        }n�| j         dk    rg|dk    }t          | j        | j        d
| j        || j        | j
        |¬¦  «        }t          | j        | j        | j        d|| j        | j
        |¬¦  «        }nt          d¦  «        ‚||fS )N©NNúort-msfti   r   T)Úreturn_dict)Úuse_fp16r)   >   r   é   r   Úpt)Úseq_lenÚpast_seq_lenÚmax_seq_lenr*   Úuse_buffer_shareÚenginer)   é   úort-convert-to-onnxÚort)r-   r.   r/   r*   r0   r1   r)   Ú
world_sizeé   )r.   r-   r/   r*   r0   Úsplit_kvz/Unable to auto-detect inputs for provided model)r   ÚconfigÚmax_position_embeddingsr
   Útarget_deviceÚ
batch_sizeÚsequence_lengthr   r*   r   r0   r5   r	   r   )r!   r%   Úinit_inputsÚiter_inputsr/   r7   s         r#   r    r    5   sî  € Ø)Ñ€K�ð
 Ô-°Ò;Ð;�$�$ÀÄÔAd€KàÔÐ>Ð>Ð>Ý'ØŒKØÔØŒOØÔ Øð
ñ 
ô 
ˆõ 5ØŒKØÔØŒOØÔ Ø”]Øð
ñ 
ô 
ˆ‰ð 
Ô	 
Ð	*Ð	*Ø 1Ò$Ð$å+Ø”ØÔ"Ø”ØÔ$Ø ðñ ô ˆKõ 9Ø”ØÔ"Ø”ØÔ$ØœØ ðñ ô ˆK‰Kõ @Ø”ØÔ"Ø”ØÔ,ØØ'ØœØ!%Ô!6ØØ ðñ ô ˆKõ @Ø”ØÔ"Ø”ØØ!Ô1Ø'ØœØ!%Ô!6ØØ ðñ ô ˆK‰Kð 
Ô	Ð 5Ò	5Ð	5å;ØŒKØÔØŒOØÔ(ØØ#Ø”]Ø!Ô2ØØØ”ð
ñ 
ô 
ˆõ <ØŒKØÔØŒOØØÔ-Ø#Ø”]Ø!Ô2ØØØ”ð
ñ 
ô 
ˆˆð 
Ô	 
Ò	*Ð	*à'¨!Ò+ˆå,ØŒKØŒOØØÔ(Ø#Ø”]Ø!Ô2Øð	
ñ 	
ô 	
ˆõ -ØŒKØŒOØÔ-ØØ#Ø”]Ø!Ô2Øð	
ñ 	
ô 	
ˆˆõ ÐIÑJÔJÐJà˜Ð#Ð#ó    c                 óÜ  — d\  }}d\  }}| j         dv r¹| j        r| j        n| j        }t          j        ¦   «         }t	          j        || j        rt          j        nt          j	        | j
        | j
        d| j        ¬¦  «                             | j        ¦  «        }t          j        ¦   «         }| j         dk    rt          j        |¦  «        }nU| j         dv r5t          j        ¦   «         }| j        |_        | j        rd|_        d|_        nt-          d| j         › �¦  «        ‚| j         d	k    rût/          | j        ¦  «        t2          u r| j        d
         n| j        }t/          | j        ¦  «        t2          u r| j        d         nd }d }d }	t5          j        | j        ¦  «        D ])}
d|
vsd|
v sd|
v rŒd|
v s|
dk    r|
}d|
v r|
}	d|
v r|
}|
}	Œ*t          j        ¦   «         }t;          j        | j        ||	| j
        | j
        d|dk    rdnd |||¬¦
  «
        }t          j        ¦   «         }| j         dv ršt<                               d| j          !                    | j"        ¦  «        › �¦  «         t          j        ¦   «         }t          j#        | j          !                    | j"        ¦  «        || j        g¬¦  «        }t          j        ¦   «         }t<                               d||z
  › d�¦  «         |S )Nr'   r   T)Útorch_dtypeÚuse_auth_tokenÚtrust_remote_codeÚ	use_cacheÚ	cache_dirr   >   r   r(   r3   r2   úCannot recognize r   r   z.onnxz
.onnx_dataz
.onnx.dataÚdecoder_modelz
model.onnxÚdecoder_with_past_modelÚdecoder_merged_model)	Údecoder_file_nameÚdecoder_with_past_file_namerB   rC   Úuse_io_bindingÚ
use_mergedÚproviderÚprovider_optionsÚsession_options¾   r(   r3   zLoading model from )Ú	providerszLoaded model in ú s)$r   Úhf_pt_dir_pathÚ
model_nameÚtimer   Úfrom_pretrainedr*   ÚtorchÚfloat16Úfloat32ÚauthrE   Útor:   Úcompiler4   ÚSessionOptionsr   Úenable_profilingÚverboseÚlog_verbosity_levelÚlog_severity_levelr   ÚtypeÚexecution_providerÚtupleÚosÚlistdirÚhf_ort_dir_pathr   ÚloggerÚinfoÚort_model_pathÚformatÚrankÚInferenceSession)r!   r"   Úsess_optionsÚ
start_timeÚend_timeÚsourcerN   rO   rJ   rK   Úfilenames              r#   Ú	get_modelrt   ·   s0  € Ø$Ñ€Eˆ<Ø%Ñ€J�ð ÔÐ>Ð>Ð>Ø(,Ô(;ÐP�Ô$Ð$ÀÄˆÝ”Y‘[”[ˆ
Ý$Ô4ØØ)-¬ÐI�œ˜½E¼MØœ9Ø"œiØØ”nð
ñ 
ô 
÷ Š"ˆTÔÑ
 Ô
 ð 	õ ”9‘;”;ˆàÔ /Ò1Ð1Ý”M %Ñ(Ô(ˆEøà	Ô	Ð MÐ	MÐ	MÝÔ)Ñ+Ô+ˆØ(,¬ˆÔ%ØŒ<ð 	0Ø/0ˆLÔ,Ø./ˆLÔ+øõ ÐA¨DÔ,?ÐAÐAÑBÔBÐBàÔ˜hÒ&Ð&å15°dÔ6MÑ1NÔ1NÕRWÐ1WÐ1W�4Ô*¨1Ô-Ð-Ð]aÔ]tˆÝ9=¸dÔ>UÑ9VÔ9VÕZ_Ð9_Ð9_˜4Ô2°1Ô5Ð5ÐeiÐà ÐØ&*Ð#Ýœ
 4Ô#7Ñ8Ô8ð 		7ð 		7ˆHØ˜hÐ&Ð&¨,¸(Ð*BÐ*BÀlÐV^ÐF^ÐF^ØØ (Ð*Ð*¨h¸,Ò.FÐ.FØ$,Ð!Ø(¨HÐ4Ð4Ø.6Ð+Ø%¨Ð1Ð1Ø$,Ð!Ø.6Ð+øå”Y‘[”[ˆ
Ý#Ô3ØÔ Ø/Ø(CØœ9Ø"œiØØ 1°\Ò AÐ A˜˜ÀtØØ-Ø(ð
ñ 
ô 
ˆõ ”9‘;”;ˆàÔÐAÐAÐAå�ŠÐQ¨$Ô*=×*DÒ*DÀTÄYÑ*OÔ*OÐQÐQÑRÔRÐRÝ”Y‘[”[ˆ
ÝÔ$ØÔ×&Ò& t¤yÑ1Ô1ØØÔ.Ð/ð
ñ 
ô 
ˆõ
 ”9‘;”;ˆå
‡K‚KÐ< 8¨jÑ#8Ð<Ð<Ð<Ñ=Ô=Ð=Ø€Lr?   c                 óà  ‡ — ‰ j         dv rt          ‰ j        ¦  «        n t          ‰ j        t          j        d¬¦  «        }‰ j        r% ||¦  «        }t                               |¦  «         ˆ fd„}ˆ fd„}|D ]!} |¦   «           ||¦  «          |¦   «          Œ"d}‰ j         dv rt          ‰ j	        ¦  «        n t          ‰ j	        t          j        d¬¦  «        }	|	D ]O} |¦   «          t          j
        ¦   «         }
 ||¦  «          |¦   «          t          j
        ¦   «         }|||
z
  z  }ŒP‰ j         dvrt                               d¦  «         |‰ j	        z  }‰ j        |z  }‰ j        dk    r€t                               d	‰ j        › �¦  «         t                               d
‰ j        › �¦  «         t                               d|› d�¦  «         t                               d|› d�¦  «         d S )NrQ   zWarm up)ÚfileÚdescc                  óh   •— ‰j         dk    r"‰j        dv r‰j                             ¦   «         nˆfd„S )NÚcpurQ   c                  ó˜   •— ‰j         dk    r<t          j                             ¦   «         rt          j                             ¦   «         nd„ S )Nry   c                  ó   — d S ©N© ©Úkwargss    r#   ú<lambda>z=time_fn.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>  ó   €  € r?   ©ÚdevicerX   ÚcudaÚis_availableÚsynchronize©r   r!   s    €r#   r€   z+time_fn.<locals>.<lambda>.<locals>.<lambda>  óD   ø€ àŒ{˜eÒ#Ð#­¬
×(?Ò(?Ñ(AÔ(AÐ#õ ŒJ×"Ò"Ñ$Ô$Ð$à%Ð%ð r?   )rƒ   r   Ú
io_bindingÚsynchronize_inputsr‡   s    €r#   r€   ztime_fn.<locals>.<lambda>  sM   ø€ àŒ;˜%ÒÐ DÔ$7Ð;^Ð$^Ð$^ð 	Œ×*Ò*Ñ,Ô,Ð,ð
ð 
ð 
ð 
ð r?   c                  óh   •— ‰j         dk    r"‰j        dv r‰j                             ¦   «         nˆfd„S )Nry   rQ   c                  ó˜   •— ‰j         dk    r<t          j                             ¦   «         rt          j                             ¦   «         nd„ S )Nry   c                  ó   — d S r|   r}   r~   s    r#   r€   z=time_fn.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>(  r�   r?   r‚   r‡   s    €r#   r€   z+time_fn.<locals>.<lambda>.<locals>.<lambda>%  rˆ   r?   )rƒ   r   r‰   Úsynchronize_outputsr‡   s    €r#   r€   ztime_fn.<locals>.<lambda>"  sM   ø€ àŒ;˜%ÒÐ DÔ$7Ð;^Ð$^Ð$^ð 	Œ×+Ò+Ñ-Ô-Ð-ð
ð 
ð 
ð 
ð r?   r   Ú	BenchmarkÚ zBatch Size: zSequence Length: z	Latency: rS   zThroughput: z tps)r   ÚrangeÚwarmup_runsr   ÚsysÚstdoutr`   ri   rj   Únum_runsrV   r;   rm   r<   )r!   ÚfnÚinputsÚwarmup_rangeÚoutputsÚ
input_syncÚoutput_syncÚ_Ú
total_timeÚbench_rangerp   rq   ÚlatencyÚ
throughputs   `             r#   Útime_fnr¡     s/  ø€ ð ÔÐ"EÐEÐEõ 	ˆdÔÑÔÐå�DÔ$­3¬:¸IÐFÑFÔFð ð „|ð Ø�"�V‘*”*ˆÝ�Š�GÑÔÐðð ð ð €Jðð ð ð €Kð ð ð ˆØˆ
‰ŒˆØ
ˆˆ6‰
Œ
ˆ
Øˆ‰Œˆˆð €Jð ÔÐ"EÐEÐEõ 	ˆdŒmÑÔÐå�D”M­¬
¸ÐEÑEÔEð ð
 ð 	,ð 	,ˆØˆ
‰ŒˆÝ”Y‘[”[ˆ
à
ˆˆ6‰
Œ
ˆ
àˆ‰ŒˆÝ”9‘;”;ˆà�h Ñ+Ñ+ˆ
ˆ
ð ÔÐ"EÐEÐEÝ�Š�B‰Œˆà˜4œ=Ñ(€GØ” 7Ñ*€Jà„y�A‚~€~Ý�ŠÐ4 4¤?Ð4Ð4Ñ5Ô5Ð5Ý�ŠÐ>¨Ô(<Ð>Ð>Ñ?Ô?Ð?Ý�ŠÐ+ Ð+Ð+Ð+Ñ,Ô,Ð,Ý�ŠÐ3 :Ð3Ð3Ð3Ñ4Ô4Ð4Ø
€Fr?   c                 óN  — d| j         › d| j        › d| j                             ¦   «         › d| j        › d| j        › d|j                             dd¦  «        › d|› dt          j         	                    ¦   «         d›�}d }| j        dv �rt          t          j        t          j        gdd¬¦  «        5 }t          d	¦  «        5   ||¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   |                     d
¬¦  «                             | j        | j        ¬¦  «        }t&          j                             | j        |› d�¦  «        }t/          |d¦  «        5 }|                     |¦  «         d d d ¦  «         n# 1 swxY w Y   n ||¦  «         |› d�}|S )NÚbÚ_srœ   ú-z%Y-%m-%d_%H:%M:%Sr   T)Ú
activitiesÚrecord_shapesÚprofile_memoryÚmodel_inferencer6   )Úgroup_by_stack_n)Úsort_byÚ	row_limitz.logÚwz.json)r;   r<   r   ÚlowerÚ	precisionrƒ   Ú__name__ÚreplaceÚdatetimeÚnowr   r   ÚCPUÚCUDAr   Úkey_averagesÚtableÚpt_filter_byÚpt_num_rowsrf   ÚpathÚjoinÚ
log_folderÚopenÚwrite)	r!   r–   r—   Úinputs_typeÚprefixrs   ÚprofÚ	prof_dataÚfs	            r#   Ú
profile_fnrÄ   R  så  € ð R�”ð  Rð  R DÔ$8ð  Rð  R¸4Ô;N×;TÒ;TÑ;VÔ;Vð  Rð  RÐY]ÔYgð  Rð  RÐjnÔjuð  Rð  RÐxzô  yD÷  yLò  yLð  MPð  RUñ  yVô  yVð  Rð  Rð  Ydð  Rð  Rõ  goô  gx÷  g|ò  g|ñ  g~ô  g~ð  Rð  Rð  R€FØ€HàÔÐ>Ð>Ñ>åÝ(Ô,Õ.>Ô.CÐDÐTXÐimð
ñ 
ô 
ð 	àÝ Ð!2Ñ3Ô3ð ð Ø��6‘
”
�
ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð
 ×%Ò%°qÐ%Ñ9Ô9×?Ò?ÈÔHYÐeiÔeuÐ?ÑvÔvˆ	å”7—<’< ¤°F°°°ÑAÔAˆÝ�(˜CÑ Ô ð 	 AØ�GŠG�IÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	øð
 	ˆˆ6‰
Œ
ˆ
ð Ð#Ð#Ð#ˆà€OsH   Â0C/Ã CÃC/ÃC	ÃC/ÃC	Ã C/Ã/C3Ã6C3Å'F	Æ	FÆFc                 ó  ‡‡— t          j        ¦   «         }t          j        |¦  «        }|                     d¬¦  «          ‰‰¦  «         | j        dk    rHt                               d|                     d ¬¦  «        t          j        d¬¦  «        z  › d�¦  «         t          j
        ¦   «          t          j                             ¦   «          t          | j        dk    ˆˆfd	„¬
¦  «         t           j                             ¦   «          d S )Ngš™™™™™¹?)Úintervalr   zCPU usage: F)Úlogicalú%ry   c                  ó   •—  ‰ ‰¦  «        S r|   r}   )r–   r—   s   €€r#   r€   zmeasure_fn.<locals>.<lambda>|  s   ø€ ¸r¸rÀ&¹z¼z€ r?   )Úis_gpuÚfunc)rf   ÚgetpidÚpsutilÚProcessÚcpu_percentrm   ri   rj   Ú	cpu_countÚgcÚcollectrX   r„   Úempty_cacher   rƒ   r“   r”   Úflush)r!   r–   r—   ÚpidÚprocesss    ``  r#   Ú
measure_fnr×   o  sô   øø€ å
Œ)‰+Œ+€CÝŒn˜SÑ!Ô!€GØ×Ò ÐÑ%Ô%Ð%à€B€v�J„J€JØ„y�A‚~€~Ý�ŠÐi '×"5Ò"5¸tÐ"5Ñ"DÔ"DÅvÔGWÐ`eÐGfÑGfÔGfÑ"fÐiÐiÐiÑjÔjÐjõ „J�L„L€LÝ	„J×ÒÑÔÐÝ˜4œ;¨%Ò/Ð7IÐ7IÐ7IÐ7IÐ7IÐJÑJÔJÐJõ „J×ÒÑÔÐÐÐr?   c                 ó¨  ‡— ˆfd„}|}| j         dk    r ||¦  «          ||¦  «         | j        �r(t          | ||d¦  «        }| j         dk    rv‰j        j                             ¦   «         }t                               d|› d|› �¦  «         t          j	        |t          j
                             | j        |¦  «        ¦  «         t          | ||d¦  «        }| j         dk    rv‰j        j                             ¦   «         }t                               d|› d|› �¦  «         t          j	        |t          j
                             | j        |¦  «        ¦  «         d S t                               d¦  «         t          | ||¦  «         t!          | ||¦  «         t                               d	¦  «         t          | ||¦  «         t!          | ||¦  «         d S )
Nc                 ó   •—  ‰di | ¤Ž}|S )Nr}   r}   ©r—   r™   r"   s     €r#   Ú
get_logitsz$run_hf_inference.<locals>.get_logits„  s   ø€ à�%�/�/˜&�/�/ˆØˆr?   r   Úpromptr   ú	Renaming ú to Útokenú7
Evaluating `model(inputs)` step to get past_key_valuesú5
Evaluating `model(inputs)` step with past_key_values)r   r   rÄ   r   ÚsessionÚend_profilingri   Úwarningrf   Úrenamerº   r»   r¼   Údecoder_with_pastrj   r¡   r×   )r!   r=   r>   r"   rÛ   Úgenerate_fnÚnew_lognameÚold_lognames      `    r#   Úrun_hf_inferencerê   ‚  sÓ  ø€ ðð ð ð ð ð4 €KàÔ˜oÒ-Ð-àˆ�KÑ Ô Ð Øˆ�KÑ Ô Ð à„|ñ Ý   {°KÀÑJÔJˆØÔ (Ò*Ð*àœ-Ô/×=Ò=Ñ?Ô?ˆKÝ�NŠNÐE {ÐEÐE¸ÐEÐEÑFÔFÐFÝŒI�k¥2¤7§<¢<°´ÀÑ#MÔ#MÑNÔNÐNå   {°KÀÑIÔIˆØÔ (Ò*Ð*àÔ1Ô9×GÒGÑIÔIˆKÝ�NŠNÐE {ÐEÐE¸ÐEÐEÑFÔFÐFÝŒI�k¥2¤7§<¢<°´ÀÑ#MÔ#MÑNÔNÐNàˆõ ‡K‚KÐJÑKÔKÐKÝˆD�+˜{Ñ+Ô+Ð+Ýˆt�[ +Ñ.Ô.Ð.å
‡K‚KÐHÑIÔIÐIÝˆD�+˜{Ñ+Ô+Ð+Ýˆt�[ +Ñ.Ô.Ð.Ð.Ð.r?   c                 óÞ  ‡ ‡— ˆ ˆfd„}ˆfd„}ˆfd„}‰ j         dk    r|n|}i }‰ j        �r+ |||¦  «        \  }	}t          ‰ ||	d¦  «        }
‰                     ¦   «         }t                               d|› d|
› �¦  «         t          j        |t          j         	                    ‰ j
        |
¦  «        ¦  «         t          ‰ ¦  «        Š |||¦  «        \  }}t          ‰ ||d¦  «        }
‰                     ¦   «         }t                               d|› d|
› �¦  «         t          j        |t          j         	                    ‰ j
        |
¦  «        ¦  «         d S t                               d	¦  «          |||¦  «        \  }	}t          ‰ ||	¦  «         t          ‰ ||	¦  «         t                               d
¦  «          |||¦  «        \  }}t          ‰ ||¦  «         t          ‰ ||¦  «         d S )Nc                 óÒ   •— t          ‰| ¦  «        } ‰j        dk    rHt          ‰| ‰j        t          ‰j        ¦  «        ‰j        |¦  «        \  }}t          ‰d|¦  «         ||fS | |fS )Nry   r‰   )r   rƒ   r   Úintrm   r0   Úsetattr)r—   Úkv_cache_ortvaluesr‰   r!   r"   s      €€r#   Úprepare_ort_inputsz-run_ort_inference.<locals>.prepare_ort_inputsÁ  s}   ø€ å" 5¨&Ñ1Ô1ˆð Œ;˜%ÒÐÝ-IØ�v˜tœ{­C°´	©N¬N¸DÔ<QÐSeñ.ô .Ñ*ˆJÐ*õ �D˜,¨
Ñ3Ô3Ð3ØÐ1Ð1Ð1àÐ)Ð)Ð)r?   c                 ó2   •— ‰                      | ¦  «         d S r|   )Úrun_with_iobinding)r‰   r"   s    €r#   Úwith_io_bindingz*run_ort_inference.<locals>.with_io_bindingÏ  s   ø€ à× Ò  Ñ,Ô,Ð,Ð,Ð,r?   c                 ó4   •— ‰                      d | ¦  «        }|S r|   )ÚrunrÚ   s     €r#   Úwithout_io_bindingz-run_ort_inference.<locals>.without_io_bindingÓ  s   ø€ à—)’)˜D &Ñ)Ô)ˆØˆr?   ry   rÜ   rÝ   rÞ   rß   rà   rá   )rƒ   r   rÄ   rã   ri   rä   rf   rå   rº   r»   r¼   rt   rj   r¡   r×   )r!   r=   r>   r"   rð   ró   rö   rç   rï   Úort_init_inputsrè   ré   Úort_iter_inputss   `  `         r#   Úrun_ort_inferencerù   À  sB  øø€ ð*ð *ð *ð *ð *ð *ð-ð -ð -ð -ð -ðð ð ð ð ð
 &*¤[°EÒ%9Ð%9�/�/Ð?Q€KØÐà„|ñ Ø.@Ð.@ÀÐN`Ñ.aÔ.aÑ+ˆÐ+Ý   {°OÀXÑNÔNˆð ×)Ò)Ñ+Ô+ˆÝ�ŠÐA ;ÐAÐA°KÐAÐAÑBÔBÐBÝ
Œ	�+�rœwŸ|š|¨D¬O¸[ÑIÔIÑJÔJÐJõ ˜$‘”ˆØ.@Ð.@ÀÐN`Ñ.aÔ.aÑ+ˆÐ+Ý   {°OÀWÑMÔMˆð ×)Ò)Ñ+Ô+ˆÝ�ŠÐA ;ÐAÐA°KÐAÐAÑBÔBÐBÝ
Œ	�+�rœwŸ|š|¨D¬O¸[ÑIÔIÑJÔJÐJØˆõ ‡K‚KÐJÑKÔKÐKØ*<Ð*<¸[ÐJ\Ñ*]Ô*]Ñ'€OÐ'ÝˆD�+˜Ñ/Ô/Ð/Ýˆt�[ /Ñ2Ô2Ð2å
‡K‚KÐHÑIÔIÐIØ*<Ð*<¸[ÐJ\Ñ*]Ô*]Ñ'€OÐ'ÝˆD�+˜Ñ/Ô/Ð/Ýˆt�[ /Ñ2Ô2Ð2Ð2Ð2r?   c                 ó¤   — | j         dv rt          | |||¦  «         d S | j         dv rt          | |||¦  «         d S t          d| j         › �¦  «        ‚)N>   r   r   r   rQ   rF   )r   rê   rù   r   )r!   r=   r>   r"   s       r#   Úrun_inferencerû   û  sn   € ØÔÐHÐHÐHÝ˜˜{¨K¸Ñ?Ô?Ð?Ð?Ð?Ø	Ô	Ð CÐ	CÐ	CÝ˜$ ¨[¸%Ñ@Ô@Ð@Ð@Ð@åÐA¨DÔ,?ÐAÐAÑBÔBÐBr?   c           	      ó¤  — t          j        ¦   «         }|                     ddt          dg d¢¬¦  «         |                     ddt          dd¬	¦  «         |                     d
dddd¬¦  «         |                     dddt          dg d¢d¬¦  «         |                     dt          dd¬¦  «         |                     dt          dd¬¦  «         |                     dt          dd¬¦  «         |                     ddd ¬!¦  «         |                     d"d#d$¬!¦  «         |                     d%d&t          t          j                             ¦   «         rd'nd(d(d'g¬)¦  «         |                     d*d+t          d,¬-¦  «         |                     d.d/t          d0¬-¦  «         |                     d1d2t          d3¬-¦  «         |                     d4t          d5¬-¦  «         |                     d6t          d7¬-¦  «         |                     d8t          d9¬-¦  «         |                     d:dd¬;¦  «         |                     d<t          d=d>¬¦  «         |                     d?t          d@dA¬¦  «         |                     dBdd¬;¦  «         |                     dCt          t          j	         
                    dD¦  «        dE¬¦  «         |                     dFt          ddGdH¬I¦  «         |                     ¦   «         }t          j                             |j        ¦  «         t	          j        |j        ¦  «         dJ|j        v rFt#          |dK|j                             ¦   «         › dL�¦  «         |j        dMk    r|j        dN| if|_        |j        dOk    r|j        s
J dP¦   «         ‚|j        dQv r|j        s
J dR¦   «         ‚|j                             dS¦  «        |_        |j                             dS¦  «        |_        |j        dTv s|j        dUk    r|j        d(k    rdndV|_        |j        r:t9          |j        ¦  «        d9k    rt9          |j        ¦  «        d9k    s
J dW¦   «         ‚|S )XNz-btz--benchmark-typeT)r   r   r   r(   r3   )rc   ÚrequiredÚchoicesz-mz--model-namez<Hugging Face name of model (e.g. 'meta-llama/Llama-2-7b-hf'))rc   rý   Úhelpz-az--authFÚ
store_truez5Use Hugging Face authentication token to access model)ÚdefaultÚactionrÿ   z-pz--precisionÚfp32)Úint4Úint8Úfp16r  zePrecision for model. For ONNX models, the model's precision should be set before running this script.)rý   rc   r  rþ   rÿ   z--hf-pt-dir-pathr�   zNPath to directory containing all PyTorch files (e.g. tokenizer, PyTorch model))rc   r  rÿ   z--hf-ort-dir-pathzhPath to directory containing all ONNX files (e.g. tokenizer, decoder_merged, decoder, decoder_with_past)z--ort-model-pathzPath to ONNX modelz-bz--batch-sizesz1 2)r  z-sz--sequence-lengthsz32 64 128 256 512z-dz--devicer„   ry   )rc   r  rþ   z-idz--device-idr   )rc   r  z-wz--warmup-runsr6   z-nz
--num-runsé
   z--seedé   z--max-lengthé    z--num-return-sequencesr2   z	--profile)r  r  z--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 filesz--cache-dirz./model_cachez-Cache dir where Hugging Face files are stored)rc   rý   r  rÿ   r4   rd   ÚExecutionProviderÚCUDAExecutionProviderÚ	device_idr   z,Please specify a path to `--hf-ort-dir-path`rQ   z+Please specify a path to `--ort-model-path`ú >   r  r  r  r  zOPlease provide only one (batch_size, sequence_length) combination for profiling)ÚargparseÚArgumentParserÚadd_argumentÚstrrX   r„   r…   rí   rf   rº   r»   Ú
parse_argsÚnpÚrandomÚseedÚmanual_seedr   rî   rƒ   Úupperrd   rh   rk   Úbatch_sizesÚsplitÚsequence_lengthsr¯   r   r   )rm   Úparserr!   s      r#   Úget_argsr    s   € ÝÔ$Ñ&Ô&€FØ
×ÒØØÝØð
ð 
ð 
ð ñ ô ð ð ×ÒØØÝØØKð ñ ô ð ð ×ÒØˆh ¨lÐAxð ñ ô ð ð
 ×ÒØØØÝØØ0Ð0Ð0Øtð ñ ô ð ð ×ÒØÝØØ]ð	 ñ ô ð ð ×ÒØÝØØwð	 ñ ô ð ð ×ÒØÝØØ!ð	 ñ ô ð ð ×ÒØØØð ñ ô ð ð
 ×ÒØØØ#ð ñ ô ð ð
 ×ÒØØÝÝœ*×1Ò1Ñ3Ô3Ð>��¸Ø˜�ð ñ ô ð ð ×Ò˜˜}µ3ÀÐÑBÔBÐBØ
×Ò˜˜oµCÀÐÑCÔCÐCØ
×Ò˜˜lµ¸bÐÑAÔAÐAØ
×Ò˜¥s°AÐÑ6Ô6Ð6ð ×Ò˜­S¸"ÐÑ=Ô=Ð=Ø
×ÒÐ0µsÀAÐÑFÔFÐFð ×Ò˜¨U¸<ÐÑHÔHÐHØ
×ÒØ�sÐ,AÐHlð ñ ô ð ð ×Ò˜­c¸4ÐFvÐÑwÔwÐwØ
×Ò˜¨U¸<ÐÑHÔHÐHØ
×Ò˜­S½"¼'¿,º,ÀsÑ:KÔ:KÐRmÐÑnÔnÐnØ
×ÒØÝØØØ<ð ñ ô ð ð ×ÒÑÔ€Dõ „I‡N‚N�4”9ÑÔÐÝ	Ô�d”iÑ Ô Ð ð �Ô#Ð#Ð#Ý�Ð*¨t¬{×/@Ò/@Ñ/BÔ/BÐ,UÐ,UÐ,UÑVÔVÐVØÔ"Ð&=Ò=Ð=Ø'+Ô'>ÀÈdÐ@SÐ&TˆDÔ#ð Ô˜hÒ&Ð&ØÔ#ÐSÐSÐ%SÑSÔSÐ#ØÔÐAÐAÐAØÔ"ÐQÐQÐ$QÑQÔQÐ"àÔ'×-Ò-¨cÑ2Ô2€DÔØ Ô1×7Ò7¸Ñ<Ô<€DÔð ”.Ð$4Ð4Ð4¸¼È6Ò9QÐ9QÐVZÔVaÐejÒVjÐVjˆˆÐqwð 	„Nð
 „|ð 
Ý�4Ô#Ñ$Ô$¨Ò)Ð)­c°$Ô2GÑ.HÔ.HÈAÒ.MÐ.MÐ.MØ]ñ /NÔ.MÐMð €Kr?   c                  ó€  — t          ¦   «         } t          ¦   «         }t          | ¦  «        }t          |j        ¦  «         t
                               |j        ¦  «         dt          j	        j
        _        | |_        ||_        t          j        |j        |j        |j        |j        ¬¦  «        }t'          j        |j        |j        |j        |j        ¬¦  «        }|j        dk    r
d|j        › �n|j        }|j        dk    }t-          |d|¦  «         t-          |d|¦  «         t-          |d|¦  «         t-          |d	|¦  «         t/          |¦  «        }t1          ||¦  «        }|j        d
v r�t5          j        |j                             |j        ¦  «        d¬¦  «        }	t=          t?          d„ |	j         j!        ¦  «        ¦  «        }
|otE          |
¦  «        dk    o
|j        dk    }t-          |d|¦  «         nt-          |dd¦  «         tG          j$        |j%        |j&        ¦  «        D ]’\  }}|j        dk    r!t
                               d|› d|› d�¦  «         t-          |dtO          |¦  «        ¦  «         t-          |dtO          |¦  «        ¦  «         tQ          ||¦  «        \  }}tS          ||||¦  «         Œ“d S )NT)rE   rB   rC   ry   zcuda:r  Ú	tokenizerr8   r:   r*   rQ   F)Úload_external_datac                 ó   — | j         dk    S )NÚGroupQueryAttention)Úop_type)Únodes    r#   r€   zmain.<locals>.<lambda>©  s   € ¨T¬\Ð=RÒ-R€ r?   r   r0   z
Batch size = z and sequence length = z...r;   r<   )*r   r   r  r   r`   ri   rj   Ú__dict__rX   ÚbackendsÚcudnnÚ	benchmarkrm   r5   r   rW   rU   rE   r[   r   rƒ   r¯   rî   rt   r$   r   ÚonnxÚ
load_modelrk   rl   ÚlistÚfilterÚgraphr%  r   Ú	itertoolsÚproductr  r  rí   r    rû   )rm   r5   r!   r   r8   r:   r*   r"   r%   Ú
onnx_modelÚ	gqa_nodesr0   r;   r<   r=   r>   s                   r#   Úmainr3  ‰  s´  € Ý‰:Œ:€DÝ‘”€Jå�D‰>Œ>€DÝ�”ÑÔÐÝ
‡K‚K�”ÑÔÐØ%)…E„NÔÔ"à€D„IØ €D„OÝÔ-ØŒ 4¤>À$Ä)Ð_cÔ_hðñ ô €Iõ Ô'ØŒ 4¤>À$Ä)Ð_cÔ_hðñ ô €Fð ,0¬;¸%Ò+?Ð+?Ð'˜DœIÐ'Ð'Ð'ÀTÄ[€MØŒ~ Ò'€HåˆD�+˜yÑ)Ô)Ð)ÝˆD�(˜FÑ#Ô#Ð#ÝˆD�/ =Ñ1Ô1Ð1ÝˆD�*˜hÑ'Ô'Ð'õ �d‰OŒO€EÝ3°D¸%Ñ@Ô@Ðð ÔÐAÐAÐAÝ”_ TÔ%8×%?Ò%?ÀÄ	Ñ%JÔ%JÐ_dÐeÑeÔeˆ
Ý�Ð RÐ RÐT^ÔTdÔTiÑjÔjÑkÔkˆ	à#ÐS­¨I©¬¸Ò(:ÐS¸t¼{ÈeÒ?SÐÝ�Ð(Ð*:Ñ;Ô;Ð;Ð;å�Ð(¨%Ñ0Ô0Ð0õ (1Ô'8¸Ô9IÈ4ÔK`Ñ'aÔ'að =ð =Ñ#ˆ
�OØŒ9˜Š>ˆ>Ý�KŠKÐa¨*ÐaÐaÈ_ÐaÐaÐaÑbÔbÐbÝ��l¥C¨
¡O¤OÑ4Ô4Ð4Ý�Ð'­¨_Ñ)=Ô)=Ñ>Ô>Ð>å#-¨dÐ4HÑ#IÔ#IÑ ˆ�[Ý�d˜K¨°eÑ<Ô<Ð<Ð<ð=ð =r?   Ú__main__)r   )8r  r²   rÑ   r/  Úloggingrf   r“   rV   Únumpyr  r*  rÍ   rX   Úbenchmark_helperr   r   Údist_settingsr   r   Úllama_inputsr   r   r	   r
   r   r   Úoptimum.onnxruntimer   Útorch.profilerr   r   r   Útqdmr   Útransformersr   r   r   Úonnxruntimer4   Ú	getLoggerr°   ri   r$   Ú	Namespacerí   r    rt   r¡   rÄ   r×   rê   rù   rû   r  r3  r}   r?   r#   ú<module>rA     sˆ  ðð €€€Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø 
€
€
€
Ø €€€à Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 4Ð 3Ð 3Ð 3Ð 3Ð 3Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ Ð Ð Ð Ð Ð Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ Hà Ð Ð Ð à	ˆÔ	˜8Ñ	$Ô	$€ð
#ð 
#ð 
#ð$�XÔ'ð $¸sð $ð $ð $ð $ðDR�HÔ&ð Rð Rð Rð RðjCð Cð CðLð ð ð:ð ð ð&;/ð ;/ð ;/ð|83ð 83ð 83ðvCð Cð CðBð Bð Bð BðJ/=ð /=ð /=ðd ˆzÒÐØ€D�F„F€F€F€Fð Ðr?   