
     Ng                         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dS )	    N)FusionGptAttention)FusionGptAttentionMegatron)FusionGptAttentionNoPast)FusionRotaryAttention)BertOnnxModelc                   *     e Zd Z fdZd Zd Z xZS )Gpt2OnnxModelc                 N    t                                          |||           d S )N)super__init__)selfmodel	num_headshidden_size	__class__s       d/var/www/html/ai-engine/env/lib/python3.11/site-packages/onnxruntime/transformers/onnx_model_gpt2.pyr   zGpt2OnnxModel.__init__   s%    	;77777    c                    t          | j        j        j                  dk    s"t          | j        j        j                  dk    r*t          | | j                  }|                                 nRt          | | j                  }|                                 t          | | j                  }|                                 t          | | j        | j                  }|                                 d S )N   )lenr   graphinputoutputr   r   applyr   r   r   r   )r   fusions     r   fuse_attentionzGpt2OnnxModel.fuse_attention   s    tz%&&!++s4:3C3J/K/Kq/P/P-dDNCCFLLNNNN'dn==FLLNNN/dnEEFLLNNN&tT-=t~NNr   c                    t                               d           |                                 }|                                 }d}|                     d          D ]}|                     |d|d          }|                     |ddgddg|          }|=|                     |dd	gddg|          }||                     |dd
gddg|          }|w|\  }}|                     dd          }	t          j	        
                    d|	dz   |j        d         g|	dz   g|	          }
|                     dd          }t          j	        
                    d|	dz   |j        d         g|dz   g|          }|                     |j        d         |dz              |                     |j        d         |	dz              |	dz   |j        d<   |                     |j        d         |dz              |                     |
           |                     |           |dz  }|                                  t                               d|            dS )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"   s    	.///"6688"6688226:: 6	 6	I!%!>!>9&9U "? " " **9y*6MPQSTvWjkkE}.. 45F'	  = 22!"$<=A+	 E } /4, )#44X?TUU+//(83Y_Q5GH)I56%	 0  K !11%9KLLM{,,(94ioa6HI&23"	 -  H ++,>,Ea,H-ZcJcddd ++I,<Q,?AQT\A\]]]"2X"=IQ++,>,Ea,H-ZcJcdddMM+&&&MM(###QMMI-IIJJJJJr   )__name__
__module____qualname__r   r   rF   __classcell__)r   s   @r   r	   r	      sd        8 8 8 8 8  CK CK CK CK CK CK 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 3 3 3 3 3 D D D D D D A A A A A A 9 9 9 9 9 9 ) ) ) ) ) )		8	$	$TK TK TK TK TKM TK TK TK TK TKr   