§
    kŠtj    ã                   ó¤   — d dl Z d dlZd dlmZ d dlZd dlZd dlmZm	Z	 d dl
mZmZmZ d„ Zdd„Z	 dd
efd„Zd„ Zd„ Zedk    r e¦   «          dS dS )é    N)ÚPath)Úcreate_sessionÚonnxruntime_inference)Úgenerate_test_dataÚget_bert_inputsÚoutput_test_datac                 óð   — dd l }d }|r|j        j        }t          j        d¬¦  «        }t          | ||rdnd||¦  «        }d„ |                     ¦   «         D ¦   «         }t          |||¦  «        \  }	}
|	|
|fS )Nr   F)ÚlogicalÚcudaÚcpuc                 ó   — g | ]	}|j         ‘Œ
S © )Úname)Ú.0Úoutputs     úk/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/onnxruntime/transformers/compare_bert_results.pyú
<listcomp>zrun_model.<locals>.<listcomp>   s   € ÐDÐDÐD F�F”KÐDÐDÐDó    )ÚonnxruntimeÚGraphOptimizationLevelÚORT_DISABLE_ALLÚpsutilÚ	cpu_countr   Úget_outputsr   )Ú
model_pathÚ
all_inputsÚuse_gpuÚdisable_optimizationr   Úgraph_optimization_levelÚintra_op_num_threadsÚsessionÚoutput_namesÚresultsÚlatency_lists              r   Ú	run_modelr%      s§   € ØÐÐÐà#ÐØð VØ#.Ô#EÔ#UÐ å!Ô+°EÐ:Ñ:Ô:ÐåØ�G wÐ9˜V˜V°EÐ;OÐQiñô €Gð EÐD¨g×.AÒ.AÑ.CÔ.CÐDÑDÔD€LÝ1°'¸:À|ÑTÔTÑ€Gˆ\Ø�L ,Ð.Ð.r   çš™™™™™¹?çü©ñÒMbP?c                 óR  — d}d}d}d}t          | ¦  «        D �]Œ\  }	}
t          t          |
¦  «        ¦  «        D �]h}||	         |         }t          j        ||
|         z
  ¦  «        }t          j        |¦  «        }|r<||k    r6t          d|¦  «         t          d|¦  «         t          d|
|         ¦  «         t          j        ||k    ¦  «        }|j        }||z  dz  }t          ||¦  «        }t          ||¦  «        }t          j
        |
