实现流程
昇腾模型压缩工具实现量化流程如图1所示。
灰色部分为昇腾模型压缩工具提供或基于Ascend Graph接口实现的功能,蓝色部分为Ascend Graph内部接口实现的部分,Ascend Graph内部接口说明请参见《Ascend Graph开发指南》。主要流程如下:
- 初始化昇腾模型压缩工具amct_acl。
- 昇腾模型压缩工具调用框架Parser功能,将主流的模型格式转换成CANN模型格式。
- 修改Graph,在可量化算子前后插入量化反量化算子。
- 编译Graph,生成校准om模型,并将生成的校准om模型上板进行推理,获取量化因子。
- 执行3时,同步将Graph复制一份,进行修改,然后保存为.air格式模型,该模型中同步保存了量化因子。
支持量化的层以及约束
支持量化的层以及约束如下:
框架 |
层名 |
约束 |
对应Ascend IR定义的层 |
---|---|---|---|
Caffe |
InnerProduct:全连接层 |
transpose属性为false,axis为1 |
FullyConnection |
Convolution:卷积层 |
dilation为1、filter维度为4 |
Conv2D |
|
TensorFlow |
MatMul:全连接层 |
transpose_a为False, transpose_b为False,adjoint_a为False,adjoint_b为False - |
MatMulV2 |
Conv2D:卷积层 |
- weight的输入来源不含有placeholder等可动态变化的节点,且weight的节点类型只能是const。 |
Conv2D |
|
DepthwiseConv2dNative:Depthwise卷积层 |
dilation为1 |
DepthwiseConv2D |
|
ONNX |
Conv:卷积层 |
- |
Conv2D |
Gemm:广义矩阵乘 |
transpose_a=false |
MatMulV2 |
工具实现的融合功能
量化过程中实现的融合功能如下(当前仅支持BN融合):
框架 |
融合类型 |
说明 |
---|---|---|
Caffe |
Conv+BN+Scale融合 |
昇腾模型压缩工具在量化前会对模型中的"Convolution+BatchNorm+Scale"结构做Conv+BN+Scale融合,融合后的"BatchNorm"、"Scale"层会被删除。 |
TensorFlow |
Conv+BN融合 |
昇腾模型压缩工具在量化前会对模型中的"Conv2D+BatchNorm"结构做Conv+BN融合,融合后的"BatchNorm"层会被删除。 |
Depthwise_Conv+BN融合 |
昇腾模型压缩工具在量化前会对模型中的"DepthwiseConv2dNative+BatchNorm"结构做Depthwise_Conv+BN融合,融合后的"BatchNorm"层会被删除。 |
|
ONNX |
Conv+BN融合 |
昇腾模型压缩工具在量化前会对模型中的"Conv+BatchNormalization"结构做Conv+BN融合,融合后的"BatchNorm"层会被删除。 |