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

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

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、线性量化公式

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

image.png

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

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

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

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

image.png

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

3.2、Scale优化

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

image.png

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

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

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

1、每层的最佳Scale

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

image.png

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

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

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

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

2、对整个网络的最优Scale

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

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

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

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

3.3、INT7训练后推理

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

量化在很大程度上依赖于硬件的特性,以利用低比特推理。在常规的卷积计算中,在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效率,这在工业应用中很重要。

相关文章
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
2024年5月大语言模型论文推荐:模型优化、缩放到推理、基准测试和增强性能
本文汇总了2024年5月发布的七篇重要大语言模型论文,涉及模型优化、缩放、推理及性能增强。
52 2
|
22天前
|
机器学习/深度学习 自然语言处理 物联网
ICML 2024:脱离LoRA架构,训练参数大幅减少,新型傅立叶微调来了
【6月更文挑战第4天】在ICML 2024上,研究团队提出了傅立叶变换微调(FourierFT),一种减少训练参数的新方法,替代了依赖LoRA的微调。FourierFT通过学习权重变化矩阵的稀疏频谱系数,实现了LFMs的高效微调。在多项任务上,FourierFT展示出与LoRA相当或更优的性能,参数量却大幅减少,如在LLaMA2-7B模型上,仅需0.064M参数,对比LoRA的33.5M。广泛实验验证了其在NLP和CV任务上的效果,但未来还需探索其适用性和泛化能力。论文链接:[arxiv.org/abs/2405.03003](https://arxiv.org/abs/2405.03003)
35 0
|
8月前
|
机器学习/深度学习 人工智能 算法
【CIKM 2023】扩散模型加速采样算法OLSS,大幅提升模型推理速度
近日,阿里云人工智能平台 PAI与华东师范大学陈岑副教授团队合作在深度学习顶级会议 CIKM 2023 上发表 OLSS (Optimal Linear Subspace Search) 算法,这是一种针对扩散模型的采样加速算法。在这篇论文中,扩散模型加速算法的本质被建模成线性子空间的扩张过程,给出了目前方法的统一分析,并基于此设计了新的加速算法,大幅度提升了扩散模型的生成速度。
|
1月前
|
机器学习/深度学习 存储 文字识别
模型精度不降反升!飞桨是这样改进PACT量化算法的!
模型精度不降反升!飞桨是这样改进PACT量化算法的!
82 0
|
6月前
|
存储 JSON 自然语言处理
使用ExLlamaV2量化并运行EXL2模型
量化大型语言模型(llm)是减少这些模型大小和加快推理速度的最流行的方法。在这些技术中,GPTQ在gpu上提供了惊人的性能。与非量化模型相比,该方法使用的VRAM几乎减少了3倍,同时提供了相似的精度水平和更快的生成速度。
134 0
|
10月前
|
存储 机器学习/深度学习 编解码
ImageNet-1K压缩20倍,Top-1精度首超60%:大规模数据集蒸馏转折点
ImageNet-1K压缩20倍,Top-1精度首超60%:大规模数据集蒸馏转折点
151 0
|
机器学习/深度学习 存储 TensorFlow
集成时间序列模型提高预测精度
使用Catboost从RNN、ARIMA和Prophet模型中提取信号进行预测
176 0
|
存储 算法 计算机视觉
量化部署必卷 | EasyQuant量化通过Scale优化轻松超越TensorRT量化(二)
量化部署必卷 | EasyQuant量化通过Scale优化轻松超越TensorRT量化(二)
128 0
|
机器学习/深度学习 人工智能 算法
模型部署系列 | 一文告诉你AI模型QAT量化遇到震荡问题应该如何解决呢?(二)
模型部署系列 | 一文告诉你AI模型QAT量化遇到震荡问题应该如何解决呢?(二)
201 0
|
机器学习/深度学习 人工智能 算法
模型部署系列 | 一文告诉你AI模型QAT量化遇到震荡问题应该如何解决呢?(一)
模型部署系列 | 一文告诉你AI模型QAT量化遇到震荡问题应该如何解决呢?(一)
528 0