|                              ¦   «         |                     ¦   «         ||¬¦  «        s_|r]d}|d	z  }|rTt          d
|	› d|› �¦  «         t          d|
|                              ¦   «         › d|› �¦  «         t          d|› �¦  «         �Œj�ŒŽ|dk    r't          dt          | ¦  «        › d|› d|› d�¦  «         n)t          d|› dt          | ¦  «        › d|› d|› d�	¦  «         t          d|› �¦  «         t          d|› d|d›d�¦  «         ||fS )Nr   TÚabs_diffÚ	treatmentÚbaselineéd   )ÚrtolÚatolFé   zcase z output z	baseline=z
treatment=z	abs_diff=z100% passed for z& random inputs given thresholds (rtol=z, atol=z).z	WARNING: z out of z) results NOT passed for thresholds (rtol=zmaximum absolute difference=z1maximum percentage of elements that exceeds atol=z is z.3fú%)Ú	enumerateÚrangeÚlenÚnpÚabsÚamaxÚprintÚsumÚsizeÚmaxÚallcloseÚtolist)Úbaseline_resultsÚtreatment_resultsÚverboser-   r.   Ú
diff_countÚmax_abs_diffÚmax_diff_percentageÚcase_passedÚtest_case_idr#   ÚiÚtreatment_outputÚabs_diff_tensorr)   Úcount_exceedingÚtotal_elementsÚpercentage_exceedings                     r   ÚcomparerK   $   sÍ  € à€JØ€LØÐØ€KÝ!*Ð+;Ñ!<Ô!<ð 6ñ 6Ñˆ�gÝ•s˜7‘|”|Ñ$Ô$ð 	6ñ 	6ˆAØ0°Ô>¸qÔAÐÝ œfÐ%5¸À¼
Ñ%BÑCÔCˆOÝ”w˜Ñ/Ô/ˆHØð .˜8 dš?˜?Ý�j (Ñ+Ô+Ð+Ý�kÐ#3Ñ4Ô4Ð4Ý�j '¨!¤*Ñ-Ô-Ð-å œf _°tÒ%;Ñ<Ô<ˆOØ,Ô1ˆNØ$3°nÑ$DÈÑ#KÐ Ý"%Ð&9Ð;OÑ"PÔ"PÐå˜|¨XÑ6Ô6ˆLÝ”;˜w qœz×0Ò0Ñ2Ô2Ð4D×4KÒ4KÑ4MÔ4MÐTXÐ_cÐdÑdÔdð 6Øð 6Ø"'�KØ !‘O�Jàð 6ÝÐ? lÐ?Ð?¸AÐ?Ð?Ñ@Ô@Ð@ÝÐ]¨'°!¬*×*;Ò*;Ñ*=Ô*=Ð]Ð]ÐK[Ð]Ð]Ñ^Ô^Ð^ÝÐ4¨(Ð4Ð4Ñ5Ô5Ð5ùñ/	6ð2 �Q‚€ÝÐs¥Ð%5Ñ!6Ô!6ÐsÐsÐ^bÐsÐsÐkoÐsÐsÐsÑtÔtÐtÐtåð B˜
ð  Bð  B­CÐ0@Ñ,AÔ,Að  Bð  BÐlpð  Bð  BÐy}ð  Bð  Bð  Bñ	
ô 	
ð 	
õ 
Ð
7¨Ð
7Ð
7Ñ8Ô8Ð8Ý	Ð
b¸dÐ
bÐ
bÐH[Ð
bÐ
bÐ
bÐ
bÑcÔcÐcØ˜Ð$Ð$r   é   Údictionary_sizec                 ó  — t          ||||¦  «        \  }}}|dk    rt          |dz  ¦  «        n|}t          |||||||||d||¬¦  «        }t          | ||d¬¦  «        \  }}}|r(t	          dt          j        |¦  «        dz  › d�¦  «         |�&t          |¦  «        D ]\  }}t          |||¦  «         Œt          |||d¬¦  «        \  }}}|r(t	          d	t          j        |¦  «        dz  › d�¦  «         t          ||||	|
¦  «        S )
Né   T)rM   )r   z7baseline average latency (all optimizations disabled): iè  z msFztreatment average latency: )
r   Úintr   r%   r7   Ú
statisticsÚmeanr1   r   rK   )Úbaseline_modelÚoptimized_modelÚ
output_dirÚ
batch_sizeÚsequence_lengthr   Ú
test_casesÚseedr?   r-   r.   Úinput_ids_nameÚsegment_ids_nameÚinput_mask_nameÚ	mask_typerM   Ú	input_idsÚsegment_idsÚ
input_maskÚaverage_sequence_lengthr   r=   Úbaseline_latencyr"   rE   Úinputsr>   Útreatment_latencyÚtreatment_output_namess                                r   Úrun_testrf   P   s‘  € õ& *9Ø˜Ð)9¸?ñ*ô *Ñ&€Iˆ{˜Jð
 ;JÈQÒ:NÐ:N�c /°AÑ"5Ñ6Ô6Ð6ÐTcÐÝ#ØØØØØØØØØØØØ'ðñ ô €Jõ 8AØ˜
 GÀ$ð8ñ 8ô 8Ñ4ÐÐ&¨ð ð wÝÐuÍ
