量化部署必卷 | EasyQuant量化通过Scale优化轻松超越TensorRT量化

简介: 量化部署必卷 | EasyQuant量化通过Scale优化轻松超越TensorRT量化

0be7dc7b307be675b8a78a2d0c38e6b4.png

8-bits量化已被广泛应用于各种深度学习应用中的加速网络推理。有两种量化方法,基于训练的量化和训练后量化。基于训练的方法遭受繁琐的训练过程,而训练后量化则可能导致不可接受的精度下降。


在本文中提出了一种通过Scale优化的高效且简单的后训练方法,即EasyQuant(EQ),该方法可以获得与基于训练的方法相当的精度。具体而言,首先在卷积输出处交替优化所有层的权重和激活Scale,以进一步获得高量化精度。然后,将权重和激活的比特宽度降低到INT7,并采用INT16中间存储和整数Winograd卷积实现来加速推理。


在各种计算机视觉任务上的实验结果表明,EQ优于TensorRT方法,在7-bits的后训练中可以达到接近INT8的精度。

1、简介

深度卷积神经网络(CNN)在各种计算机视觉任务中取得了相当大的成功,包括分类、检测和识别。然而,由于这些模型所需的巨大计算能力,在计算受限的设备上部署CNN并非易事。量化是减少CNN模型内存占用和计算量的关键技术。

与Float-32(FP32)模型相比,低bits位表示(例如8-bits宽或更低)通常导致精度损失。尽管与后训练方法相比,基于训练的方法可以获得更高的精度,但它们在实际应用中存在一些缺点。例如,训练量化的神经网络是一项耗时的工作,需要专家经验来指导整个训练过程,这会显著影响工作的成功。此外,在某些场景中,整个训练数据不可用于部署量化模型。

在本文中,通过有效地优化权重和激活的Scale,介绍了一种有效且简单的训练后量化方法。提出的Scale优化方法被命名为EasyQuant(EQ)。具体而言,首先将量化卷积过程公式化为优化问题目标,以最大化FP32和INT8输出之间的余弦相似性。这个问题通过交替搜索权重和激活Scale来解决。对于整个网络优化,逐层顺序优化Scale,并贪婪地获得每一层的最优量化Scale。在每一层中联合优化权重和激活的Scale,并基于前一层的量化结果优化下一层的权重和激活Scale。此外,采用INT16中间存储和整数Winograd算法来提高7-bits宽度背景下的真实硬件推理延迟。

最后,在常见计算机视觉任务(包括分类、检测和识别)的不同位宽设置下验证了本文的方法。

总之,本文主要贡献是:

  • 提出了一种用于训练后量化的Scale优化方法,该方法交替搜索权重和激活Scale目标,并可以获得与基于训练的量化方法相当的精度。
  • 将所提出的训练后量化方法应用于更高效的INT7量化推理框架,这提高了中间INT16存储的使用效率。
  • 在各种计算机视觉任务上的大量实验表明,Scale优化方法可以在7-bits的情况下实现有效的INT8训练后量化和接近INT8精度,而无需微调。此外,在实际ARM平台上实现并测试了所提出的EQ INT7推理。

2、相关工作

大多数的量化工作大致可以分为两类,即基于训练的量化和训练后量化。基于训练的量化通常应用复杂的设计,从头开始训练一个低bit位整数模型,或微调一个预先训练过的FP32模型。训练后的量化通常会将预训练过的网络从浮点范围转换为整数范围,以校准应用的Scale。

2.1、基于训练的量化

基于训练的量化的早期工作通常学习更有限bits宽度(例如2-bits以下)的量化网络。由于bits宽度更为有限,这些方法通常会遭受巨大的精度下降。最近的工作集中于更高的bits宽度量化,以获得与FP32模型类似的精度。Mishra等人提出了wide reduced-precision网络,通过增加滤波器数量来克服精度下降,并在4-bits宽度内获得更好的精度。Zhou等人提出逐步量化网络的部分权重,以减少5-bits量化所涉及的训练困难。

