
    g                         d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ  e j                  e      Z G d de      Zy)	    N)FusionGptAttention)FusionGptAttentionMegatron)FusionGptAttentionNoPast)FusionRotaryAttention)BertOnnxModelc                   *     e Zd Z fdZd Zd Z xZS )Gpt2OnnxModelc                 (    t         |   |||       y )N)super__init__)selfmodel	num_headshidden_size	__class__s       ]/var/www/openai/venv/lib/python3.12/site-packages/onnxruntime/transformers/onnx_model_gpt2.pyr   zGpt2OnnxModel.__init__   s    	;7    c                    t        | j                  j                  j                        dk(  s,t        | j                  j                  j                        dk(  r't        | | j                        }|j                          nLt        | | j                        }|j                          t        | | j                        }|j                          t        | | j                  | j                        }|j                          y )N   )lenr   graphinputoutputr   r   applyr   r   r   r   )r   fusions     r   fuse_attentionzGpt2OnnxModel.fuse_attention   s    tzz%%&!+s4::3C3C3J3J/Kq/P-dDNNCFLLN'dnn=FLLN/dnnEFLLN&tT-=-=t~~Nr   c                 .   t         j                  d       | j                         }| j                         }d}| j	                  d      D ]  }| j                  |d|d      }| j                  |ddgddg|      }|5| j                  |dd	gddg|      }|| j                  |dd
gddg|      }|h|\  }}| j                  dd      }	t        j                  j                  d|	dz   |j                  d   g|	dz   g|	      }
| j                  dd      }t        j                  j                  d|	dz   |j                  d   g|dz   g|      }| j                  |j                  d   |dz          | j                  |j                  d   |	dz          |	dz   |j                  d<   | j                  |j                  d   |dz          | j                  |
       | j                  |       |dz  } | j                          t         j!                  d|        y)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   r0   r1   reshape_count	gemm_nodereshape_after_gemmnodesreshape_before_gemm	root_nodematmul_node_namematmul_nodeadd_node_namer:   s                r   postprocesszGpt2OnnxModel.postprocess"   sh    	./"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__r   r   rF   __classcell__)r   s   @r   r	   r	      s    8CKr   r	   )loggingr6   fusion_gpt_attentionr   fusion_gpt_attention_megatronr   fusion_gpt_attention_no_pastr   fusion_rotary_attentionr   onnx_model_bertr   	getLoggerrG   r.   r	    r   r   <module>rS      s>   
   3 D A 9 )			8	$TKM TKr   