§
    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 d dlm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlmZmZmZmZmZ d d	lmZmZmZ d
ej        d<    e j        e¦  «        Zdej         iZ!d.d„Z"d„ Z#d„ Z$ej%        fd„Z&d„ Z'd„ Z(d„ Z)d„ Z*	 d/d„Z+de,de,de-de.de.de
de.de.fd„Z/de,d e,d!e,fd"„Z0d#„ Z1	 d/d$„Z2d%„ Z3d0d'„Z4d(„ Z5d)„ Z6d*„ Z7d+„ Z8d,„ Z9d-„ Z:dS )1é    N)ÚPath)ÚAffinitySetting)ÚOptimizerInfoÚ	PrecisionÚcreate_onnxruntime_session)ÚMODEL_CLASSES)ÚQuantizeHelper)Útorch_onnx_export)Ú
AutoConfigÚAutoFeatureExtractorÚAutoTokenizerÚLxmertConfigÚTransfoXLConfig)ÚPRETRAINED_GPT2_MODELSÚGPT2ModelNoPastStateÚTFGPT2ModelNoPastStateÚ2ÚTF_CPP_MIN_LOG_LEVELÚtriuc                 óà  — |�J ‚t          | j        ¦  «        dk    r,|                      d¦  «        |                      d¦  «        k    sJ ‚t          d         } |t	          j        dt          j        ¬¦  «        |¦  «        }|d |                      d¦  «        …d |                      d¦  «        …f         }t	          j        |                     ¦   «         | t	          j	        | ¦  «        ¦  «        S )Né   r   é   r   )é   r   ©Údtype)
ÚlenÚshapeÚsizeÚ
torch_funcÚtorchÚonesÚuint8ÚwhereÚboolÚ
zeros_like)ÚxÚdiagonalÚoutÚ
torch_triuÚtemplateÚmasks         úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/onnxruntime/transformers/onnx_exporter.pyÚ	triu_onnxr-   #   sÀ   € Øˆ;ˆ;ˆ;ÝˆqŒw‰<Œ<˜1ÒÐ §¢¨¡¤¨a¯fªf°Q©i¬iÒ!7Ð!7Ð!7Ð7å˜FÔ#€JØˆz�%œ* \½¼ÐEÑEÔEÀxÑPÔP€HØ�K�a—f’f˜Q‘i”i�K  1§6¢6¨!¡9¤9 Ð,Ô-€DÝŒ;�t—y’y‘{”{ A¥uÔ'7¸Ñ':Ô':Ñ;Ô;Ð;ó    c                  ó(   — t           t          _        d S ©N)r-   r    r   © r.   r,   Úreplace_torch_functionsr2   -   s   € Ý…E„J€J€Jr.   c                  ó4   — t           d         t          _        d S )Nr   )r   r    r   r1   r.   r,   Úrestore_torch_functionsr4   1   s   € Ý˜FÔ#…E„J€J€Jr.   c                 óh  — |j         dv rOt          j                             |d|j        |j        ¦  «                             t          j        ¦  «        }d|i}|S t          j                             d| dz
  ||f|¬¦  «        }d|i}d|v rt          j        ||g|¬	¦  «        }||d<   d
|v rt          j	        ||g|¬	¦  «        }	|	|d
<   |j
        r||d<   t          |t          ¦  «        rŒt          j                             dd|j        ¦  «                             t          j        ¦  «        |d<   t          j                             dd|j        ¦  «                             t          j        ¦  «        |d<   t          |t           ¦  «        r)t          j	        |j        gt          j        ¬	¦  «        |d<   |S )N©ÚvitÚswiné   Úpixel_valuesr   r   ©ÚlowÚhighr   r   Ú	input_idsÚattention_maskr   Útoken_type_idsÚdecoder_input_idsÚvisual_featsÚ
visual_posz@tf_transfo_xl_model/transformer/pos_emb/einsum/Einsum/inputs_1:0)Ú
model_typeÚnumpyÚrandomÚrandÚ
image_sizeÚastypeÚfloat32Úrandintr!   ÚzerosÚis_encoder_decoderÚ
isinstancer   ÚrandnÚvisual_feat_dimÚvisual_pos_dimr   Úhidden_size)
Ú
vocab_sizeÚ
batch_sizeÚsequence_lengthÚinput_namesÚconfigÚ	data_typer>   Úinputsr?   Úsegment_idss
             r,   Úcreate_onnxruntime_inputr[   5   s¸  € ØÔ˜OÐ+Ð+Ý”L×%Ò% j°!°VÔ5FÈÔHYÑZÔZ×aÒaÕbgÔboÑpÔpˆ	Ø  )Ð,ˆØˆå”×$Ò$¨°¸a±ÀzÐSbÐFcÐktÐ$ÑuÔu€IØ˜9Ð%€Fà˜;Ð&Ð&Ýœ Z°Ð$AÈÐSÑSÔSˆØ#1ˆÐÑ à˜;Ð&Ð&Ý”k :¨Ð"?ÀyÐQÑQÔQˆØ#.ˆÐÑ àÔ ð 0Ø&/ˆÐ"Ñ#å�&�,Ñ'Ô'ð eÝ!&¤×!3Ò!3°A°q¸&Ô:PÑ!QÔ!Q×!XÒ!XÕY^ÔYfÑ!gÔ!gˆˆ~ÑÝ$œ|×1Ò1°!°Q¸Ô8MÑNÔN×UÒUÕV[ÔVcÑdÔdˆˆ|ÑÝ�&�/Ñ*Ô*ð 
