开发者
资源

支持量化的层及约束

本章节给出不同框架可量化的层以及相关约束。

  • 若网络模型输入数据类型或权重数据类型为Float16或混合精度类型(Float32/Float16共存),会关闭如下算子的量化功能:

    AvgPool、Pooling、AvgPoolV2、MaxPool、MaxPoolV3、Add、Eltwise、BatchMatMulV2(两路输入都为变量tensor)。

  • 如下产品不支持Caffe框架:

    Atlas A2 训练系列产品/Atlas A2 推理系列产品

    Atlas A3 训练系列产品/Atlas A3 推理系列产品

    Atlas 350 加速卡

  • 均匀量化支持的层及约束(Caffe框架)

    支持的层类型

    约束

    对应Ascend IR定义的层类型

    InnerProduct:全连接层

    transpose属性为false,axis为1

    FullyConnection

    Convolution:卷积层

    filter维度为4

    Conv2D

    Deconvolution:反卷积层

    dilation为1、filter维度为4

    Deconvolution

    Pooling

    • mode为1,全量化(weight+tensor),global_pooling为false,不支持移位N操作
    • mode为0,只做tensor量化

    Pooling

    Eltwise

    只做tensor量化且operation=1

    Eltwise

  • 均匀量化支持的层及约束(TensorFlow框架)

    支持的层类型

    约束

    对应Ascend IR定义的层类型

    MatMul:全连接层

    • transpose_a为False,transpose_b为False,adjoint_a为False,adjoint_b为False
    • weight的输入来源不含有placeholder等可动态变化的节点

    MatMulV2

    Conv2D:卷积层

    weight的输入来源不含有placeholder等可动态变化的节点

    Conv2D

    DepthwiseConv2dNative:Depthwise卷积层

    weight的输入来源不含有placeholder等可动态变化的节点

    DepthwiseConv2D

    Conv2DBackpropInput

    dilation为1,weight的输入来源不含有placeholder等可动态变化的节点

    Conv2DBackpropInput

    BatchMatMulV2

    • adj_x=False
    • 如果第二路输入为常量const,则要求为2维
    • 当两路输入都为变量tensor时,仅支持INT8对称量化

      当两路输入都为变量tensor时,仅在以下产品能获得收益,其他产品量化后精度会下降。

      Atlas 200I/500 A2 推理产品

      Atlas A2 训练系列产品/Atlas A2 推理系列产品

      Atlas A3 训练系列产品/Atlas A3 推理系列产品

      Atlas 350 加速卡

    BatchMatMulV2

    AvgPool

    不支持移位N操作

    AvgPool

    Conv3D

    dilation_d为1

    Conv3D

    MaxPool

    只做tensor量化

    MaxPool、MaxPoolV3

    Add

    只做tensor量化,且只支持单路输入的量化

    Add

  • 均匀量化支持的层及约束(ONNX框架)

    支持的层类型

    约束

    对应Ascend IR定义的层类型

    Conv:卷积层

    • filter维度为5的情况下,要求dilation_d为1
    • weight的输入来源不含有placeholder等可动态变化的节点

    Conv2D、Conv3D

    Gemm:广义矩阵乘

    • transpose_a=false
    • weight的输入来源不含有placeholder等可动态变化的节点

    MatMulV2

    ConvTranspose:转置卷积

    • dilation为1、filter维度为4
    • weight的输入来源不含有placeholder等可动态变化的节点

    Conv2DTranspose

    MatMul

    • 如果第二路输入为常量const,则要求为2维
    • 当两路输入都为变量tensor时,仅支持INT8对称量化

      两路输入都为变量tensor量化场景,只在以下产品能获得收益,其他产品量化后精度会下降

      Atlas 200I/500 A2 推理产品

      Atlas A2 训练系列产品/Atlas A2 推理系列产品

      Atlas A3 训练系列产品/Atlas A3 推理系列产品

      Atlas 350 加速卡

    • weight的输入来源不含有placeholder等可动态变化的节点

    BatchMatMulV2

    AveragePool

    global_pooling为false,不支持移位N操作

    AvgPoolV2

    MaxPool

    只做tensor量化

    MaxPool、MaxPoolV3

    Add

    只做tensor量化,且只支持单路输入的量化

    Add

该版本不支持仅权重量化特性。

仅权重量化特性,仅支持以下产品类型:

Atlas 推理系列产品

Atlas A2 训练系列产品/Atlas A2 推理系列产品

表1 仅权重量化场景支持的层及约束

Ascend IR定义的层类型

仅权重量化

权重ARQ中channel_wise=true

仅权重量化

权重ARQ中asymmetric=true或false

权重和数据都量化

权重ARQ中channel_wise=true

权重和数据都量化

权重ARQ中asymmetric=true

约束

MatMulV2

true

×

×

第二路的输入来源不含有placeholder等可动态变化的节点。

BatchMatMulV2

true

×

×

第二路的输入来源不含有placeholder等可动态变化的节点。

FFN

true和false

×

×

  • FFN算子的expert_tokens输入不为空。
  • FFN算子的两个权重为Float16的常量。
  • FFN算子的antiquant_scale1、antiquant_scale2、antiquant_offset1、antiquant_offset2四个输入为空。
  • 权重不支持权重共享。
  • FFN算子量化仅Atlas A2 训练系列产品/Atlas A2 推理系列产品支持。

其中:

  • √表示支持,×表示该场景量化会异常。
  • 权重ARQ中channel_wise=true:表示每个channel独立量化,量化因子不同。
  • 权重ARQ中asymmetric
    • true:表示权重量化使用非对称量化
    • false:表示权重量化使用对称量化。
    • true和false表示权重量化支持对称量化和非对称量化。