手工量化
本节详细介绍训练后量化支持的量化层,接口调用流程和调用示例。
训练后量化支持量化的层以及约束如下,量化示例请参见获取更多样例。
支持的层类型 |
约束 |
---|---|
nn.Dense:全连接层 |
- |
nn.Conv2d:卷积层 |
dilation为1、group为1、filter维度为4;或者dilation为1、group不为1,group=channel、filter维度为4。 |
接口调用流程
训练后量化接口调用流程如图1所示。
蓝色部分为用户实现,灰色部分为用户调用AMCT提供的 API 实现,使用流程如下:
- 用户首先构造MindSpore的原始模型,然后使用create_quant_config生成量化配置文件。
- 根据MindSpore模型和量化配置文件,即可调用quantize_model接口对原始MindSpore模型进行修改,修改后的模型中包含了量化算法相关的算子,用户使用该模型借助下载的数据集和校准集,在MindSpore环境中进行inference,可以得到量化因子。校准集应该从训练集或者测试集中获取,保证数据分布和真实数据接近,用于产生量化因子,从而保证量化后模型的精度。
- 最后用户可以调用save_model接口保存量化后的.air格式的量化模型文件,该量化模型可以在昇腾AI处理器部署。
部署模型的AscendQuant层将Float32的输入数据量化为INT8,作为卷积层的输入,权重也是使用INT8数据类型作为计算,在部署模型中的卷积层的计算是基于INT8,INT32数据类型的,输出为INT32数据类型经过AscendDequant层转换成Float32数据类型转输给下一个网络层。示意图如下:图2 可部署模型
调用示例
该场景下调用示例请参见快速入门。
父主题: 训练后量化