ÝUZÔU`ØÔÐ ­¬ðV
ñ V
ô V
ˆÐQÑRð €Mr.   c                 ó2   — i }|D ]}|| v r| |         ||<   Œ|S r0   r1   )rY   rV   Úremaining_model_inputsÚ
input_names       r,   Úfilter_inputsr_   S   s;   € ØÐØ!ð Dð Dˆ
Ø˜ÐÐØ17¸
Ô1CÐ" :Ñ.øØ!Ð!r.   c                 óX   — t          | t          t          f¦  «        rd„ | D ¦   «         n| gS )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS r1   )Úflatten©Ú.0Úis     r,   ú
<listcomp>zflatten.<locals>.<listcomp>\   s   € Ð(Ð(Ð(˜A�W�Q‰ZŒZÐ(Ð(Ð(r.   )rN   ÚlistÚtuple)rY   s    r,   rb   rb   [   s3   € Ý,6°vÅÅe¸}Ñ,MÔ,MÐYÐ(Ð( Ð(Ñ(Ô(Ð(ÐSYÐZÐZr.   c                 ó’   — | D ]C}t          |t          t          f¦  «        s|                     |¦  «        nt	          ||¦  «         ŒD|S r0   )rN   rg   rh   ÚappendÚupdate_flatten_list)rY   Úres_listre   s      r,   rk   rk   _   sN   € Øð eð eˆÝ",¨Qµµu°Ñ">Ô">Ðdˆ�Š˜ÑÔÐÕDWÐXYÐ[cÑDdÔDdøøØ€Or.   c                 óV  — | d         j         d         }d„ | D ¦   «         }d„ t          t          |¦  «        ¦  «        D ¦   «         }t          |¦  «        D ]Q\  }}ddi||<   ||         j         }t          |¦  «        D ](\  }}	|	|k    r||                              |di¦  «         Œ)ŒR||fS )Nr>   éÿÿÿÿc                 ó   — i | ]}|d ddœ“Œ	S )rT   Úseq_len)r   r   r1   ©rd   Úkeys     r,   ú
<dictcomp>z&build_dynamic_axes.<locals>.<dictcomp>h   s"   € ÐSÐSÐS¸S�C˜\¨iÐ8Ð8ÐSÐSÐSr.   c                 ó8   — g | ]}d t          |dz   ¦  «        z   ‘ŒS )Úoutput_r   )Ústrrc   s     r,   rf   z&build_dynamic_axes.<locals>.<listcomp>j   s'   € ÐPÐPÐP¨q�I¥ A¨¡E¡
¤
Ñ*ÐPÐPÐPr.   r   rT   rp   )r   Úranger   Ú	enumerateÚupdate)
Úexample_inputsÚoutputs_flattenrU   Údynamic_axesÚoutput_namesre   Úoutput_nameÚdimsÚjÚdims
             r,   Úbuild_dynamic_axesr‚   e   sÚ   € Ø$ [Ô1Ô7¸Ô;€OàSÐSÀNÐSÑSÔS€LàPÐPµE½#¸oÑ:NÔ:NÑ4OÔ4OÐPÑPÔP€LÝ# LÑ1Ô1ð Að A‰ˆˆ;Ø%&¨Ð$5ˆ�[Ñ!Ø˜qÔ!Ô'ˆÝ ‘o”oð 	Að 	A‰FˆAˆsØ�oÒ%Ð%Ø˜[Ô)×0Ò0°!°Y°Ñ@Ô@Ð@øð	Að ˜Ð%Ð%r.   c           	      ó0  — t          | |d¬¦  «        }|€t                               | › d�¦  «         dS t                               | › d�¦  «         d„ |                     ¦   «         D ¦   «         }|                     ||¦  «        }t          |¦  «        t          |¦  «        k    r<t                               dt          |¦  «        › dt          |¦  «        › �¦  «         dS t          t          |¦  «        ¦  «        D ]û}	t          j	        t          j
        ||	         ||	                              ¦   «                              ¦   «         z
  ¦  «        ¦  «        }
|
dk    r t                               d	|
› d
|	› �¦  «         |rdnd}|rdnd}t          j        ||	         ||	                              ¦   «                              ¦   «         ||¬¦  «        s&t                               d|	› d|› d|› �¦  «          dS Œüt                               d| › �¦  «         dS )NF)Úenable_all_optimizationz is an invalid ONNX modelz is a valid ONNX modelc                 ó>   — i | ]\  }}||                      ¦   «         “ŒS r1   )rE   )rd   ÚkÚts      r,   rs   z'validate_onnx_model.<locals>.<dictcomp>„   s&   € ÐJÐJÐJ©4¨1¨a˜!˜QŸWšW™YœYÐJÐJÐJr.   z"Number of output tensors expected z, got g-Cëâ6?zMax absolute diff=z for output tensor gš™™™™™©?gš™™™™™¹?)ÚrtolÚatolzOutput tensor z is not close: rtol=z, atol=z0inference result of onnxruntime is validated on T)r   ÚloggerÚerrorÚinfoÚitemsÚrunr   rw   rE   ÚamaxÚabsÚcpuÚallclose)Úonnx_model_pathrz   Úexample_outputs_flattenÚuse_gpuÚfp16r}   Útest_sessionÚexample_ort_inputsÚexample_ort_outputsre   Úabs_diffrˆ   r‰   s                r,   Úvalidate_onnx_modelr›   t   sA  € õ .¨o¸wÐ`eÐfÑfÔf€LØÐÝ�Š˜ÐBÐBÐBÑCÔCÐCØˆuå
‡K‚K�?Ð:Ð:Ð:Ñ;Ô;Ð;ð KÐJ°>×3GÒ3GÑ3IÔ3IÐJÑJÔJÐØ&×*Ò*¨<Ð9KÑLÔLÐÝ
Ð"Ñ#Ô#¥sÐ+>Ñ'?Ô'?Ò?Ð?Ý�ŠØoµÐ5LÑ1MÔ1MÐoÐoÕUXÐYlÑUmÔUmÐoÐoñ	
ô 	
ð 	
ð ˆuå•3Ð.Ñ/Ô/Ñ0Ô0ð ð ˆÝ”:�eœiÐ(;¸AÔ(>ÐAXÐYZÔA[×A_ÒA_ÑAaÔAa×AgÒAgÑAiÔAiÑ(iÑjÔjÑkÔkˆØ�dŠ?ˆ?Ý�KŠKÐM¨XÐMÐMÈ!ÐMÐMÑNÔNÐNàÐ&ˆuˆu $ˆØÐ&ˆuˆu $ˆÝŒ~Ø Ô"Ø# AÔ&×*Ò*Ñ,Ô,×2Ò2Ñ4Ô4ØØð	
ñ 
ô 
ð 	õ �LŠLÐT¨!ÐTÐTÀÐTÐTÈdÐTÐTÑUÔUÐUØ�5�5ð	õ ‡K‚KÐTÀ?ÐTÐTÑUÔUÐUØˆ4r.   Úonnx_dirÚ
model_nameÚinput_countÚoptimized_by_scriptr•   Ú	precisionÚoptimized_by_onnxruntimeÚuse_external_datac                 óh  — ddl m}  |dd|¦  «        }	|s|	› d|› �}
n|rdnd}|	› d|› d|› d|› �}
|r|
dz  }
| }|rU|sSt          j                             | |
¦  «        }t          j                             |¦  «        st          j        |¦  «         t          j                             ||
› d�¦  «        S )	Nr   )Úsubz[^a-zA-Z0-9_]Ú_Úgpur‘   Ú_ortz.onnx)Úrer¤   ÚosÚpathÚjoinÚexistsÚmakedirs)rœ   r�   rž   rŸ   r•   r    r¡   r¢   r¤   Únormalized_model_nameÚfilenameÚdeviceÚ	directorys                r,   Úget_onnx_file_pathr²       sû   € ð ÐÐÐÐÐà˜CÐ 0°#°zÑBÔBÐàð QØ+Ð;Ð;¨kÐ;Ð;ˆˆà!Ð,�� uˆØ+ÐPÐP¨kÐPÐP¸IÐPÐPÈÐPÐPˆàð Ø�FÑˆà€Iàð #Ð!9ð #Ý”G—L’L ¨8Ñ4Ô4ˆ	ÝŒw�~Š~˜iÑ(Ô(ð 	#ÝŒK˜	Ñ"Ô"Ð"åŒ7�<Š<˜	 hÐ#5Ð#5Ð#5Ñ6Ô6Ð6r.   Ú	file_pathÚsuffixÚreturnc                 ó®   — t          | ¦  «        }t          |j                             |j        |z   ¦  «                             |j        ¦  «        ¦  «        S )a  
    Append a suffix at the filename (before the extension).
    Args:
        path: pathlib.Path The actual path object we would like to add a suffix
        suffix: The suffix to add
    Returns: path with suffix appended at the end of the filename and before extension
    )r   rv   ÚparentÚjoinpathÚstemÚwith_suffixr´   )r³   r´   rª   s      r,   Úadd_filename_suffixr»   Á   sD   € õ �	‰?Œ?€DÝˆtŒ{×#Ò# D¤I°Ñ$6Ñ7Ô7×CÒCÀDÄKÑPÔPÑQÔQÐQr.   c                 ó"  — |st           j                             |¦  «        sPt          |¦  «        j                             dd¬¦  «         ddlm}m}  || ||d¬¦  «        } ||¦  «        ||<   d S t           
                    d|› �¦  «         d S )NT©ÚparentsÚexist_okr   )Úget_fusion_statisticsÚoptimize_by_onnxruntimeéc   )r•   Úoptimized_model_pathÚ	opt_levelú'Skip optimization since model existed: )r©   rª   r¬   r   r·   ÚmkdirÚ	optimizerrÀ   rÁ   rŠ   rŒ   )r“   Úort_model_pathr•   Ú	overwriteÚmodel_fusion_statisticsrÀ   rÁ   r¥   s           r,   Úoptimize_onnx_model_by_ortrË   Í   sÂ   € Øð P�œŸš ~Ñ6Ô6ð PÝˆ^ÑÔÔ#×)Ò)°$ÀÐ)ÑFÔFÐFØLÐLÐLÐLÐLÐLÐLÐLð $Ð#ØØØ!/Øð	
