§
    kŠtjä  ã                   óŽ   — 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       €úf/var/www/html/CA-Chatbot/venv/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º   € ÝˆtŒzÔÔ%Ñ&Ô&¨!Ò+Ð+­s°4´:Ô3CÔ3JÑ/KÔ/KÈqÒ/PÐ/PÝ-¨d°D´NÑCÔCˆFØ�LŠL‰NŒNˆNˆNå'¨¨d¬nÑ=Ô=ˆFØ�LŠL‰NŒNˆNÝ/°°d´nÑEÔEˆFØ�LŠL‰NŒNˆNå& t¨TÔ-=¸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Ò2°6Ñ:Ô:ð 6	ñ 6	ˆIØ!%×!>Ò!>Ø˜9Ð&9ÀUð "?ñ "ô "Ðð ×*Ò*¨9°yÀ*Ð6MÐPQÐSTÈvÐWjÑkÔkˆEØˆ}Ø×.Ò.ØØÐ 4Ð5Ø˜�FØ'ñ	ô �ð �=Ø ×2Ò2Ø!Ø"Ð$<Ð=Ø˜A˜Ø+ñ	ô �Eð �}Ø à/4Ñ,Ð  )à#×4Ò4°XÐ?TÑUÔUÐÝœ+×/Ò/ØØ(¨8Ñ3°Y´_ÀQÔ5GÐHØ)¨IÑ5Ð6Ø%ð	 0ñ ô ˆKð !×1Ò1°%Ð9KÑLÔLˆMÝ”{×,Ò,ØØ(¨9Ñ4°i´oÀaÔ6HÐIØ&¨Ñ2Ð3Ø"ð	 -ñ ô ˆHð ×+Ò+Ð,>Ô,EÀaÔ,HÈ-ÐZcÑJcÑdÔdÐdð ×+Ò+¨IÔ,<¸QÔ,?ÐAQÐT\ÑA\Ñ]Ô]Ð]Ø"2°XÑ"=ˆIÔ˜QÑà×+Ò+Ð,>Ô,EÀaÔ,HÈ-ÐZcÑJcÑdÔdÐdà�MŠM˜+Ñ&Ô&Ð&Ø�MŠM˜(Ñ#Ô#Ð#à˜QÑˆM‰Mà×ÒÑÔÐÝ�ŠÐ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   