---
title: 支持量化的层及约束
description: "本章节给出不同框架可量化的层以及相关约束。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/programug/graphdevg/atlasag_25_0044.html
sourcePath: /source/zh/canncommercial/900/programug/graphdevg/atlasag_25_0044.html
indexId: 55b9bc180edcf3e38cf0f59751172b0f3bab1a688056f7c80fd9df4edd80477d70
---
# 支持量化的层及约束

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

- 若网络模型输入数据类型或权重数据类型为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表示权重量化支持对称量化和非对称量化。