ñ 
ô 
ˆð 3HÐ2GÈÑ2WÔ2WÐ Ñ/Ð/Ð/å�ŠÐN¸nÐNÐNÑOÔOÐOÐOÐOr.   c           
      ó²  — |s t           j                             |¦  «        �st          |¦  «        j                             dd¬¦  «         ddlm} ddlm	} |€ ||¦  «        }| 
                    |¦  «         |t          j        k    rd|_        |t          j        k    rd|_        |dk    rd}d} || |||d||d¬¦  «        }|d	k    s|d
k    r|                     ¦   «          |                     ¦   «         |	|<   |t          j        k    r|                     d¬¦  «         |                     ||
¦  «         d S t(                               d|› �¦  «         d S )NTr½   r   )ÚFusionOptions)Úoptimize_modelFr8   )Ú	num_headsrR   rÄ   Úoptimization_optionsr•   Úonly_onnxruntimeÚ
bert_kerasÚbert_tf)Úkeep_io_typesrÅ   )r©   rª   r¬   r   r·   rÆ   Úfusion_optionsrÍ   rÇ   rÎ   Úuse_raw_attention_maskr   ÚFLOAT16Úenable_gelu_approximationÚINT8Úenable_embed_layer_normÚuse_dynamic_axesÚget_fused_operator_statisticsÚconvert_float_to_float16Úsave_model_to_filerŠ   rŒ   )r“   rÃ   rD   Únum_attention_headsrR   r•   r    rÖ   rÉ   rÊ   Úuse_external_data_formatrÐ   rÍ   rÎ   Ú	opt_models                  r,   Úoptimize_onnx_modelrâ   Þ   s³  € ð ð *V�œŸšÐ';Ñ<Ô<ñ *VÝÐ!Ñ"Ô"Ô)×/Ò/¸ÀtÐ/ÑLÔLÐLà0Ð0Ð0Ð0Ð0Ð0Ø,Ð,Ð,Ð,Ð,Ð,àÐ'Ø#0 =°Ñ#<Ô#<Ð Ø×3Ò3Ð4JÑKÔKÐKØ�	Ô)Ò)Ð)Ø=AÐ Ô:Ø�	œÒ&Ð&Ø;@Ð Ô8ð ˜ÒÐØ"#ÐØˆKð
 #�NØØØ)Ø#ØØ!5ØØ"ð	
