Press "Enter" to skip to content

带您了解昇腾模型压缩工具

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

本文分享自华为云社区《 【CANN文档速递11期】带您了解昇腾模型压缩工具 》,作者: 昇腾CANN 。

 

什幺是AMCT,它能做什幺?

 

昇腾模型压缩工具(Ascend Model Compression Toolkit,简称AMCT)是一个针对昇腾芯片亲和的深度学习模型压缩工具包,提供量化、张量分解等多种模型压缩特性,致力于帮助用户高效实现模型的小型化。

 

它实现了神经网络模型中数据与权重8比特量化、张量分解、模型部署优化(主要为BN融合)的功能,该工具将量化和模型转换分开,实现对模型中可量化算子的独立量化,最终输出量化后的模型。

 

其中,量化后的仿真模型可以在CPU或者GPU上运行,完成精度仿真;量化后的部署模型可以部署在昇腾AI处理器上运行,达到提升推理性能的目的。

 

AMCT功能介绍

 

 

AMCT使用的模型压缩方法有:量化、张量分解、模型部署优化(主要为BN融合)。

 

量化:指对模型的权重(weight)和数据(activation)进行低比特处理,让最终生成的网络模型更加轻量化,从而达到节省网络模型存储空间、降低传输时延、提高计算效率,达到性能提升与优化的目标。其原理如下图所示:

 

 

量化根据是否需要重训练,分为训练后量化和量化感知训练。

 

训练后量化(Post-Training Quantization,简称PTQ)

 

在模型训练结束之后进行的量化,再对训练好的模型进行权重和数据的量化,进而加速模型推理速度。

 

量化感知训练(Quantization-Aware Training,简称QAT)

 

在量化过程中,对模型进行训练的一种量化。QAT会在训练过程中引入伪量化的操作(从浮点量化到定点,再还原到浮点的操作),用来模拟前向推理时量化带来的误差,并借助训练让模型权重能更好地适应这种量化的信息损失,从而提升量化精度。

 

模型部署优化:主要为算子融合功能,指通过数学等价,将模型中的多个算子运算融合为单算子运算,以减少实际前向过程中的运算量,如将卷积层和BN层融合为一个卷积层。该功能在量化过程中实现,当前仅支持BN融合。其原理如下图所示:

 

 

张量分解:通过分解卷积核的张量,可以将一个大卷积核分解为两个小卷积核的连乘,即将卷积核分解为低秩的张量,从而降低存储空间和计算量,降低推理开销。其原理如下图所示:

 

 

AMCT量化方式

 

AMCT支持两种方式的量化:命令行方式和Python API接口方式,区别如下:

 

 

如果用户想快速体验AMCT,则可以使用命令行方式进行训练后量化 ,如果想体验更多功能,比如量化感知训练,则必须使用Python API接口方式实现。

 

如何使用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处理器的服务器完成推理业务。

 

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,输出最终分解后的模型。

 

更多介绍

 

关于文中命令行方式更多参数、Python API方式接口介绍以及TensorFlow、ONNX、PyTorch、MindSpore等框架的AMCT用法介绍,请登录昇腾社区,阅读相关文档: www.hiascend.com/document

 

 

昇腾CANN文档中心致力于为开发者提供更优质的内容和更便捷的开发体验,助力CANN开发者共建AI生态。任何意见和建议都可以在昇腾社区反馈,您的每一份关注都是我们前进的动力。

 

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。