支持量化的层及约束
本章节给出不同框架可量化的层以及相关约束。
- 均匀量化支持的层及约束(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
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
BatchMatMulV2
AveragePool
global_pooling为false,不支持移位N操作
AvgPoolV2
MaxPool
只做tensor量化
MaxPool、MaxPoolV3
Add
只做tensor量化,且只支持单路输入的量化
Add
该版本不支持仅权重量化特性。
仅权重量化特性,仅支持以下产品类型:
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 |
× |
× |
|
其中:
- √表示支持,×表示该场景量化会异常。
- 权重ARQ中channel_wise=true:表示每个channel独立量化,量化因子不同。
- 权重ARQ中asymmetric
- true:表示权重量化使用非对称量化
- false:表示权重量化使用对称量化。
- true和false表示权重量化支持对称量化和非对称量化。