ñ 	
ô 	
ˆ	ð ˜Ò%Ð%¨°yÒ)@Ð)@Ø×&Ò&Ñ(Ô(Ð(à8A×8_Ò8_Ñ8aÔ8aÐÐ 4Ñ5à�	Ô)Ò)Ð)Ø×.Ò.¸TÐ.ÑBÔBÐBà×$Ò$Ð%9Ð;SÑTÔTÐTÐTÐTå�ŠÐTÐ>RÐTÐTÑUÔUÐUÐUÐUr.   c                 ó"  — |�5|t           v r|S t          dd                     t           ¦  «        z   ¦  «        ‚| t          v rdS dd l}|                     d| ¦  «        �dS |                     d| ¦  «        �dS |                     d	| ¦  «        �d
S dS )NzValid model class: ú r   r   z-squad$ÚAutoModelForQuestionAnsweringz-mprc$Ú"AutoModelForSequenceClassificationÚgpt2ÚAutoModelWithLMHeadÚ	AutoModel)r   Ú	Exceptionr«   r   r¨   Úsearch)r�   Úcustom_model_classr¨   s      r,   Úmodelclass_dispatcherrí     s§   € ØÐ%Ø¥Ð.Ð.Ø%Ð%åÐ1°C·H²H½]Ñ4KÔ4KÑKÑLÔLÐLàÕ+Ð+Ð+Ø%Ð%à€I€I€Ià	‡y‚y�˜JÑ'Ô'Ð3Ø.Ð.Ø	�Š�8˜ZÑ	(Ô	(Ð	4Ø3Ð3Ø	�Š�6˜:Ñ	&Ô	&Ð	2Ø$Ð$àˆ;r.   Fc                 óJ  — t          | |¦  «        }|dk    r0|rt          j        | ||¬¦  «        S t          j        | ||¬¦  «        S |rd|z   }t	          d|g¬¦  «        }t
                               d|› �¦  «         t          ||¦  «        }|                     | ||¬¦  «        S )Nr   )rW   Ú	cache_dirÚTFÚtransformers)ÚfromlistzModel class name: )rí   r   Úfrom_pretrainedr   Ú
