探讨AIMET训练后量化方法

通常,在面临三项选择时,比如功能、效率和低成本-如强大、高效和低成本,实际上可供您选择的只有一到两项。机器学习(ML)开发者在开发移动神经网络时,对于模型的要求一般是小而快,并且功耗低,因此,并不总能奢望选出一两个最优先的目标。

AIMET 技术指南正在上传…重新上传取消https://arxiv.org/abs/2201.08442

在我们最近的博客文章:使用AIMET优化神经网络中,我们讨论了Qualcomm创新中心(QuIC)的开源AI模型效率工具包(AIMET)如何提供高级量化及压缩技术,以及如何搭配Qualcomm神经处理SDK使用。开发者使用AIMET优化ML模型,不仅可以减少体积,还可以降低推断所需的功耗,无需牺牲精度。

此前,Qualcomm AI Research发布了白皮书:神经网络量化白皮书,深入探讨了量化问题。之后又发布了白皮书:使用AI模型效率工具包(AIMET)量化神经网络,为使用AIMET的两种量化提供了广泛的讲解和实用指南:

  1. 训练后量化(PTQ):分析经过训练的神经网络,使用32位浮点值(FP32网络FP模型),查找和建议最佳量化参数,无需再训练或微调模型。PTQ方法可以无数据,即不需要数据集,也可以使用少量校准数据集,优化模型的量化推理也可以使用小型校准数据集来优化量化推理的模型。
  2. 量化感知训练(QAT):QAT采用经预先训练的FP32模型,在适当的位置,插入量化操作,模拟量化噪声,微调模型参数降低量化噪声,从而产生适合量化推理的模型。

本文将介绍白皮书中讨论的PTQ技术,重点介绍其关键属性、优势以及技术使用时机。

为何需要量化?

要理解PTQ方法的意义,重要的是要记住量化的目的是什么。 简而言之。这使得我们可以使用较小的位宽来表示这些值(例如8位)。值(例如,8位整数而不是32位浮点值),从而减少需要存储、传输和处理的比特数量。此外,大多数处理器,包括Snapdragon移动平台上的高通公司Hexagon DSP,通常都能执行定点(即整数)数学。 与浮点数学相比,大多数处理器(包括Snapdragon移动平台上的高通Hexagon DSP)通常能更快、更有效地进行定点(即整数)数学运算。

而现今的神经网络一般使用32位浮点值来表示权重和激活张量,因此将这些值使用最小4位的值进行量化表示是非常有益的。

但是,正如白皮书所指出的,量化可能引起噪声,从而降低精度。导致噪声的原因多种多样,比如较大离群值被裁剪到量化范围。因此,我们作出了巨大的投入,推动发展不同类型神经网络的量化方法。

PTQ工作流程和方法

