实现流程

AMCT实现量化流程如图1所示。

图1 实现流程

灰色部分为AMCT提供或基于Ascend Graph接口实现的功能,蓝色部分为Ascend Graph内部接口实现的部分,Ascend Graph内部接口说明请参见Ascend Graph开发指南。主要流程如下:

  1. 初始化AMCTamct_acl
  2. AMCT调用框架Parser功能,将主流的模型格式转换成CANN模型格式。
  3. 修改Graph,在可量化算子前后插入量化反量化算子。
  4. 编译Graph,生成校准om模型,并将生成的校准om模型借助带NPU设备的环境进行上板推理,获取量化因子。
  5. 执行3时,同步将Graph复制一份,进行修改,然后借助带NPU设备的训练环境保存为.air格式模型,该模型中同步保存了量化因子。

支持量化的层以及约束

支持量化的层以及约束如下:

表1 支持量化层以及对应Ascend IR定义的层

框架

支持的层类型

约束

对应Ascend IR定义的层类型

Caffe

InnerProduct:全连接层

transpose属性为false,axis为1

FullyConnection

Convolution:卷积层

无。

Conv2D

Deconvolution: 反卷积层

dilation为1、filter维度为4

Deconvolution

Pooling

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

Pooling

TensorFlow

MatMul:全连接层

transpose_a为False, transpose_b为False,adjoint_a为False,adjoint_b为False

MatMulV2

Conv2D:卷积层

weight的输入来源不含有placeholder等可动态变化的节点,且weight的节点类型只能是const

Conv2D

DepthwiseConv2dNative:Depthwise卷积层

weight的输入来源不含有placeholder等可动态变化的节点,且weight的节点类型只能是const

DepthwiseConv2D

Conv2DBackpropInput

dilation为1,weight的输入来源不含有placeholder等可动态变化的节点,且weight的节点类型只能是const。

Conv2DBackpropInput

BatchMatMulV2

adj_x=False,第二路输入要求为2维const

BatchMatMulV2

AvgPool

不支持移位N操作

AvgPool

ONNX

Conv:卷积层

-

Conv2D

Gemm:广义矩阵乘

transpose_a=false

MatMulV2

ConvTranspose:转置卷积

dilation为1、filter维度为4

Conv2DTranspose

MatMul

第二路输入要求为2维const

BatchMatMulV2

AveragePool

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

AvgPoolV2