__import__rŠ   rŒ   Úgetattr)r�   rW   rï   rì   Úis_tf_modelÚmodel_class_nameÚtransformers_moduleÚmodel_classs           r,   Úload_pretrained_modelrú   /  sÍ   € Ý,¨ZÐ9KÑLÔLÐàÐ1Ò1Ð1Øð 	hÝ)Ô9¸*ÈVÐ_hÐiÑiÔiÐiå'Ô7¸
È6Ð]fÐgÑgÔgÐgàð 3ØÐ"2Ñ2Ðå$ ^Ð?OÐ>PÐQÑQÔQÐÝ
‡K‚KÐ7Ð%5Ð7Ð7Ñ8Ô8Ð8ÝÐ-Ð/?Ñ@Ô@€Kà×&Ò& z¸&ÈIÐ&ÑVÔVÐVr.   c                 ó´   — t          j        | |¬¦  «        }t          |d¦  «        rd|_        |                     |¦  «         t          | |||¬¦  «        }||fS )N©rï   Úreturn_dictF)rW   rï   rì   )r   ró   Úhasattrrý   Úmodifyrú   )r�   rù   rï   Úconfig_modifierrW   Úmodels         r,   Úload_pt_modelr  B  sf   € ÝÔ'¨
¸iÐHÑHÔH€FÝˆv�}Ñ%Ô%ð #Ø"ˆÔà×Ò˜6Ñ"Ô"Ð"å! *°VÀyÐepÐqÑqÔq€Eà�5ˆ=Ðr.   c                 óô   — t          j        | |¬¦  «        }|                     |¦  «         t          ¦   «         }|                     ¦   «          t          | |||d¬¦  «        }|                     ¦   «          ||fS )Nrü   T)rW   rï   rì   rö   )r   ró   rÿ   r   Úget_affinityrú   Úset_affinity)r�   rù   rï   r   rW   Úaffinity_settingr  s          r,   Úload_tf_modelr  N  sŒ   € ÝÔ'¨
¸iÐHÑHÔH€Fà×Ò˜6Ñ"Ô"Ð"õ 'Ñ(Ô(ÐØ×!Ò!Ñ#Ô#Ð#Ý!ØØØØ&Øðñ ô €Eð ×!Ò!Ñ#Ô#Ð#à�5ˆ=Ðr.   c                 ó2   — ddl m}  || ¦  «        \  }}||fS )Nr   )Útf2pt_pipeline)Úconvert_tf_models_to_pytorchr	  )r�   r	  rW   r  s       r,   Úload_pt_model_from_tfr  c  s3   € ð <Ð;Ð;Ð;Ð;Ð;à"�N :Ñ.Ô.�M€FˆEà�5ˆ=Ðr.   c                 ó0  — d}|rt          ||||d|¦  «        }|j        t          j        j        k    r
|||j        fS |j        t          j        j        k    s |t          j        k    s|t          j        k    rÍt          || t          |¦  «        d||d|¦  «        }t          ||||j        |j        |||	|
|||¦  «         |}|r"t          |||||t          j        k    |¦  «        }|t          j        k    rPt                               d|› �¦  «         t!          j        |||¦  «         t                               d|› �¦  «         |j        t          j        j        k    r%|r#t'          |d¦  «        }t)          ||||
|¦  «         |||dv r|j        n|j        fS )NTFzQuantizing model: zFinished quantizing model: r§   r6   )r›   Únamer   ÚNOOPTrS   ÚBYSCRIPTr   r×   rÙ   r²   r   râ   rß   rR   rŠ   rŒ   r	   Úquantize_onnx_modelÚBYORTr»   rË   Ú
num_labels)r�   rà   rD   rœ   rV   r•   r    Úoptimize_infoÚvalidate_onnxrÖ   rÉ   rW   rÊ   r“   rz   r”   r}   rÕ   Úis_valid_onnx_modelrÃ   rÈ   s                        r,   Úvalidate_and_optimize_onnxr  m  s  € ð( ÐØð 
Ý1ØØØ#ØØØñ
ô 
Ðð Ô�]Ô0Ô5Ò5Ð5ØÐ 3°VÔ5FÐFÐFð 	Ô�mÔ4Ô9Ò9Ð9Ø�	Ô)Ò)Ð)Ø�	œÒ&Ð&å1ØØÝ�ÑÔØØØØØ$ñ	 
ô 	 
Ðõ 	ØØ ØØÔ&ØÔØØØ"ØØ#Ø$Øñ	
ô 	
ð 	
ð /ˆØð 	Ý"5ØØØ'ØØ�YÔ.Ò.Øñ#ô #Ðð �	œÒ&Ð&Ý�KŠKÐ>¨_Ð>Ð>Ñ?Ô?Ð?ÝÔ.¨ÀÐQiÑjÔjÐjÝ�KŠKÐG°oÐGÐGÑHÔHÐHàÔ�]Ô0Ô5Ò5Ð5Øð 	Ý0°À&ÑIÔIˆNÝ&ØØØØØ'ñô ð ð 	ØØ'¨?Ð:Ð:ˆÔÐÀÔ@Qðð r.   c                 ó„  — t          | |||¦  «        \  }}|                     ¦   «          d }d }|dv r€t          j        | |¬¦  «        }t          j                             dd|j        |j        z  dz  t          j        ¬¦  «         	                    |j        |j        d¦  «        } ||d¬¦  «        }n4t          j        | |¬¦  «        }|j        }|                     d	d¬¦  «        }t          ||¦  «        } |di |¤Ž}t          |t          t           f¦  «        sJ d
t#          |¦  «        › �¦   «         ‚t%          |¦  «        }t'          |g ¦  «        }t)          || t+          |¦  «        d|	|
d|¦  «        }|st,          j                             |¦  «        sät2                               d|› �¦  «         t7          |¦  «        j                             dd¬¦  «         d }d }|dv rd„ |D ¦   «         dg}}nt=          ||¦  «        \  }}t?          ¦   «          tA          |t!          | !                    ¦   «         ¦  «        |t          | "                    ¦   «         ¦  «        ||d||¬¦	  «	         tG          ¦   «          nt2                               d|› �¦  «         tI          | |||||	|
|||||||||d |¦  «        \  }}}||||fS )Nr6   rü   r   é   r9   r;   Úpt)Úreturn_tensorsúThis is a sample inputz%type of output is not list or tuple: FúExporting ONNX model to Tr½   c                 ó   — i | ]}|d di“ŒS )r   r:   r1   rq   s     r,   rs   z-export_onnx_model_from_pt.<locals>.<dictcomp>  s   € Ð)]Ð)]Ð)]Às¨#°°>Ð/BÐ)]Ð)]Ð)]r.   Úlogits)	r  ÚargsÚfrV   r}   r|   Údo_constant_foldingÚopset_versionrà   ú!Skip export since model existed: r1   )%r  r‘   r   ró   rE   rF   rK   rH   r"   Úreshaper   Úmodel_max_lengthÚencode_plusr_   rN   rg   rh   Útyperb   rk   r²   r   r©   rª   r¬   rŠ   rŒ   r   r·   rÆ   r‚   r2   r
   ÚvaluesÚkeysr4   r  ) r�   r"  rà   rD   rù   r   rï   rœ   rV   r•   r    Úoptimizer_infor  rÖ   rÉ   rÊ   rÕ   rW   r  rz   Úmax_input_sizeÚimage_processorÚdataÚ	tokenizerÚexample_outputsr”   r“   r|   r}   Úonnx_model_filer  rS   s                                    r,   Úexport_onnx_model_from_ptr1  Î  s6  € õ& " *¨k¸9ÀoÑVÔV�M€FˆEà	‡I‚I�K„K€Kà€NØ€Nà�_Ð$Ð$Ý.Ô>¸zÐU^Ð_Ñ_Ô_ˆÝŒ|×#Ò#Ø˜ &Ô"3°fÔ6GÑ"GÈ!Ñ"KÕSXÔS^ð $ñ 