ÌÐXhÑHiÔHiÐlpÑHpÐuÐuÐuÑvÔvÐvàÐÝ" :Ñ.Ô.ð 	4ð 	4‰IˆAˆvÝ˜Z¨¨FÑ3Ô3Ð3Ð3åCLØ˜ WÀ5ðDñ Dô DÑ@ÐÐ(Ð*@ð ð \ÝÐZ­J¬OÐ<MÑ,NÔ,NÐQUÑ,UÐZÐZÐZÑ[Ô[Ð[õ Ð#Ð%6¸ÀÀtÑLÔLÐLr   c                  ó0  — t          j        ¦   «         } |                      ddt          d¬¦  «         |                      ddt          d d¬¦  «         |                      dd	t          d d
¬¦  «         |                      ddt          d¬¦  «         |                      ddt          d¬¦  «         |                      dd	t
          dd¬¦  «         |                      dd	t
          dd¬¦  «         |                      dd	t          dd¬¦  «         |                      dd	t          dd¬¦  «         |                      dd	dd¬¦  «         |                      d	¬¦  «         |                      d d	dd!¬¦  «         |                      d	¬"¦  «         |                      d#d	t          d d$¬¦  «         |                      d%d	t          d d&¬¦  «         |                      d'd	t          d d(¬¦  «         |                      d)d	t          d*d+¬¦  «         |                      ¦   «         }|S ),Nz--baseline_modelTzbaseline onnx model path.)ÚrequiredÚtypeÚhelpz--optimized_modelzMpath of the optimized model. It shall have same inputs as the baseline model.)rh   ri   Údefaultrj   z--output_dirFzEoutput test data path. If not specified, test data will not be saved.z--batch_sizezbatch size of inputz--sequence_lengthz maximum sequence length of inputz--rtolr'   zrelative tolerancez--atolg-Cëâ6?zabsolute tolerancez	--samplesr,   z$number of test cases to be generatedz--seedé   zrandom seedz	--use_gpuÚ
store_truezuse GPU)rh   Úactionrj   )r   z	--verbosezprint verbose information)r?   z--input_idszinput name for input idsz--segment_idszinput name for segment idsz--input_maskzinput name for attention maskz--mask_typerO   zmmask type: (1: mask index or sequence length, 2: raw 2D mask, 3: key len, cumulated lengths of query and key))ÚargparseÚArgumentParserÚadd_argumentÚstrrP   ÚfloatÚset_defaultsÚ
parse_args)ÚparserÚargss     r   Úparse_argumentsrx   Œ   s¥  € ÝÔ$Ñ&Ô&€FØ
×ÒÐ*°TÅÐJeÐÑfÔfÐfà
×ÒØØÝØØ\ð ñ ô ð ð ×ÒØØÝØØTð ñ ô ð ð ×Ò˜°½CÐF[ÐÑ\Ô\Ð\à
×ÒØØÝØ/ð	 ñ ô ð ð ×Ò˜¨5µuÀdÐQeÐÑfÔfÐfà
×Ò˜¨5µuÀdÐQeÐÑfÔfÐfà
×ÒØØÝØØ3ð ñ ô ð ð ×Ò˜¨5µsÀAÈMÐÑZÔZÐZà
×Ò˜¨e¸LÈyÐÑYÔYÐYØ
×Ò ÐÑ&Ô&Ð&à
×ÒØØØØ(ð	 ñ ô ð ð ×Ò ÐÑ&Ô&Ð&à
×ÒØØÝØØ'ð ñ ô ð ð ×ÒØØÝØØ)ð ñ ô ð ð ×ÒØØÝØØ,ð ñ ô ð ð ×ÒØØÝØØ|ð ñ ô ð ð ×ÒÑÔ€DØ€Kr   c                  óV  — t          ¦   «         } | j        �+t          | j        ¦  «        }|                     dd¬¦  «         t	          | j        | j        | j        | j        | j        | j	        | j
        | j        | j        | j        | j        | j        | j        | j        | j        ¦  «         d S )NT)ÚparentsÚexist_ok)rx   rU   r   Úmkdirrf   rS   rT   rV   rW   r   ÚsamplesrY   r?   r-   r.   r^   r_   r`   r]   )rw   Úpaths     r   Úmainr   ä   s¥   € ÝÑÔ€Dà„Ð"å�D”OÑ$Ô$ˆØ�
Š
˜4¨$ˆ
Ñ/Ô/Ð/åØÔØÔØŒØŒØÔØŒØŒØŒ	ØŒØŒ	ØŒ	ØŒØÔØŒØŒñô ð ð ð r   Ú__main__)r&   r'   )rL   )ro   rQ   Úpathlibr   Únumpyr4   r   Úbert_perf_testr   r   Úbert_test_datar   r   r   r%   rK   rP   rf   rx   r   Ú__name__r   r   r   ú<module>r†      s  ðð €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø €€€Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ Pð/ð /ð /ð$)%ð )%ð )%ð )%ðx  ð!9Mð 9Mð  ð!9Mð 9Mð 9Mð 9MðxUð Uð Uðpð ð ð6 ˆzÒÐØ€D�F„F€F€F€Fð Ðr   