目前,AIMET的PTQ方法包括:

  • 跨层均衡(CLE
  • 偏差校正
  • AdaRound

这些方法适用于典型优化工作流程的不同环节。

白皮书建议在使用AIMET PTQ方法时采用以下工作流程:

1:采用AIMET PTQ方法的工作流程。

假设某个经预先训练的FP模型,工作流程包括:

  • AIMET跨层均衡(CLE)预处理FP模型,使其适合量化。
  • 然后在模型中添加量化操作,模拟量化效果,评估性能。量化操作可基于多种因素(例如,目标硬件)。
  • 选择量化器的权重范围,指定裁剪阈值,同时优化减少舍入误差。
  • 如果数据可用,则AIMET AdaRound实现优化权重的舍入,而不是执行典型的就近舍入方法
  • 如果数据不可用,则使用分析性偏差校正。偏差校正调整偏差参数,校正因量化导致的噪声中的偏差。无数据量化(DFQ)中详细介绍了偏差校正和CLE。

下面我们将详细探讨CLE、偏差校正和AdaRound。

跨层均衡(CLE)

CLE使用激活函数的尺度-同变性特征来均衡网络中的权重范围(即,均衡权重张量,减少跨通道振幅变化),提高了很多常见的计算机视觉架构的量化精度性能。对于具有深度方向可分离卷积层的模型,CLE尤其有益。

AIMET提供适用于CLE的API,包括适用于PyTorch的equalize_model()函数,如下面的示例代码所示:

偏差校正

偏差校正修复了量化导致的层输出偏移。如果权重量化引发的噪声出现偏差,也会在层激活中产生偏移(即偏差),其根本原因通常是由于裁剪的离群值偏离了预期分布。偏差校正使用校正项,调整层的偏差参数,校正噪声中的偏差,因此至少可以部分恢复原始模型的精度。

AIMET支持两种偏差校正方法:

  • 经验偏差校正:使用数据集通过比较量化模型和FP模型的激活,计算校正项,需要额外的处理时间。
  • 分析偏差校正:通过分析计算偏离误差,无需数据。对于具有批归一化和ReLU激活功能的网络,使用批规一化的中间值和标准偏差。AIMET自动检测给定模型中具有相关批归一化统计数据的候选卷积层,执行偏差校正。

AdaRound

通常,量化将来自较大域的值投射到较小域(即网格)中,然后将值四舍五入到最近的网格点(例如,整数),如图2所示:

28位签名表征量化时就近舍入到距网格上最近点的可视化效果图。

然而,就近舍入并不总是最优方案。AdaRound是一种高效的方法,它使用少量数据来确定如何做出舍入决策,并调整权重以获得更好的量化性能。AdaRound对于使用训练后方法量化至低比特宽度(如4位整数)尤其有用。

AIMET提供了用于执行AdaRound的高级API,可以导出具有最新权重的模型和具有相应编码的JSON文件。

有关AdaRound的更多信息,请查看向上或向下?训练后量化的自适应舍入

结果显示

白皮书展示了使用AIMET PTQ方法获得的良好结果。

下表1显示了作为独立FP32模型和使用AIMET CLE和偏差校正方法量化至8位整数后,常见的对象分类和语义分段神经网络模型的准确性:

模型 基线(FP32模型) AIMET 8位量化(使用CLE和偏差校正)
MobileNetv2(最高准确度) 71.72% 71.08%
ResNet(最高准确度) 76.05% 75.45%
DeepLab v3(平均IoU) 72.65% 71.91%

1FP32模型与使用AIMET CLE和偏差校正方法优化的模型的准确性

在所有三种情况下,精度损失(相对于FP32模型)小于1%,而模型减少了四倍:从32位减至8位。功率和性能改进取决于模型和硬件,但一般而言,从FP32到INT8可以提供最高16倍的功效改善。

表2显示了高级驾驶辅助系统(ADAS)对象检测模型的FP32值与使用AdaRound就近舍入进行量化后的模型精度比较:

配置 平均精度
FP32 82.20%
就近舍入(W8A8) 49.85%
AdaRound (W8A8) 81.21%

2:对象检测模型FP32,与使用标准舍入到最近网格点的量化,以及由AdaRound引导的舍入量化后的模型精度比较

从上表我们可以看出,标准的舍入和AdaRound之间的精度存在显著差异,后者的精度偏差不超过原始FP32模型的1%。同样,从32位到8位的量化使模型大小减少了四倍。

如需了解更多信息,请阅读此处的白皮书以及以下资源:

Snapdragon, Qualcomm Neural Processing, and Qualcomm Hexagon are products of Qualcomm Technologies, Inc. and/or its subsidiaries. Qualcomm AI Research is an initiative of Qualcomm Technologies, Inc. AIMET is a product of Qualcomm Innovation Center, Inc.

骁龙、Qualcomm 神经处理、Qualcomm HexagonQualcomm Technologies, Inc./或其子公司的产品。Qualcomm AI ResearchQualcomm Technologies, Inc.发起的计划,AIMETQualcomm Innovation Center,Inc.的产品。

猜你喜欢

转载自blog.csdn.net/jacke121/article/details/126656708