ô 
ç
Š'�&Ô# VÔ%6¸Ñ
:Ô
:ð 	ð )˜¨¸dÐCÑCÔCˆˆå!Ô1°*È	ÐRÑRÔRˆ	Ø"Ô3ˆØ"×.Ò.Ð/GÐX\Ð.Ñ]Ô]ˆå" >°;Ñ?Ô?€Nà�eÐ-Ð-˜nÐ-Ð-€Oå�o­­e }Ñ5Ô5ÐvÐvÐ7vÕ_cÐdsÑ_tÔ_tÐ7vÐ7vÑvÔvÐ5õ & oÑ6Ô6ÐÝ1Ð2IÈ2ÑNÔNÐå(ØØÝˆKÑÔØØØØØ ñ	ô 	€Oð ð K�œŸš Ñ7Ô7ð KÝ�ŠÐ@¨Ð@Ð@ÑAÔAÐAÝˆ_ÑÔÔ$×*Ò*°4À$Ð*ÑGÔGÐGàˆØˆà˜Ð(Ð(Ø)]Ð)]ÈnÐ)]Ñ)]Ô)]Ð`hÐ_i˜,ˆLˆLå);¸NÐLcÑ)dÔ)dÑ&ˆL˜,åÑ!Ô!Ð!ÝØÝ�~×,Ò,Ñ.Ô.Ñ/Ô/ØÝ˜^×0Ò0Ñ2Ô2Ñ3Ô3Ø%Ø%Ø $Ø'Ø%=ð
	
