【CANN文档速递11期】带您了解昇腾模型压缩工具
01 什么是AMCT,它能做什么?
昇腾模型压缩工具(Ascend Model Compression Toolkit,简称AMCT)是一个针对昇腾芯片亲和的深度学习模型压缩工具包,提供量化、张量分解等多种模型压缩特性,致力于帮助用户高效实现模型的小型化。
它实现了神经网络模型中数据与权重8比特量化、张量分解、模型部署优化(主要为BN融合)的功能,该工具将量化和模型转换分开,实现对模型中可量化算子的独立量化,最终输出量化后的模型。
其中,量化后的仿真模型可以在CPU或者GPU上运行,完成精度仿真;量化后的部署模型可以部署在昇腾AI处理器上运行,达到提升推理性能的目的。
02 AMCT功能介绍
AMCT使用的模型压缩方法有:量化、张量分解、模型部署优化(主要为BN融合)。
量化:指对模型的权重(weight)和数据(activation)进行低比特处理,让最终生成的网络模型更加轻量化,从而达到节省网络模型存储空间、降低传输时延、提高计算效率,达到性能提升与优化的目标。其原理如下图所示:
量化根据是否需要重训练,分为训练后量化和量化感知训练。
训练后量化(Post-Training Quantization,简称PTQ)
在模型训练结束之后进行的量化,再对训练好的模型进行权重和数据的量化,进而加速模型推理速度。
量化感知训练(Quantization-Aware Training,简称QAT)
在量化过程中,对模型进行训练的一种量化。QAT会在训练过程中引入伪量化的操作(从浮点量化到定点,再还原到浮点的操作),用来模拟前向推理时量化带来的误差,并借助训练让模型权重能更好地适应这种量化的信息损失,从而提升量化精度。
模型部署优化:主要为算子融合功能,指通过数学等价,将模型中的多个算子运算融合为单算子运算,以减少实际前向过程中的运算量,如将卷积层和BN层融合为一个卷积层。该功能在量化过程中实现,当前仅支持BN融合。其原理如下图所示:
张量分解:通过分解卷积核的张量,可以将一个大卷积核分解为两个小卷积核的连乘,即将卷积核分解为低秩的张量,从而降低存储空间和计算量,降低推理开销。其原理如下图所示:
03 AMCT量化方式
AMCT支持两种方式的量化:命令行方式和Python API接口方式,区别如下:
如果用户想快速体验AMCT,则可以使用命令行方式进行训练后量化 ,如果想体验更多功能,比如量化感知训练,则必须使用Python API接口方式实现。
04 如何使用AMCT
下图展示了使用AMCT进行量化的简单流程,用于需要先在符合版本要求的Linux服务器部署AMCT,完成模型量化操作,输出可部署的量化模型;然后借助ATC工具转成适配昇腾AI处理器的.om离线模型;最后使用.om离线模型,在昇腾AI处理器完成推理业务。
下面以Caffe框架ResNet-50网络模型为例,为您演示如何借助AMCT进行命令行方式的量化。
1. 通过昇腾社区获取AMCT软件包,并完成安装。
在任意路径执行amct_caffe calibration --help命令,若回显参数信息,则说明AMCT能正常使用。
2. 准备要进行量化的模型文件*.prototxt、权重文件*.caffemodel、以及与模型匹配的二进制数据集上传到AMCT所在Linux服务器。
3. 执行如下命令进行训练后量化。
--model:原始网络模型文件路径与文件名。
--weight:原始网络模型权重文件路径与文件名。
--save_path:量化后模型的存放路径。
--input_shape:指定模型输入数据的shape。
--data_dir:二进制数据集路径。
--data_types:输入数据的类型。
4. 量化完成后,在{save_path}参数指定路径下可以查看量化后的模型。
5. (后续处理)用户使用上述量化后的模型,借助ATC工具转成适配昇腾AI处理器的.om离线模型,然后在安装昇腾AI处理器的服务器完成推理业务。
05 AMCT更多功能
下面介绍Caffe框架下通过Python API接口方式实现的各种功能。
接口调用流程
代码示例
1. 导入AMCT包。
2. 调用AMCT,量化模型。
a. 解析用户模型,生成量化配置文件。
b. 初始化AMCT,读取用户量化配置文件、解析用户模型文件、生成用户内部修改模型的Graph IR。
c. 执行图融合、执行权重离线量化以及插入数据量化层得到校准模型,从而在后续校准推理过程中执行数据量化动作。
d. 执行校准模型推理,完成数据量化(借助用户原始Caffe环境) 。
e. 执行量化后图优化动作,并保存得到最终的量化部署模型(deploy)和量化仿真模型(fake_quant)。
接口调用流程
代码示例
1. 导入AMCT包。
2. 调用AMCT,量化模型。
a. 解析用户模型,生成量化配置文件。
b. 修改模型,插入伪量化层并存为新的模型文件。
c. 使用修改后的模型,创建反向梯度,在训练集上做训练,训练量化因子(借助用户原始Caffe环境)。
d. 保存模型。
接口调用流程
代码示例
1. 导入AMCT相关模块。
2. 调用接口执行张量分解。
3. 对分解后的模型进行finetune,输出最终分解后的模型。
06 更多介绍
关于文中命令行方式更多参数、Python API方式接口介绍以及TensorFlow、ONNX、PyTorch、MindSpore等框架的AMCT用法介绍,请登录昇腾社区,阅读相关文档:https://www.hiascend.com/document
昇腾CANN文档中心致力于为开发者提供更优质的内容和更便捷的开发体验,助力CANN开发者共建AI生态。任何意见和建议都可以在昇腾社区反馈,您的每一份关注都是我们前进的动力。
- 点赞
- 收藏
- 关注作者
评论(0)