文档
注册

支持的融合功能

量化过程中会对模型中的某些结构做算子融合,融合后图结构得到优化,从而提升网络推理性能,本节对使用到的融合功能进行详细介绍。

  • Caffe框架:
    • Conv+BN+Scale融合,AMCT在量化前会对模型中的"Convolution+BatchNorm+Scale"结构做Conv+BN+Scale融合,融合后的"BatchNorm"、"Scale"层会被删除。
    • DeConv+BN+Scale融合,AMCT在量化前会对模型中的"Deconvolution+BatchNorm+Scale"结构做DeConv+BN+Scale融合,融合后的"BatchNorm"、"Scale"层会被删除。
  • TensorFlow框架:
    • Conv+BN融合:AMCT在量化前会对模型中的"Conv2D/Conv3D+BatchNorm"结构做Conv+BN融合,融合后的"BatchNorm"层会被删除。
    • Depthwise_Conv+BN融合:AMCT在量化前会对模型中的"DepthwiseConv2dNative+BatchNorm"结构做Depthwise_Conv+BN融合,融合后的"BatchNorm"层会被删除。
    • Conv2DBackpropInput+BN融合:AMCT在量化前会对模型中的"Conv2DBackpropInput+BatchNorm"结构做Conv2DBackpropInput+BN融合,融合后的"BatchNorm"层会被删除。
    • Split+Conv+Concat融合:AMCT在量化前会对模型中的分组卷积Split+Conv(多个)+Bias(非必须)+Concat结构做group_conv融合,减少校准流程的计算量并优化量化后模型的内存和性能。其中Split算子包含Split和SplitV,卷积算子包含Conv2d,Concat算子包含Concat和ConcatV2。

      要求:Split算子的split_dim和Concat算子的concat_dim与卷积的Cout轴index一致;各个卷积算子量化配置和算子属性要一致。--IR38迭代需求,拉分支后放开

  • ONNX框架:
    • Conv+BN融合,AMCT在量化前会对模型中的"Conv+BatchNormalization"结构做Conv+BN融合,融合后的"BatchNorm"层会被删除。
    • ConvTranspose+BN融合,AMCT在量化前会对模型中的"ConvTranspose+BatchNormalization"结构做ConvTranspose+BN融合,融合后的"BatchNorm"层会被删除。
  • requant融合场景中的Relu6算子替换成Relu(Relu6无法做Requant融合,需替换为Relu):由于Relu6算子在Relu的基础上增加了对6以上数值的截断,同时量化过程中也会对输入浮点数进行截断,故AscendDequant+Relu6+AscendQuant与AscendDequant+Relu+AscendQuant存在等价的场景可以进行替换。基于该背景AMCT对量化部署模型中的AscendDequant+Relu6+AscendQuant结构等价替换为AscendDequant+Relu+AscendQuant。

    该场景下需要满足限制条件才可以进行替换,条件为(127-offset)/scale<6,其中scale/offset为quant中取出的量化参数。

  • BatchNorm+Mul+Add融合(适用于TensorFlow框架和ONNX框架)

    AMCT在量化前会先对模型中的 “BatchNorm+Mul” 结构做“BN+Mul”融合,融合后的 “Mul” 层会被删除;然后对模型中的 “BatchNorm+Add” 结构做“BN+Add”融合,融合后的 “Add” 层会被删除。

  • BN小算子融合为BatchNorm大算子(适用于TensorFlow框架和ONNX框架)。

    AMCT对小算子结构的BN进行匹配,并将匹配到的小算子BN结构替换为大算子的BN结构。BN小算子结构融合的前提条件包括:

    1. BN结构中的data节点必须为可量化节点(Conv2D、DepthwiseConv2D、MatMulV2、Conv3D)。
    2. 如果结构中有除data、scale、offset、mean、variance和输出节点之外的节点与该结构外的节点连接,则不做融合。

    对于没有offset的BN结构,融合时会构造一个全0的offset节点;对于没有scale的BN结构,融合时会构造一个全1的scale节点。具体支持的小算子BN结构的场景如下所示:

    • 无offset,is_training=False,data_format=NHWC,输入节点为Const类型,融合前后网络结构图为:

    • 无offset,is_training=False,data_format=NCHW,输入节点为Const类型,融合前后网络结构图为:

    • 无scale和offset,is_training=False,data_format=NHWC,输入节点为Const类型,融合前后网络结构图为:

    • 无scale和offset,is_training=False,data_format=NCHW,输入节点为Const类型,融合前后网络结构图为:

    • 无scale,is_training=False,data_format=NHWC,输入节点为Const类型,融合前后网络结构图为:

    • 无scale,is_training=False,data_format=NCHW,输入节点为Const类型,融合前后网络结构图为:

    • is_training=False,data_format=NHWC,输入节点为Const类型,融合前后网络结构图为:

    • is_training=False,data_format=NCHW,输入节点为Const类型,融合前后网络结构图为:

    • 无offset,is_training=False,data_format=NHWC,输入节点为Variable类型,融合前后网络结构图为:

    • 无offset,is_training=False,data_format=NCHW,输入节点为Variable类型,融合前后网络结构图为:

    • 无scale和offset,is_training=False,data_format=NHWC,输入节点为Variable类型,融合前后网络结构图为:

    • 无scale和offset,is_training=False,data_format=NCHW,输入节点为Variable类型,融合前后网络结构图为:

    • 无scale,is_training=False,data_format=NHWC,输入节点为Variable类型,融合前后网络结构图为:

    • 无scale,is_training=False,data_format=NCHW,输入节点为Variable类型,融合前后网络结构图为:

    • is_training=False,,data_format=NHWC,输入节点为Variable类型,融合前后网络结构图为:

    • is_training=False,data_format=NCHW,输入节点为Variable类型,融合前后网络结构图为:

    • 一种简化后的BN结构,无offset,data_format=NHWC,输入节点为Variable类型,融合前后网络结构图为:

    • 一种简化后的BN结构,无offset,data_format=NCHW,输入节点为Variable类型,融合前后网络结构图为:

    • 一种简化后的BN结构,无scale和offset,data_format=NHWC,输入节点为Variable类型,融合前后网络结构图为:

    • 一种简化后的BN结构,无scale和offset,data_format=NCHW,输入节点为Variable类型,融合前后网络结构图为:

  • bn_branch类小算子融合成BN大算子

    AMCT对bn_branch小算子结构的双BN结构进行匹配,并将匹配到的小算子结构替换为大算子的BN结构。如果结构中存在以下三种场景:两个BN分支的输入数据来源不同、结构输出为训练BN输出、推理BN的is_traing参数为True,则不做融合。算子融合过程会保留原结构中的推理BN大算子,并删除多余的Switch等小算子结构的节点,并重新添加保留BN算子的输入输出边,实现小算子融合成大算子。具体支持的小算子BN结构的场景如下所示:

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词