ñ 
	
ô 
	
ð 
	
õ 	 Ñ!Ô!Ð!Ð!å�ŠÐI¸ÐIÐIÑJÔJÐJå7QØØ ØØØØØØØØØØØØØØØØñ%8ô 8Ñ4€OÐ(¨*ð* Ð/°¸^ÐKÐKr.   c                 ób  — dd l }|j                             g d¦  «         t          j        | |¬¦  «        }|j        €|                     ddi¦  «         |j        }t          | |||¦  «        \  }}| 	                    t          |¦  «        ¦  «         |                     dd|dd	¬
¦  «        }t          ||¦  «        }|j        r"|                     dd|dd	¬
¦  «        j        |d<   | dk    rJ|j                             dd|j        g¦  «        |d<   |j                             dd|j        g¦  «        |d<   	 |j        rd|_        n# t(          $ r Y nw xY w ||d¬¦  «        }d }| dk    s| dk    rdg}|d         }ddlm} |                     |¦  «        }t1          || t          |¦  «        d|	|
d|¦  «        }|r
|d d…         n|}|s t2          j                             |¦  «        �süt8                               d|› �¦  «         |s)t=          |¦  «        j                              d	d	¬¦  «         dd l!}dd l"}|j#         $                    |j#        j%        ¦  «         g }| &                    ¦   «         D ]Z\  } }!d gt          |!j'        ¦  «        z  }"| (                    | )                    tU          |"¦  «        |!j+        | ¬¦  «        ¦  «         Œ[|j,         -                    |tU          |¦  «        |||¬¦  «        \  }#}#|rå| .                    |d¦  «        5 }$|$ /                    t2          j         0                    |¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   t2          j         1                    t2          j         0                    |¦  «        d¦  «        }t2          j                             |¦  «        rt3          j2        |¦  «         t3          j3        ||¦  «         nt8                               d|› �¦  «         |dz   }ti          | |||||	|
|||||||||||¦  «        \  }%}&}'|%|&|'|fS )Nr   ÚGPUrü   Ú	pad_tokenz[PAD]r  ÚtfÚ
max_lengthT)r  r6  ÚpaddingÚ
truncationrA   zunc-nlp/lxmert-base-uncasedr   rB   rC   F)Útrainingzxlnet-base-casedzxlnet-large-casedÚlast_hidden_state)Únestéûÿÿÿr  r½   )r  )Úinput_signatureÚopsetÚlarge_modelÚoutput_pathÚrz__MODEL_PROTO.onnxr#  Ú_tf)5Ú
tensorflowrW   Úset_visible_devicesr   ró   r4  Úadd_special_tokensr%  r  Úresize_token_embeddingsr   r&  r_   rM   r>   rF   ÚnormalrP   rQ   Ú	use_cacherê   Útensorflow.python.utilr;  rb   r²   r©   rª   r¬   rŠ   rŒ   r   r·   rÆ   ÚzipfileÚtf2onnxÚloggingÚ	set_levelÚERRORr�   r   rj   Ú
TensorSpecrh   r   ÚconvertÚ
from_kerasÚZipFileÚ
extractallÚdirnamer«   ÚremoveÚrenamer  )(r�   r"  rà   rD   rù   r   rï   rœ   rV   r•   r    r*  r  rÖ   rÉ   rÊ   rÕ   r5  r.  r+  rW   r  rz   r/  r}   r;  r”   r“   Útf_internal_model_pathrJ  rK  Úspecsr  Úvaluer   r¥   ÚzÚoptimized_onnx_pathr  rS   s(                                           r,   Úexport_onnx_model_from_tfr\  =  s"  € ð( ÐÐÐà„I×!Ò! " eÑ,Ô,Ð,åÔ-¨jÀIÐNÑNÔN€IàÔÐ"Ø×$Ò$ k°7Ð%;Ñ<Ô<Ð<ØÔ/€Nå! *¨k¸9ÀoÑVÔV�M€FˆEØ	×!Ò!¥# i¡.¤.Ñ1Ô1Ð1à×*Ò*Ø ØØ!ØØð +ñ ô €Nõ # >°;Ñ?Ô?€NàÔ ð Ø.7×.CÒ.CØ$ØØ%Ø Øð /Dñ /
ô /
ô ð 	Ð*Ñ+ð Ð2Ò2Ð2Ø)+¬×)9Ò)9¸1¸aÀÔAWÐ:XÑ)YÔ)Yˆ�~Ñ&Ø')¤y×'7Ò'7¸¸A¸vÔ?TÐ8UÑ'VÔ'Vˆ�|Ñ$ðàÔð 	%Ø$ˆFÔøøÝð ð ð Øˆðøøøð �e˜N°UÐ;Ñ;Ô;€OØ€Lð Ð'Ò'Ð'¨:Ð9LÒ+LÐ+LØ+Ð,ˆØ)Ð*=Ô>ˆð ,Ð+Ð+Ð+Ð+Ð+à"Ÿlšl¨?Ñ;Ô;Ðå(ØØÝˆKÑÔØØØØØ ñ	ô 	€Oð 6NÐb˜_¨S¨b¨SÔ1Ð1ÐSbÐàð K�œŸšÐ'=Ñ>Ô>ñ KÝ�ŠÐ@¨Ð@Ð@ÑAÔAÐAØ'ð 	SÝÐ'Ñ(Ô(Ô/×5Ò5¸dÈTÐ5ÑRÔRÐRàˆˆˆàˆˆˆàŒ×!Ò! '¤/Ô"7Ñ8Ô8Ð8ØˆØ)×/Ò/Ñ1Ô1ð 	Mð 	M‰KˆD�%Ø�6�C ¤Ñ,Ô,Ñ,ˆDØ�LŠL˜Ÿš¥u¨T¡{¤{°E´KÀd˜ÑKÔKÑLÔLÐLÐLØŒ×)Ò)ØÝ! %™LœLØØ0Ø.ð *ñ 
ô 
‰ˆˆ1ð $ð 	?à—’Ð!7¸Ñ=Ô=ð FÀØ—’�RœWŸ_š_Ð-CÑDÔDÑEÔEÐEðFð Fð Fñ Fô Fð Fð Fð Fð Fð Fð Føøøð Fð Fð Fð Få%'¤W§\¢\µ"´'·/²/ÐBXÑ2YÔ2YÐ[oÑ%pÔ%pÐ"ÝŒw�~Š~˜oÑ.Ô.ð +Ý”	˜/Ñ*Ô*Ð*ÝŒIÐ,¨oÑ>Ô>Ð>øõ 	�ŠÐI¸ÐIÐIÑJÔJÐJà˜eÑ#€JÝ;UØØ ØØØØØØØØØØØØØØØØñ%<ô <Ñ8ÐÐ,¨jð, 	ØØØð	ð s$   Ä6E Å
EÅEÌ3MÍMÍM)r   Nr0   )F);rL  r©   Úpathlibr   rE   r    Úaffinity_helperr   Úbenchmark_helperr   r   r   Úhuggingface_modelsr   Úquantize_helperr	   Útorch_onnx_export_helperr
   rñ   r   r   r   r   r   Ú0onnxruntime.transformers.models.gpt2.gpt2_helperr   r   r   ÚenvironÚ	getLoggerÚ__name__rŠ   r   r   r-   r2   r4   Úint64r[   r_   rb   rk   r‚   r›   rv   Úintr$   r²   r»   rË   râ   rí   rú   r  r  r  r  r1  r\  r1   r.   r,   ú<module>ri     s3  ðð €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð à €€€Ø €€€Ø +Ð +Ð +Ð +Ð +Ð +Ø QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QØ ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø *Ð *Ð *Ð *Ð *Ð *Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø gÐ gÐ gÐ gÐ gÐ gÐ gÐ gÐ gÐ gÐ gÐ gÐ gÐ gðð ð ð ð ð ð ð ð ð ð &)€„
Ð!Ñ "à	ˆÔ	˜8Ñ	$Ô	$€ð �e”jÐ!€
ð<ð <ð <ð <ðð ð ð$ð $ð $ð fkÔepð ð ð ð ð<"ð "ð "ð[ð [ð [ðð ð ð&ð &ð &ð* ð)ð )ð )ð )ðX7Øð7àð7ð ð7ð ð	7ð
 ð7ð ð7ð #ð7ð ð7ð 7ð 7ð 7ðB	R 3ð 	R°ð 	R¸ð 	Rð 	Rð 	Rð 	RðPð Pð Pð: ð8Vð 8Vð 8Vð 8Vðvð ð ð,Wð Wð Wð Wð&	ð 	ð 	ðð ð ð*ð ð ð^ð ^ð ^ðBlLð lLð lLð^Rð Rð Rð Rð Rr.   