在Pact中通过与任务损失相关的训练采用了优化量化阈值,以指导4-bits宽度的训练过程。这些工作都试图从头开始训练小于8-bits的模型,这很难获得与8-bits模型类似的精度。此外,它们需要特定的硬件和软件才能工作,因为大多数应用设备只支持通用的INT8量化模型。因此,在当前的工业应用中很少采用较低bits(4-bits)的基于训练的量化。

另一种基于训练的方法是量化感知训练(QAT)。量化白皮书提出了QAT方法作为一种补充方法,以恢复INT8量化导致的一些损失的精度。QAT模拟了传统训练过程中的量化噪声,并在Float 32范围内使用常规方法训练模型,这些方法通常用于从Float 32模型进行微调。Jain等人通过使阈值在常规训练过程中可训练来改进QAT,这可以看作是一种基于训练的Scale优化方法。由于这些工作没有在训练过程中应用复杂的设计,因此它们可以主要处理8-bits量化,而几乎不考虑来自中间存储的影响。此外,从头开始训练量化模型具有很高的时间复杂性,需要目标任务域和量化域的专家经验,尤其是在更复杂的任务中,如目标检测和人脸识别。

2.2、训练后量化

由于上述缺点,INT8训练后量化成为大多数实际量化应用的主要趋势。这一领域的研究包括英伟达的TensorRT(TRT)和谷歌的Tensorflow-Lite。TRT采用KL散度最小化方法来校准激活的量化阈值,并利用最大绝对值作为权重量化的阈值。Tensorflow-Lite利用最大绝对值作为激活的阈值,并加入了以最大绝对值作为阈值的每通道量化方法来量化权重。这两种方法根据简单的最大绝对值或统计特征来量化激活Scale和权重Scale,在一些预先训练过的网络中,这些网络仍然存在不可接受的性能下降。

后来,Yoni Choukroun等人改进了量化方法,将每个层量化过程视为通过交替黄金分割搜索解决的约束优化过程。由于量化张量的搜索空间很大,整个搜索过程非常耗时。Banner等人通过理论推导最佳限幅值,优化了激活阈值。分析表达式基于激活分布的严格假设,而这在实际模型中很少出现。在这项工作中联合优化了每一层的权重和激活Scale,并以减少卷积输出的量化效应为目标。由于不需要特定的硬件和进一步的假设,本文的方法对于各种模型的情况更加稳健。

2.3、工业实用性

量化技术的一个重要好处是可以减少边缘设备上的推理延迟,而边缘设备的计算能力有限。然而,在有关量化的文献中很少有讨论量化方法的适用性,而且在实际的量化部署中它不是通用的。为了减少一般的边缘设备,如ARM CPU的推理延迟,量化方法为推理时间内的卷积操作提供了量化的权值和激活。有些方法,例如BNN、BEQ以及TNT,它只将权重量化到不动点,很难用来加速真实的推理过程。此外,一些方法OMSE、XNORNet以及OCS确实将权值和激活都量化到不动点,但它们通常需要特定的硬件或软件来促进量化推理的实现。这阻碍了这些方法的广泛使用。

本文的方法量化了权重和激活,而不需要专门的硬件。此外,作者提出了一种关于INT7量化推理的指令级优化,以加速正常的INT8推理,这可以很容易地部署在一般硬件上,例如ARM平台。

3、本文方法

在本节中,首先制定线性量化过程。然后,详细介绍了所提出的Scale优化方法。此外,还讨论了INT7训练后推理的设计。

3.1、线性量化公式

线性量化过程可以表示为函数1675326057805.png,其中1675326073943.png是一个张量,S是一个正实数Scale因子。量化结果1675326094039.png,其中1675326107392.png为b位宽整数域。线性量化函数1675326120416.png包括3个子过程,即1675326453858.png。输入张量X和Scale因子S的线性量化公式可以表示为:

acadac3213ef2f57f70bb37b867981cd.png

其中1675326139017.png表示使用上限舍入将1675326148682.png的输入张量舍入为整数,而“·”表示元素乘积。在线性量化的不同实现中,它可以采用不同类型的舍入(1675326166698.png1675326179370.png)。1675326495043.png表示张量中超出量化域范围的数值被剪裁。

