高效模型量化工具包-AIMET(四)

章节4

后训练量化

4.1 介绍

  后训练量化(Post-Training Quantization,简称PTQ)算法是指对预训练的FP32网络进行优化,调整其权重和量化参数,以提高量化性能,而无需进行微调。PTQ方法可以是无数据的,也可以需要一个小的校准集,这通常是容易获取的。由于它们不需要访问原始训练流程,并且几乎不涉及超参数调整,因此可以通过单个API调用作为黑盒方法来对预训练的神经网络进行量化,从而使神经网络设计师无需成为量化专家,从而实现神经网络量化的更广泛应用。
  AIMET支持最先进的量化技术,例如无数据量化(DFQ)和AdaRound。在讨论它们的使用方法之前,我们首先介绍最佳实践的PTQ流程。

4.2 标准的PTQ流程

  推荐的PTQ流程如图4.1所示。该流程基于相关文献和广泛的实验,并在许多计算机视觉和自然语言处理模型和任务中取得了竞争性的结果。根据模型的不同,可能不需要某些步骤,或者其他选择可能会导致相同或更好的性能。
交叉层均衡 首先,我们对完整精度模型应用交叉层均衡(CLE),这是一种预处理步骤,使其更适合量化。当使用每张量量化时,CLE对具有深度可分离层的模型特别有益,但它也可以改善其他层和量化选择。

添加量化器 接下来,我们选择量化器,并在网络中添加量化操作,详见第3.1节。量化器的选择取决于具体的目标硬件;对于常见的AI加速器,我们建议使用对称量化来量化权重,使用非对称量化来量化激活值。如果硬件/软件堆栈支持,那么对于权重,使用每通道量化是有利的。

设置权重范围 然后,我们使用第4.4节中描述的量化范围设置方法来设置所有权重张量的量化参数。我们建议使用基于层的信号与量化噪声比(SQNR)的准则。对于每通道量化的特定情况,使用最小-最大方法在某些情况下可能更有利。
AdaRound 如果有一个小的校准数据集可用,我们将应用AdaRound来优化权重的舍入。这一步骤对于在PTQ中实现低位权重量化(例如4位)至关重要。
偏差校正 如果没有可用的校准数据集,并且网络使用批归一化,我们可以使用分析偏差校正来代替。我们将这套技术与偏差校正一起称为无数据量化。
激活范围设置 作为最后一步,我们确定网络中所有依赖于数据的张量(例如激活张量)的量化范围,大多数层使用基于信噪比的准则进行确定。执行此步骤需要一个小型的校准数据集。
图4.1 标准PTQ流程

(蓝色方框表示必需的步骤,而青色方框表示推荐的选择)

4.3 跨层均衡

  神经网络量化中的一个常见问题是权重通道的动态范围可能会有很大的变化。这可能导致量化精度较差,特别是对于每个张量的量化。跨层均衡(CLE)通过利用某些激活函数(如ReLU、PReLU)的尺度等变性属性来均衡权重张量,从而改善量化性能。AIMET可以通过单个API调用应用CLE,并展示出在常见的计算机视觉架构中以及特别是在高效模型(如MobileNet)系列中的最新量化性能。

代码示例
API AIMET跨层均衡技术可以使用下面的统一AIMET API在给定的预训练模型上应用。

#代码块4.1 统一的顶层均衡模型API示例

from torchvision import models
from aimet_torch.cross_layer_equalization import equalize_model
model = models.resnet18(pretrained=True).eval()
input_shape = (1, 3, 224, 224)
# Performs batch normalization folding, Cross-layer scaling and High-bias absorption and updates model in-place
equalize_model(model, input_shape)

使用说明:
•CLE对于使用每个张量量化的深度可分离层模型特别有益,但它通常也改善其他层和量化选择。
•请注意,统一的CLE API实现了以下步骤:
 1.批量归一化折叠(参见第3.2节),
 2.将ReLU6激活替换为ReLU。然而,这种替换可能导致精度下降(请参考第4.3.1节的指南)。
 3.应用CLE进行权重均衡(参见第4.3节),
 4.最后,吸收高偏置以均衡激活。
•用户应将原始模型作为输入传递给此API之前进行批量归一化折叠。
•CLE可以在量化模拟之前(参见第3.1节)应用,但必须在范围设置之前应用。
•在应用CLE之前,用户可以使用AIMET来可视化模型的权重范围,从而确定是否适合应用CLE技术。例如,如果给定卷积层的权重动态范围在通道之间变化很大,则CLE可能有益。此外,可视化可以用于了解应用CLE到给定模型后的效果或改进。图4.2和图4.3显示了两个示例可视化图表。
•AIMET还支持低级API,可以独立使用CLE技术。有关更多详细信息和可视化API,请参阅AIMET在GitHub上的文档(https://quic.github.io/aimet-pages/index.html)。

图4.2
(AIMET可视化示例:MobileNetV2中第一个深度可分离层在BN折叠后的每个(输出)通道权重范围。箱线图显示了在应用CLE之前每个通道的最小值和最大值范围。)

图4.3
(AIMET可视化示例:MobileNetV2中第一个深度可分离层的每个(输出)通道的权重范围。箱线图显示了CLE后每个通道的最小值和最大值范围。)

4.3.1 注意事项

  我们建议在应用CLE技术套件之前,使用将ReLU6替换为ReLU激活函数的基准准确性检查。如果在此替换后浮点准确性下降,请不要应用CLE。相反,可以尝试使用其他技术,例如第4.6节中详细介绍的AdaRound。

将ReLU6替换为ReLU  AIMET支持使用低级API将给定模型中的ReLU6层替换为ReLU激活函数。传递给API的输入模型将被原地修改,以将ReLU6替换为ReLU激活函数。

代码示例
API 可以使用通用的AIMET API轻松进行替换,如下所示。

#代码块4.2  ReLU6替换API示例

from torchvision import models
from aimet_torch import utils
model = models.resnet18(pretrained=True).eval()
# Replace any ReLU6 layers with ReLU , model is updated in-place
utils.replace_modules_of_type1_with_type2(model,torch.nn.ReLU6,torch.nn.ReLU)
  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值