工具原理及优点
工具原理
昇腾模型压缩工具是基于Caffe框架的Python工具包,实现了神经网络模型中Conv+BN+Scale融合、Deconv+BN+Scale融合、BN+Scale+Conv融合、FC+BN+Scale融合、数据与权重8比特量化的功能,该工具将量化和模型转换分开,实现对模型中可量化算子的独立量化,并将量化后的模型保存为.prototxt文件和.caffemodel文件。其中量化后的仿真模型可以在CPU或者GPU上运行,完成精度仿真;量化后的部署模型可以部署在昇腾AI处理器上运行,达到提升推理性能的目的。
昇腾模型压缩工具整体运行流程如图3-4所示,蓝色部分为用户实现,灰色部分为用户调用昇腾模型压缩工具提供的API实现,用户在Caffe原始网络推理的代码中导入库,并在特定的位置调用相应API,即可实现量化功能。工具使用分为如下场景:
- 基于calibration的量化
- 场景1
- 用户首先构造Caffe的原始模型,然后使用create_quant_config生成量化配置文件。
- 根据Caffe模型和量化配置文件,调用init接口,初始化工具,配置量化因子存储文件,将模型解析为图结构graph。
- 调用quantize_model接口对原始Caffe模型的图结构graph进行优化,修改后的模型中包含了量化算法,用户使用该模型借助昇腾模型压缩工具提供的数据集和校准集,在Caffe环境中进行inference,可以得到量化因子。
其中数据集用于在Caffe环境中对模型进行推理时,测试量化数据的精度;校准集用来产生量化因子,保证精度。
- 最后用户可以调用save_model接口保存模型,包括可在Caffe环境中进行精度仿真的模型文件和权重文件,以及可部署在昇腾AI处理器的模型文件和权重文件。
- 场景2
如果用户不使用 场景1中的接口,而是用自己计算得到的量化因子以及Caffe原始模型,生成量化后的部署模型和精度方案模型,则需要使用convert_model接口完成相关量化动作。该场景下的量化示例请参见convert_model接口量化示例。
- 场景1
- 基于retrain的量化
- 用户首先构造Caffe的原始模型,然后使用create_quant_retrain_config生成量化配置文件。
- 调用create_quant_retrain_model接口对原始Caffe模进行优化,修改后的模型中包含了量化算法,用户使用该模型借助昇腾模型压缩工具提供的数据集和校准集,在Caffe模环境中进行retrain,可以得到量化因子。
- 最后用户可以调用save_quant_retrain_model接口保存模型,包括可在Caffe环境中进行精度仿真的模型文件和权重文件,以及可部署在昇腾AI处理器的模型文件和权重文件。
工具实现的融合功能
- Conv+BN+Scale融合:昇腾模型压缩工具在量化前会对模型中的"Convolution+BatchNorm+Scale"结构做Conv+BN+Scale融合,融合后的"BatchNorm"、"Scale"层会被删除。
- Deconv+BN+Scale融合:昇腾模型压缩工具在量化前会对模型中的"Deconvolution+BatchNorm+Scale"结构做Deconv+BN+Scale融合,融合后的"BatchNorm"、"Scale"层会被删除。
- BN+Scale+Conv融合:昇腾模型压缩工具在量化前会对模型中的"BatchNorm+Scale+Convolution"结构做BN+Scale+Conv融合,融合后的"BatchNorm"、"Scale"层会被删除。
- FC+BN+Scale融合:昇腾模型压缩工具在量化前会对模型中的"InnerProduct+BatchNorm+Scale"结构做FC+BN+Scale融合,融合后的"BatchNorm"、"Scale"层会被删除。
工具优点
- 使用方便,安装工具包、重新编译Caffe即可。
- 接口简单,在用户基于Caffe框架的推理脚本基础上,调用API即可完成量化。
- 与硬件配套,生成的部署模型(deploy模型)经过ATC工具转换后可在昇腾AI处理器上实现8比特推理。
- 量化可配置,用户可自行修改量化配置文件,调整量化策略,获取较优的量化结果。