定义一个量化的l层神经网络为1675326519211.png分别为FP32范围内的第l层输入激活、权重和量化Scale因子。具体来说,量化Scale因子(1675326641383.png)包含2部分。第l层输入激活的Scale记为1675326557468.png。第层权重的Scale记为1675326557468.png1675326557468.png是应用于特征映射中的每个元素的非负实数。1675326588637.png是输入权值的非负实数。为了便于讨论在每层量化方案中举例说明了所提出的方法。对于过通道量化方案,1675326630750.png中的每个滤波器都应该有独立的Scale。此外,将预训练的FP32模型的第个输出特征图表示为1675326614352.png,其对应的量化推理输出特征图表示为1675326600261.png

因此,在第层的整个线性量化前向卷积和反量化操作可以描述为:

562c3464dfafdda48cd6fa355e97009e.png

其中,∗为卷积运算。第层的原始输出可以表示为:

8de5e8f3a8de980899746b58788d4063.png

从式(2)可以看出,Scale因子实际上控制了量化过程中1675327122749.png的阈值,这在很大程度上影响了原始输出特征映射(1675327147494.png)和量化推理特征映射(1675327164478.png)之间卷积结果的余弦相似性。因此,目标函数侧重于优化权重(1675327173975.png)和激活(1675327182750.png)的尺度因子,并提高1675327147494.png1675327193799.png之间的相似性。

3.2、Scale优化

神经网络模型的量化过程可以分为每一层,其中权值和激活分别被量化,并准备进行卷积操作。卷积层的量化情况如图1所示。

bd4097a2a2ac1715f87173c2bdf92901.png

整个信息从神经网络的第一层传递到转换。它在神经网络的最终输出中引入了不可避免的噪声。大多数训练后工作使用KL散度方法来计算每一层的激活的Scale因子。通常,它们使用大约1000个校准数据来近似每一层的输入激活分布。对于每一层的权重Scale,通常使用绝对最大值作为阈值来确定Scale,因为较大的权重值总是主导结果。它们分别优化每个激活的Scale,而不优化权重Scale,这很容易导致误差积累。

它还忽略了优化原始和量化分布之间的相似性这一事实,这不能保证提高原始和量化卷积输出之间的相似。此外,这些方法主要针对激活和权重设计INT8量化,并需要INT32位来保存CNN推理过程中的所有中间结果。这需要更多的计算时间,并限制了它们的应用领域。

为了解决这一问题,作者提出了一种简单有效的Scale优化方法,该方法联合优化激活Scale和量化卷积输出之间的权重。此外,还提出了INT7量化推理,以进一步加速传统的INT8量化,并将其部署在真实的ARM平台上。

1、每层的最佳Scale

根据等式(2)优化了预训练卷积神经网络1675327210904.png的比例因子1675327223664.png,其中激活是从1675327238681.png具有N个样本的给定校准数据集D生成的。它比普通的训练数据集少得多。在神经网络的第层,作者的方法可以表示为最大化输出特征图余弦相似性:

43db5ef12ca9a11a2d083abc1ff8da7f.png

其中,1675327263802.png将激活和权重缩放到固定的位宽度范围。一般来说,Scale越大,数值越大,就会饱和到量化范围的最大值。Scale越小,越小的数值就会四舍五入为零。


在这里采用交替优化方法分2个层次来解决这个问题。首先,1675327569978.png是固定的,并解决权重调整的1675327282601.png。其次,1675327282601.png是固定的,并解决1675327569978.png以微调激活Scale。1675327282601.png1675327569978.png交替优化,直到1675327613955.png收敛或超过时间限制。在这里,为了快速收敛,1675327282601.png1675327569978.png分别以最大值或激活值初始化。对于1675327282601.png1675327569978.png的搜索空间,将1675327635004.png的区间线性划分为n个候选选项,并对它们进行简单的搜索策略。

在实验中,超参数1675327668575.png的各种任务都具有鲁棒性。更先进的搜索方法可以用于搜索候选Scale,而在实验中作者发现,简单的搜索策略对目标函数的不规则波动具有更强的鲁棒性。

