
    h-`                        S SK r S SKrS SKJr  S SKrS SKrS SKJr  S SKJ	r	J
r
Jr  S SKJr  S SKJr  S SKJr  S SKJrJrJrJrJr  S S	KJrJrJr  S
\R8                  S'   \ R:                  " \5      rS\R@                  0r!S-S jr"S r#S r$\RJ                  4S jr&S r'S r(S r)S r* S.S jr+S\,S\,S\-S\.S\.S\
S\.S\.4S jr/S\,S \,S!\,4S" jr0S# r1 S.S$ jr2S% r3S/S& jr4S' r5S( r6S) r7S* r8S+ r9S, r:g)0    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                    Ub   e[        U R                  5      S:X  a$  U R                  S5      U R                  S5      :X  d   e[        S   nU" [        R
                  " S[        R                  S9U5      nUS U R                  S5      2S U R                  S5      24   n[        R                  " UR                  5       U [        R                  " U 5      5      $ )N   r      r   )   r   dtype)
lenshapesize
torch_functorchonesuint8wherebool
zeros_like)xdiagonalout
torch_triutemplatemasks         `/var/www/fran/franai/venv/lib/python3.13/site-packages/onnxruntime/transformers/onnx_exporter.py	triu_onnxr-   #   s    ;;qww<1affQi!777F#J%**\ExPHKaffQiK166!9,-D;;tyy{Au'7'7':;;    c                  "    [         [        l        g N)r-   r    r    r.   r,   replace_torch_functionsr2   -   s	    EJr.   c                  (    [         S   [        l        g )Nr   )r   r    r   r1   r.   r,   restore_torch_functionsr4   1   s    F#EJr.   c                    UR                   S;   aY  [        R                  R                  USUR                  UR                  5      R                  [        R                  5      nSU0nU$ [        R                  R                  SU S-
  X4US9nSU0nSU;   a  [        R                  " X/US	9nXS'   S
U;   a  [        R                  " X/US	9n	XS
'   UR                  (       a  XgS'   [        U[        5      (       a  [        R                  R                  SSUR                  5      R                  [        R                  5      US'   [        R                  R                  SSUR                  5      R                  [        R                  5      US'   [        U[         5      (       a1  [        R                  " UR"                  /[        R                  S	9US'   U$ )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+LL%%j!V5F5FHYHYZaabgbobop	 ),$$azFckt$uI9%F;&Z$AS#1 ;&kk:"?yQ#.   &/"#&,''!&!3!3Aq&:P:P!Q!X!XY^YfYf!g~$||11!Q8M8MNUUV[VcVcd|&/**UZU`U` V
QR Mr.   c                 6    0 nU H  nX0;   d  M
  X   X#'   M     U$ r0   r1   )rY   rV   remaining_model_inputs
input_names       r,   filter_inputsr_   S   s,    !
171C". " "!r.   c                     [        U [        [        45      (       a  U  Vs/ s H  n[        U5      PM     sn/$ U /$ s  snf r0   )rN   listtupleflatten)rY   is     r,   rc   rc   [   s:    ,6ve},M,M(AWQZ(ZZSYZZ(s   <c                     U  H<  n[        U[        [        45      (       d  UR                  U5        M1  [	        X!5        M>     U$ r0   )rN   ra   rb   appendupdate_flatten_list)rY   res_listrd   s      r,   rg   rg   _   s6    ",Qu">">DWXYDd Or.   c                    U S   R                   S   nU  Vs0 s H  o3SSS._M
     nn[        [        U5      5       Vs/ s H  nS[        US-   5      -   PM     nn[	        U5       HI  u  pWSS0XG'   X   R                   n[	        U5       H!  u  pX:X  d  M  XG   R                  U	S05        M#     MK     XF4$ s  snf s  snf )	Nr>   rT   seq_len)r   r   output_r   r   )r   ranger   str	enumerateupdate)example_inputsoutputs_flattenrU   keydynamic_axesrd   output_namesoutput_namedimsjdims              r,   build_dynamic_axesrz   e   s    $[177;ODRSNS\i88NLS49#o:N4OP4OqIAE
*4OLP#L1%&$5!!''oFA%)00!Y@ & 2 %% TPs
   B6B;c           	         [        XSS9nUc  [        R                  U  S35        g[        R                  U  S35        UR	                  5        VVs0 s H  u  pxXxR                  5       _M     n	nnUR                  XY5      n
[        U5      [        U
5      :w  a.  [        R                  S[        U5       S[        U
5       35        g[        [        U5      5       H  n[
        R                  " [
        R                  " X   X+   R                  5       R                  5       -
  5      5      nUS:  a  [        R                  SU S	U 35        U(       a  S
OSnU(       a  SOSn[
        R                  " X   X+   R                  5       R                  5       UUS9(       a  M  [        R                  SU SU SU 35          g   [        R                  SU  35        gs  snnf )NF)enable_all_optimizationz is an invalid ONNX modelz is a valid ONNX modelz"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itemsrE   runr   rm   amaxabscpuallclose)onnx_model_pathrq   example_outputs_flattenuse_gpufp16ru   test_sessionktexample_ort_inputsexample_ort_outputsrd   abs_diffr}   r~   s                  r,   validate_onnx_modelr   t   s    .o`efL((ABC
KK?##9:; 4B3G3G3IJ3I41!WWY,3IJ&**<L
"#s+>'??05L1M0NfUXYlUmTno	
 3./0::eii(;(>AXA[A_A_AaAgAgAi(ijkd?KK,XJ6I!MNu$u$~~"#&**,224	
 
 LL>!,@gdVTU 1  KKB?BSTU3 Ks   Gonnx_dir
model_nameinput_countoptimized_by_scriptr   	precisionoptimized_by_onnxruntimeuse_external_datac                    SSK Jn  U" SSU5      n	U(       d  U	 SU 3n
OU(       a  SOSnU	 SU SU SU 3n
U(       a  U
S-  n
U nU(       a`  U(       dY  [        R                  R	                  X
5      n[        R                  R                  U5      (       d  [        R                  " U5        [        R                  R	                  X S35      $ )	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      0#zB+,Ak];!u+,Ak]!I;axPFI!9GGLL4	ww~~i((KK	"77<<	Zu#566r.   	file_pathsuffixreturnc                     [        U 5      n[        UR                  R                  UR                  U-   5      R                  UR                  5      5      $ )z
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   rn   parentjoinpathstemwith_suffixr   )r   r   r   s      r,   add_filename_suffixr      s?     	?Dt{{##DII$67CCDKKPQQr.   c                    U(       d$  [         R                  R                  U5      (       d?  [        U5      R                  R                  SSS9  SSKJnJn  U" U UUSS9nU" U5      XA'   g [        R                  SU 35        g )NTparentsexist_okr   )get_fusion_statisticsoptimize_by_onnxruntimec   )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      sv    ~66^##))$)FL $!/	
 3H2W/=n=MNOr.   c                    U(       d$  [         R                  R                  U5      (       d  [        U5      R                  R                  SSS9  SSKJn  SSKJ	n  Uc  U" U5      nUR                  U5        U[        R                  :X  a  SUl        U[        R                  :X  a  SUl        US:X  a  SnSnU" U UUUSUUSS9nUS	:X  d  US
:X  a  UR!                  5         UR#                  5       X'   U[        R                  :X  a  UR%                  SS9  UR'                  X5        g [(        R+                  SU 35        g )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      s7    ';<<!"))//t/L0,'#0#< 334JK	)))=A :	&;@ 8 "#K
 #)#!5"	
	 %y)@&&(8A8_8_8a5	)))..T.B$$%9T=>R=STUr.   c                     Ub-  U[         ;   a  U$ [        SSR                  [         5      -   5      eU [        ;   a  gSS KnUR                  SU 5      b  gUR                  SU 5      b  gUR                  S	U 5      b  g
g)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~    %.%%1CHH]4KKLL++%	yyJ'3.	8Z	(	43	6:	&	2$r.   c                    [        X5      nUS:X  a1  U(       a  [        R                  " XUS9$ [        R                  " XUS9$ U(       a  SU-   n[	        SU/S9n[
        R                  SU 35        [        Xe5      nUR                  XUS9$ )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L11)99*_hii'77
]fgg"22$^?O>PQ
KK$%5$678-@K&&zI&VVr.   c                     [         R                  " XS9n[        US5      (       a  SUl        UR	                  U5        [        XX!S9nXE4$ )Nr   return_dictF)rW   r   r   )r   r   hasattrr   modifyr   )r   r   r   config_modifierrW   models         r,   load_pt_modelr   B  sI    ''
HFv}%%"6"!*yqE=r.   c                     [         R                  " XS9nUR                  U5        [        5       nUR	                  5         [        U UUUSS9nUR                  5         XF4$ )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  sf    ''
HF6" '(!!#!&E !!#=r.   c                 (    SSK Jn  U" U 5      u  p#X#4$ )Nr   )tf2pt_pipeline)convert_tf_models_to_pytorchr   )r   r   rW   r   s       r,   load_pt_model_from_tfr  c  s     <":.MF=r.   c                    SnU(       a  [        UUUUSU5      nUR                  [        R                  R                  :X  a  UUUR                  4$ UR                  [        R
                  R                  :X  d(  U[        R                  :X  d  U[        R                  :X  a  [        UU [        U5      SUUSU5      n[        UUUUR                  UR                  UUU	U
UUU5        UnU(       a!  [        UUUUU[        R                  :H  U5      nU[        R                  :X  aG  [        R                  SU 35        [         R"                  " XU5        [        R                  SU 35        UR                  [        R$                  R                  :X  a"  U(       a  ['        US5      n[)        UUUU
U5        UUUS;   a  UR*                  4$ UR                  4$ )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   rq   r   ru   r   is_valid_onnx_modelr   r   s                        r,   validate_and_optimize_onnxr  m  s   ( 1#
 ]00555 3V5F5FFF 	m44999	)))	&1$	 
 	 &&"#$	
 /"5'Y...# 	&KK,_,=>?..QijKK5o5FGH]005550&IN&' 	'?:  AG@Q@Q r.   c                    [        XXe5      u  nnUR                  5         S nS nUS;   a  [        R                  " XS9n[        R
                  R                  SSUR                  UR                  -  S-  [        R                  S9R                  UR                  UR                  S5      nU" USS9nO0[        R                  " XS9nUR                  nUR                  S	SS9n[        UU5      nU" S0 UD6n[        U[        [         45      (       d   S
[#        U5       35       e[%        U5      n['        U/ 5      n[)        UU [+        U5      SU	U
SU5      nU(       d$  [,        R.                  R1                  U5      (       d  [2        R5                  SU 35        [7        U5      R8                  R;                  SSS9  S nS nUS;   a  U Vs0 s H  nUSS0_M
     snS/nnO[=        UU5      u  nn[?        5         [A        U[!        URC                  5       5      U[        URE                  5       5      UUSUUS9	  [G        5         O[2        R5                  SU 35        [I        U UUUUU	U
UUUUUUUUUS U5      u  nnn UUU U4$ s  snf )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   r:   logits)	r   argsfrV   ru   rt   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   ra   rb   typerc   rg   r   r   r   r   r   r   r   r   r   r   rz   r2   r
   valueskeysr4   r  )!r   r  r   rD   r   r   r   r   rV   r   r   optimizer_infor  r   r   r   r   rW   r   rq   max_input_sizeimage_processordata	tokenizerexample_outputsr   r   rt   ru   rs   onnx_model_filer  rS   s!                                    r,   export_onnx_model_from_ptr'    s   & "*9VMFE	IIKNN_$.>>z_||##&"3"3f6G6G"G!"KSXS^S^ $ 

'&##V%6%6
: 	 )dC!11*R	"33"../GX\.]">;?N-n-Ooe}55v9^_cds_t^u7vv5 &o612I2N(K 	O 77..?@A_$$**4$*G(N\)]ns#>/B*Bn)]`h_i,L,);NLc)d&L,!~,,./^0023%% $'%=
	
 	 !77HIJ7Q %84O(** /^KKS *^s   Jc                 L   SS K nUR                  R                  / S5        [        R                  " XS9nUR
                  c  UR                  SS05        UR                  n[        XXe5      u  nnUR                  [        U5      5        UR                  SSUSS	S
9n[        UU5      nUR                  (       a   UR                  SSUSS	S
9R                  US'   U S:X  aV  UR                  R!                  SSUR"                  /5      US'   UR                  R!                  SSUR$                  /5      US'    UR&                  (       a  SUl        U" USS9nS nU S:X  d  U S:X  a  S/nUS   nSSKJn  UR/                  U5      n[1        UU [        U5      SU	U
SU5      nU(       a  US S OUnU(       d%  [2        R4                  R7                  U5      (       Gd  [8        R;                  SU 35        U(       d#  [=        U5      R>                  RA                  S	S	S9  SS K!nSS K"nURF                  RI                  URF                  RJ                  5        / nURM                  5        HR  u  n n!S /[        U!RN                  5      -  n"URQ                  URS                  [U        U"5      U!RV                  U S95        MT     URX                  R[                  U[U        U5      UUUS9u    n#U(       a  UR]                  US5       n$U$R_                  [2        R4                  Ra                  U5      5        S S S 5        [2        R4                  Rc                  [2        R4                  Ra                  U5      S5      n[2        R4                  R7                  U5      (       a  [2        Rd                  " U5        [2        Rf                  " UU5        O[8        R;                  SU 35        US-   n[i        U UUUUU	U
UUUUUUUUUUU5      u  n%n&n'U%U&U'U4$ ! [(         a     GNf = f! , (       d  f       N= f)Nr   GPUr   	pad_tokenz[PAD]r  tf
max_lengthT)r  r,  padding
truncationrA   zunc-nlp/lxmert-base-uncasedr   rB   rC   F)trainingzxlnet-base-casedzxlnet-large-casedlast_hidden_state)nestr  r   )r  )input_signatureopsetlarge_modeloutput_pathrz__MODEL_PROTO.onnxr  _tf)5
tensorflowrW   set_visible_devicesr   r   r*  add_special_tokensr  r   resize_token_embeddingsr   r  r_   rM   r>   rF   normalrP   rQ   	use_cacher   tensorflow.python.utilr1  rc   r   r   r   r   r   r   r   r   r   zipfiletf2onnxlogging	set_levelERRORr   r   rf   
TensorSpecrb   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   r+  r$  r!  rW   r   rq   r%  ru   r1  r   r   tf_internal_model_pathr@  rA  specsr  valuerw   r   zoptimized_onnx_pathr  rS   s(                                           r,   export_onnx_model_from_tfrR  =  s   ( II!!"e,--jNI"$$k7%;<//N!*9VMFE	!!#i.1** ! + N #>;?N  .7.C.C$%  /D /
 ) 	*+ 22)+)9)91aAWAW:X)Y~&')yy'7'7Av?T?T8U'V|$$F NU;OL '':9L+L+,)*=> ,"ll?;(K 	O 6N_Sb1Sb'=>>..?@A''(//55dT5R!!'//"7"78)//1KD%6C,,DLLuT{EKKdKL 2 ))!%L0. * 
1 $!7=RWW__-CDE >%'WW\\"''//BX2Y[o%p"ww~~o..		/*II,o> 	77HIJe#J;U %<8,j, 		 g  f >=s   7P ;/P
PP
P#)r   Nr0   )F);rB  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_   rc   rg   rz   r   rn   intr$   r   r   r   r   r   r   r   r   r  r  r'  rR  r1   r.   r,   <module>r_     s[    	    + Q Q , * 6 g g  &)

! "			8	$ ejj!
<$ fkepep <"[&* )X777 7 	7
 7 7 #7 7B	R3 	R 	R 	RP: 8Vv,W&	*^BlL^Rr.   