支持量化的层及约束
本章节给出不同框架可量化的层以及相关约束。
- 若网络模型输入数据类型或权重数据类型为Float16或混合精度类型(Float32/Float16共存),AMCT会关闭如下算子的量化功能:
AvgPool、Pooling、AvgPoolV2、MaxPool、MaxPoolV3、Pooling、Add、Eltwise、BatchMatMulV2(两路输入都为变量tensor)。
- 由于硬件约束,该版本不建议使用非均匀量化的功能,获取不到性能收益。
框架 |
支持的层类型 |
约束 |
对应Ascend IR定义的层类型 |
---|---|---|---|
Caffe |
InnerProduct:全连接层 |
transpose属性为false,axis为1 |
FullyConnection |
Convolution:卷积层 |
filter维度为4 |
Conv2D |
|
Deconvolution: 反卷积层 |
dilation为1、filter维度为4 |
Deconvolution |
|
Pooling |
|
Pooling |
|
Eltwise |
只做tensor量化 |
Eltwise |
|
TensorFlow |
MatMul:全连接层 |
|
MatMulV2 |
Conv2D:卷积层 |
weight的输入来源不含有placeholder等可动态变化的节点 |
Conv2D |
|
DepthwiseConv2dNative:Depthwise卷积层 |
weight的输入来源不含有placeholder等可动态变化的节点 |
DepthwiseConv2D |
|
Conv2DBackpropInput |
dilation为1,weight的输入来源不含有placeholder等可动态变化的节点 |
Conv2DBackpropInput |
|
BatchMatMulV2 |
BatchMatMulV2 |
||
AvgPool |
不支持移位N操作 |
AvgPool |
|
Conv3D |
dilation_d为1 |
Conv3D |
|
MaxPool |
只做tensor量化 |
MaxPool、MaxPoolV3 |
|
Add |
只做tensor量化 |
Add |
|
ONNX |
Conv:卷积层 |
|
Conv2D、Conv3D |
Gemm:广义矩阵乘 |
|
MatMulV2 |
|
ConvTranspose:转置卷积 |
|
Conv2DTranspose |
|
MatMul |
BatchMatMulV2 |
||
AveragePool |
global_pooling为false,不支持移位N操作 |
AvgPoolV2 |
|
MaxPool |
只做tensor量化 |
MaxPool、MaxPoolV3 |
|
Add |
只做tensor量化 |
Add |
框架 |
支持的层类型 |
约束 |
对应Ascend IR定义的层类型 |
---|---|---|---|
Caffe |
Convolution:卷积层 |
dilation为1、filter维度为4 |
Conv2D |
InnerProduct:全连接层 |
transpose属性为false,axis为1 |
FullyConnection |
|
TensorFlow |
Conv2D:卷积层 |
dilation为1 |
Conv2D |
MatMul:全连接层 |
transpose_a为False |
MatMulV2 |
|
ONNX |
Conv:卷积层 |
- |
Conv2D |
Gemm:广义矩阵乘 |
transpose_a=false |
MatMulV2 |
Ascend IR定义的层类型 |
仅权重量化 权重ARQ中channel_wise=true |
仅权重量化 权重ARQ中asymmetric=true |
权重和数据都量化 权重ARQ中channel_wise=true |
权重和数据都量化 权重ARQ中asymmetric=true |
约束 |
---|---|---|---|---|---|
Conv2D |
√ |
√ |
√ |
× |
weight的输入来源不含有placeholder等可动态变化的节点。 |
DepthwiseConv2D |
√ |
√ |
√ |
× |
weight的输入来源不含有placeholder等可动态变化的节点。 |
FullyConnection |
√ |
√ |
× |
× |
- |
MatMulV2 |
√ |
√ |
× |
× |
第二路的输入来源不含有placeholder等可动态变化的节点。 |
Deconvolution |
√ |
√ |
√ |
× |
weight的输入来源不含有placeholder等可动态变化的节点。 |
Conv2DTranspose |
√ |
√ |
√ |
× |
weight的输入来源不含有placeholder等可动态变化的节点。 |
Conv2DBackpropInput |
√ |
√ |
√ |
× |
weight的输入来源不含有placeholder等可动态变化的节点。 |
BatchMatMulV2 |
√ |
√ |
× |
× |
第二路的输入来源不含有placeholder等可动态变化的节点。 |
Conv3D |
√ |
√ |
√ |
× |
weight的输入来源不含有placeholder等可动态变化的节点。 |
Pooling |
不支持 |
不支持 |
× |
× |
- |
AvgPool |
不支持 |
不支持 |
× |
× |
- |
AvgPoolV2 |
不支持 |
不支持 |
× |
× |
- |
其中:
- √表示支持,×表示该场景量化会异常。
- 权重ARQ中channel_wise=true:表示每个channel独立量化,量化因子不同。
- 权重ARQ中asymmetric=true:表示权重量化使用非对称量化。
- 不支持:表示该算子不支持仅权重量化特性。