
    h                         S SK r S SKrS SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
Jr  \ R                  " \5      r " S S\5      rg)	    N)FusionGptAttention)FusionGptAttentionMegatron)FusionGptAttentionNoPast)FusionRotaryAttention)BertOnnxModelc                   4   ^  \ rS rSrU 4S jrS rS rSrU =r$ )Gpt2OnnxModel   c                 &   > [         TU ]  XU5        g )N)super__init__)selfmodel	num_headshidden_size	__class__s       b/var/www/fran/franai/venv/lib/python3.13/site-packages/onnxruntime/transformers/onnx_model_gpt2.pyr   Gpt2OnnxModel.__init__   s    ;7    c                    [        U R                  R                  R                  5      S:X  d-  [        U R                  R                  R                  5      S:X  a&  [        X R                  5      nUR                  5         OJ[        X R                  5      nUR                  5         [        X R                  5      nUR                  5         [        X R                  U R                  5      nUR                  5         g )N   )lenr   graphinputoutputr   r   applyr   r   r   r   )r   fusions     r   fuse_attentionGpt2OnnxModel.fuse_attention   s    tzz%%&!+s4::3C3C3J3J/Kq/P-dNNCFLLN'nn=FLLN/nnEFLLN&t-=-=t~~Nr   c                 &   [         R                  S5        U R                  5       nU R                  5       nSnU R	                  S5       GH  nU R                  USUSS9nU R                  USS/SS/U5      nUc8  U R                  USS	/SS/U5      nUc  U R                  USS
/SS/U5      nUc  Mi  Uu  pxU R                  SS5      n	[        R                  R                  SU	S-   UR                  S   /U	S-   /U	S9n
U R                  SS5      n[        R                  R                  SU	S-   UR                  S   /US-   /US9nU R                  UR                  S   US-   5        U R                  UR                  S   U	S-   5        U	S-   UR                  S'   U R                  UR                  S   US-   5        U R                  U
5        U R                  U5        US-  nGM     U R                  5         [         R!                  SU 35        g)z
Remove extra reshape nodes.
zstart postprocessing...r   GemmReshapeF)	recursiveFastGeluNLayerNormalizationSkipLayerNormalizationMatMulFullyConnect_MatMul_inputr   _output)inputsoutputsnameAddFullyConnect_Add   z#postprocess: remove Reshape count: )loggerdebuginput_name_to_nodesoutput_name_to_nodeget_nodes_by_op_typefind_first_child_by_typematch_parent_pathcreate_node_nameonnxhelper	make_noder   replace_input_of_all_nodesr   add_nodeprune_graphinfo)r   r3   r4   reshape_count	gemm_nodereshape_after_gemmnodesreshape_before_gemm	root_nodematmul_node_namematmul_nodeadd_node_namer=   s                r   postprocessGpt2OnnxModel.postprocess"   sf    	./"668"668226:I!%!>!>9&9U "? " **9y*6MPQSTvWjkE}.. 45F'	 = 22!"$<=A+	E } /4, #44X?TU++//(83Y__Q5GH)I56%	 0 K !11%9KLM{{,,(94iooa6HI&23"	 - H ++,>,E,Ea,H-ZcJcd ++I,<,<Q,?AQT\A\]"2X"=IQ++,>,E,Ea,H-ZcJcdMM+&MM(#QMm ;p 	9-IJr    )	__name__
__module____qualname____firstlineno__r   r   rI   __static_attributes____classcell__)r   s   @r   r	   r	      s    8CK CKr   r	   )loggingr9   fusion_gpt_attentionr   fusion_gpt_attention_megatronr   fusion_gpt_attention_no_pastr   fusion_rotary_attentionr   onnx_model_bertr   	getLoggerrL   r1   r	   rK   r   r   <module>rY      s<   
   3 D A 9 )			8	$TKM TKr   