Ë
    �…jä  ã                   óŠ   — 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       €úi/root/aria/tools/markitdown-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§   € Üˆt�z‰z×Ñ×%Ñ%Ó&¨!Ò+¬s°4·:±:×3CÑ3C×3JÑ3JÓ/KÈqÒ/PÜ-¨d°D·N±NÓCˆFØ�L‰L�Nä'¨¨d¯n©nÓ=ˆFØ�L‰LŒNÜ/°°d·n±nÓEˆFØ�L‰LŒNä& t¨T×-=Ñ-=¸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"   sm  € ô 	�‰Ð.Ô/à"×6Ñ6Ó8ÐØ"×6Ñ6Ó8ÐàˆØ×2Ñ2°6Ó:ó 6	ˆIØ!%×!>Ñ!>Ø˜9Ð&9ÀUð "?ó "Ðð ×*Ñ*¨9°yÀ*Ð6MÐPQÐSTÈvÐWjÓkˆEØˆ}Ø×.Ñ.ØØÐ 4Ð5Ø˜�FØ'ó	�ð �=Ø ×2Ñ2Ø!Ø"Ð$<Ð=Ø˜A˜Ø+ó	�Eð �}Ø à/4Ñ,Ð  )à#×4Ñ4°XÐ?TÓUÐÜŸ+™+×/Ñ/ØØ(¨8Ñ3°Y·_±_ÀQÑ5GÐHØ)¨IÑ5Ð6Ø%ð	 0ó ˆKð !×1Ñ1°%Ð9KÓLˆMÜ—{‘{×,Ñ,ØØ(¨9Ñ4°i·o±oÀaÑ6HÐIØ&¨Ñ2Ð3Ø"ð	 -ó ˆHð ×+Ñ+Ð,>×,EÑ,EÀaÑ,HÈ-ÐZcÑJcÔdð ×+Ñ+¨I×,<Ñ,<¸QÑ,?ÐAQÐT\ÑA\Ô]Ø"2°XÑ"=ˆI×Ñ˜QÑà×+Ñ+Ð,>×,EÑ,EÀaÑ,HÈ-ÐZcÑJcÔdà�M‰M˜+Ô&Ø�M‰M˜(Ô#à˜QÑŠMðm6	ð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   