因此,作者在优化过程中应用了这些合理的初始化策略来解决这个问题。当在每个通道量化方案中优化权值Scale时,其中1675327282601.png是c(该层中的滤波器数)维数的集合,这样可以在一个搜索过程中并行地调整每个kernel的独立Scale。

2、对整个网络的最优Scale

在前一节中,将介绍如何优化一层的最优Scale的激活Scale和权重Scale。将作者方法一层一层地应用于整个卷积神经网络。

ae2dcc35c71ab6e289672fc9bd0a20a2.png

对于每一层,从当前模型中获得输入激活1675327703623.png,其中所有前一层都被量化和优化。从原始模型中收集输出特征图1675327715541.png,而不进行量化。采用这种贪婪策略的好处是:

  • 将整个网络的优化划分为子问题,有助于减少优化的巨大搜索空间;
  • 当前层1675327715541.png的优化考虑了来自所有前一层的累积噪声。

首先,对于一个L层卷积神经网络,采用提出的方法依次得到最优1675327745310.png。算法1总结了积分模型量化中训练后层的Scale优化方法。

3.3、INT7训练后推理

在这里作者实现了对INT7训练后推理的高效设计。这里还讨论了详细的解释,以提供更多的见解,7位宽的意义。

82b32f324b2cef0c7ed8509178ed5fd5.png

量化在很大程度上依赖于硬件的特性,以利用低比特推理。在常规的卷积计算中,在ARM NEON指令集中,可以通过有符号向量乘加长指令(SMLAL)和有符号乘加长成对指令(SADALP)来实现。SMLAL指令乘法并添加8位元素以产生16-bits结果,而SADALP指令将两个相邻的16-bits结果添加到32-bits累加器中。使用这两个指令可以在ARM架构上有效地实现卷积过程。上面提到的数据流如图2所示。

在INT8量化中,安全的解决方案是使用32-bits寄存器来存储中间变量。然而,在CortexA处理器中的ARM V8.2-A架构之前,没有指令将2个8-bits寄存器号的乘法结果存储到一个32-bits寄存器中。因此,通用解决方案首先使用SMLAL来增加8位元素并产生16-bits结果,然后使用SADALP将两个相邻的16-bits结果添加到32-bits累加器中。

对于常规卷积运算,8-bits(8位有符号整数)推理只能进行2次SMLAL运算,而不会产生任何溢出,这是无效的。作者提出的7-bits(7位有符号整数)推理可以在没有溢出的情况下进行8次SMLAL,这与INT8推理相比更有效。与8-bits推理相比,它可以在将SMLAL运算添加到32位累加器之前进行更多的SMLAL操作。一般来说,INT7后训练方法可以更多地利用CPU效率,这在工业应用中很重要。

4、实验

4.1、INT8与INT7的对比

1、图像分类

6ea968049a43e9cbbe122219b6cce645.png

2、目标检测

75f41ce21483d2f8e02e73a4d05c75bb.png

3、人脸识别

fb537d565a292542975e61468685074a.png

4.2、INT7训练后量化

acaae8f3f71ce484845e8d743b0d304f.png15659cdc25ffac0dbc04916b6931cffd.png

4.3、在小于7-bits时的比较

46246e8190c66adbb48a4fd203535d08.png71e1b29a58daf71ba93ebfd5c1542294.png

5、总结

本文从保持量化精度和部署延迟的角度,提出了一种基于Scale优化的方法来提高训练后的量化。作者提出的INT7量化推理不依赖于任何特定的框架,可以应用于任何线性训练后方案,以提高推理速度和准确性。它有利于真正的工业INT8训练后量化,而没有复杂的量化感知微调。

实验表明,该方法可以在各种任务和卷积结构中获得更好的量化模型精度。通过设计Int16中间存储和整数Winograd算法,在实际硬件平台上,与TRT方法相比可以以更低的精度降低进一步提高推理速度。

6、参考

[1].EasyQuant: Post-training Quantization via Scale Optimization.

7、推荐阅读

FasterX实时目标检测 | 依托NanoDet思想,使用辅助Head进一步提升YOLOX性能

量化部署篇 | Vision Transformer应该如何进行PTQ量化?这个方法或许可以参考!

