U
    T?h                     @   sL   d dl mZ d dlmZ d dlmZ d dlmZ eeZ	G dd deZ
dS )    )	getLogger)FusionAttentionClip)
ModelProto)BertOnnxModelc                       s8   e Zd Zd	eeed fddZdd Zdd Z  ZS )
ClipOnnxModelr   )model	num_headshidden_sizec                    s(   t  j|||d t| | j| j| _d S )N)r   r	   )super__init__r   r	   r   clip_attention_fusion)selfr   r   r	   	__class__ Z/var/www/html/venv/lib/python3.8/site-packages/onnxruntime/transformers/onnx_model_clip.pyr      s    zClipOnnxModel.__init__c                 C   sD   i }ddddg}|D ]}|  |}t|||< qtd|  |S )z8
        Returns node count of fused operators.
        Z	AttentionZLayerNormalizationZ	QuickGeluZSkipLayerNormalizationzOptimized operators:)Zget_nodes_by_op_typelenloggerinfo)r   Zop_countZopsopZnodesr   r   r   get_fused_operator_statistics   s    
z+ClipOnnxModel.get_fused_operator_statisticsc                 C   s   | j   d S )N)r   apply)r   r   r   r   fuse_attention&   s    zClipOnnxModel.fuse_attention)r   r   )	__name__
__module____qualname__r   intr   r   r   __classcell__r   r   r   r   r      s   r   N)loggingr   Zfusion_attention_clipr   Zonnxr   Zonnx_model_bertr   r   r   r   r   r   r   r   <module>   s
   