3D检测经典 | 第一个Anchor-Free、第一个NMS-Free 3D目标检测算法!!!

相关文章
|
4月前
英伟达玩转剪枝、蒸馏:把Llama 3.1 8B参数减半,性能同尺寸更强
【9月更文挑战第10天】《通过剪枝和知识蒸馏实现紧凑型语言模型》由英伟达研究人员撰写,介绍了一种创新方法,通过剪枝和知识蒸馏技术将大型语言模型参数数量减半,同时保持甚至提升性能。该方法首先利用剪枝技术去除冗余参数,再通过知识蒸馏从更大模型转移知识以优化性能。实验结果显示,该方法能显著减少模型参数并提升性能,但可能需大量计算资源且效果因模型和任务而异。
99 8
|
1月前
|
人工智能 物联网 C语言
SVDQuant:MIT 推出的扩散模型后训练的量化技术,能够将模型的权重和激活值量化至4位,减少内存占用并加速推理过程
SVDQuant是由MIT研究团队推出的扩散模型后训练量化技术,通过将模型的权重和激活值量化至4位,显著减少了内存占用并加速了推理过程。该技术引入了高精度的低秩分支来吸收量化过程中的异常值,支持多种架构,并能无缝集成低秩适配器(LoRAs),为资源受限设备上的大型扩散模型部署提供了有效的解决方案。
70 5
SVDQuant:MIT 推出的扩散模型后训练的量化技术,能够将模型的权重和激活值量化至4位,减少内存占用并加速推理过程
|
5月前
|
机器学习/深度学习 PyTorch TensorFlow
ONNX 与量化:提高模型效率
【8月更文第27天】随着人工智能技术的广泛应用,模型部署变得越来越重要。为了在资源受限的设备上运行复杂的机器学习模型,模型量化技术成为了一种有效的手段。Open Neural Network Exchange (ONNX) 作为一种开放格式,支持在不同框架之间交换训练好的模型,同时也支持模型量化。本文将探讨如何结合 ONNX 和模型量化技术来提高模型的效率,减少模型大小并加快推理速度。
826 2
|
8月前
|
存储 机器学习/深度学习 计算机视觉
字节开源大模型量化新思路,2-bit量化模型精度齐平fp16
【5月更文挑战第25天】字节跳动研究团队提出新型量化方法decoupleQ,实现2-bit量化模型与fp16/bf16同等精度。该方法通过参数分解,将量化转化为数学优化问题,简化处理并提高硬件兼容性。decoupleQ在大型语音模型上验证了其2-bit量化效果,降低了存储和计算成本,适用于资源受限环境。论文开源,为量化技术发展带来新视角。
205 4
|
8月前
|
机器学习/深度学习 存储 文字识别
模型精度不降反升!飞桨是这样改进PACT量化算法的!
模型精度不降反升!飞桨是这样改进PACT量化算法的!
246 0
|
存储 JSON 自然语言处理
使用ExLlamaV2量化并运行EXL2模型
量化大型语言模型(llm)是减少这些模型大小和加快推理速度的最流行的方法。在这些技术中,GPTQ在gpu上提供了惊人的性能。与非量化模型相比,该方法使用的VRAM几乎减少了3倍,同时提供了相似的精度水平和更快的生成速度。
230 0
|
机器学习/深度学习 存储 人工智能
模型推理加速系列 | 03:Pytorch模型量化实践并以ResNet18模型量化为例(附代码)
本文主要简要介绍Pytorch模型量化相关,并以ResNet18模型为例进行量化实践。
|
存储 算法 计算机视觉
量化部署必卷 | EasyQuant量化通过Scale优化轻松超越TensorRT量化(二)
量化部署必卷 | EasyQuant量化通过Scale优化轻松超越TensorRT量化(二)
188 0
|
机器学习/深度学习 存储 算法
量化部署必卷 | EasyQuant量化通过Scale优化轻松超越TensorRT量化(一)
量化部署必卷 | EasyQuant量化通过Scale优化轻松超越TensorRT量化(一)
268 0
|
存储 PyTorch 算法框架/工具
一文读懂—Pytorch混合精度训练
一文读懂—Pytiorch混合精度训练
633 0