Integer or Floating Point? New Outlooks for Low-Bit Quantization on Large Language Models
文章标题:整数还是浮点数?大型语言模型低比特量化的新视角
作者:Yijia Zhang, Lingran Zhao, Shijie Cao, Wenqiang Wang, Ting Cao, Fan Yang, Mao Yang, Shanghang Zhang, Ningyi Xu
机构:上海交通大学, 北京大学, 微软亚洲研究院
A1 主要贡献
本文探讨了在大型语言模型(LLMs)的低比特量化中,整数(INT)与浮点数(FP)格式的优劣问题。随着LLM规模的急剧增长,低比特量化对于降低模型大小和推理成本至关重要。传统上,INT格式是主流选择,但新兴的低比特FP格式(如FP8/FP4)正获得尖端硬件(如NVIDIA H100 GPU)的支持,提供了有力的替代方案。
核心问题与研究目标:
研究的核心问题是,在相同比特宽度下,INT和FP格式哪种更适合LLM的量化。由于LLM中张量分布的复杂性和多样性,研究发现没有任何一种格式能在所有情况下都表现最优。具体来说,对于权重张量,8比特量化时INT优于FP,但在4比特时两者各有优劣;对于包含显著离群值的激活张量,FP格式因其非均匀分布特性(对小值精度高,对大值范围广)而表现更佳。
创新点与主要贡献:
基于上述发现,本文提出了一种名为混合格式量化(MoFQ)的方法,该方法在层级别上为模型选择最优的量化格式(INT或FP)。这种方法简单而有效,在保持比特宽度不变的情况下,结合了两种格式的优点,且不带来额外的硬件开销。
本文的主要贡献总结如下:
1. 对用于量化LLM的INT和FP格式进行了深入的比较分析,为未来使用低比特FP格式的量化设计提供了宝贵的见解。
2. 提出了混合格式量化(MoFQ)方法,这是一种简单而有效的逐层格式选择方案,无缝地结合了INT和FP格式的优点,并且对系统和硬件友好。
3. MoFQ在4比特纯权重(W-only)量化和8比特权重-激活(WA)量化方面均取得了当前最先进(SOTA)的结果。
A3 背景知识/关键Observation/设计原则
2 预备知识
整数与浮点数格式
整数和浮点数格式是计算系统中表示数字的两种主要方式。它们之间的关键区别在于数值分布。整数格式在可表示范围内呈均匀分布,两个连续数字之间的差值为1。而浮点数格式由于引入了指数和尾数的设计,呈现出非均匀分布,从而为较小的数提供更高的精度,为较大的数提供较低的精度。新兴的FP8格式具有两种广泛采用的选项,E4M3和E5M2,其指数和尾数的比特数均少于FP32/16,如图1所示。为了突出FP和INT分布的差异,图2可视化了INT8和FP8-E5M2在零点附近表示的一小部分值。
硬件支持与效率
主流的深度学习硬件通常支持高比特FP和低比特INT运算,而最近,H100已引入对FP8-E5M2和FP8-E4M3的支持。至于硬件效率,FP运算通常比INT运算成本更高、性能更低。然而,对于比特宽度降至8/4比特的低比特量化和推理,它们的硬件效率尚不明确。因此,本工作也对不同比特宽度下INT和FP运算的硬件成本进行了基准测试,具体将在3.1节中展示。
模型量化
模型量化通过使用更少的比特来表示张量,从而减少DNN的内存和计算成本。模型量化主要有两种方法:纯权重(W-only)量化和权重与激活(WA)量化。纯权重(W-only)量化仅压缩权重张量,在计算过程中仍需要更高比特宽度的运算。而WA量化则进一步量化激活张量,从而实现更低比特宽度的计算并提高效率。根据是否需要重新训练,量化可分为训练后量化(PTQ)和量化感知训练(QAT)。PTQ将预训练模型转换为量化版本而无需额外训练,因此速度更快、成本效益更高,而QAT则使用漫长的训练过程来模拟量化效果。在本文中,由于QAT的训练成本过高,我们专注于将PTQ应用于LLM。
3 整数与浮点格式的比较分析
本节旨在通过进行全面的比较,阐明INT和FP量化格式之间的差异,特别关注硬件效率和量化误差。我们力求了解它们各自的优缺点,以及它们如何影响模型的性能和效率。为确保公平比较,我们在整个分析过程中保持两种格式的比特宽度相同。
3.1 硬件成本
不同位宽下INT与FP算子的硬件成本对比
我们首先通过比较INT和FP算子(包括加法器、乘法器和乘加(MAC)单元)在不同比特宽度下的硬件成本,来深入研究硬件效率。利用Synopsys Design Ware以及台积电的7nm技术和Synopsys Design Compiler,我们能够准确确定每种类型算子的面积需求。在本实验中,我们为所有算子设定了0.5GHz的目标时钟频率。对于8位FP算子,我们采用E5M2格式,而E4M3格式也能得出类似的结果。值得一提的是,在8位MAC中,乘法器是8位的,累加器是16位的,以防止溢出,这是低位MAC的标准配置。如图3所示,FP乘法器比其INT对应物需要更少的面积,而FP加法器则比INT加法器需要更多的面积。对于作为DNN中矩阵乘法基本构建块的MAC单元,FP运算通常比INT运算需要更多的面积。然而,随着比特宽度的减小,这种差距会显著缩小。有趣的是,在8位时,FP8和INT8 MAC单元的面积需求几乎相同。这一观察结果表明,INT8和FP8展现出相似的硬件成本和推理性能,这与H100 GPU的规格相符。
3.2 量化误差
不同格式量化误差的统计分析
在本小节中,我们通过对LLM中真实张量和层的统计分析来比较不同格式的量化误差。量化主要针对线性层(算子),因为它们在存储和计算中占主导地位。线性层表示为Aout = W * Ain
,其中W
是权重张量,Ain
是输入激活张量,Aout
是输出激活张量。我们对所有这三个张量进行量化误差分析,以获得全面的理解。我们对W
进行静态张量分析,对Ain
进行动态张量分析,并对Aout
进行层分析,后者受到两个输入误差累积的影响。在我们的分析中,我们遵循先前量化研究中广泛使用的方法【索引9,A survey of quantization methods for efficient neural network inference,2021】,对权重张量使用逐通道量化,对激活张量使用逐张量量化。FP4格式采用E2M1配置,FP8格式遵循E4M3配置。
静态(权重)张量分析
我们使用4位和8位的FP和INT格式对权重张量进行量化,并计算量化后张量与原始张量之间的均方误差(MSE)。本实验中使用的权重张量均从LLaMA-65B模型【索引20,Llama: Open and efficient foundation language models,2023】中采样。图4展示了INT和FP量化的比较。为清晰起见,我们按INT MSE对结果进行排序。需要注意的是,层ID与模型中的实际层数不直接对应。如图4右侧所示,当用8位量化权重张量时,INT格式比FP格式表现出更低的误差。当将量化比特宽度降低到4位时,如图4左侧所示,FP和INT格式之间没有绝对的优胜者。在某些层中,FP4的误差较低,而在其他层中,INT4的误差较低。这一分析结果表明,INT在8位权重向量化中具有优势。然而,当比特宽度减小时,用于指数的比特也减少,使得INT和FP的分布更加相似。用均匀分布的INT格式量化静态张量的优势在4位量化中消失了,导致对于4位权重向量化没有明确的最优解。
动态(激活)张量分析
与推理期间的静态权重张量不同,激活张量是动态的,并随每个输入而变化。因此,校准是激活张量量化过程中确定适当缩放因子的重要步骤。在本次分析中,我们从LLaMA-65B模型中选择了32个层,并使用来自校准集的尺度对每层的输入激活张量进行量化。最后,我们比较了FP8和INT8量化的MSE误差,如图5所示。我们的研究结果表明,使用从校准集获得的尺度,FP8的量化误差低于INT8。这是因为校准过程总是选择多个批次中的最大值来确定量化中的缩放因子。这个过程倾向于为大多数批次导出一个比合适值更大的缩放因子。然而,FP格式对大数值的精度较低,对小数值的精度较高,因此天生更适合量化此类动态张量。
层(算子)分析
尽管对输入张量的量化误差分析可以得出一些见解,但层输出量化误差与输入张量量化误差之间的关系尚不清楚。因此,我们研究了当输入张量(W
, Ain
)使用不同格式进行量化时,输出张量Aout
中的量化误差。我们展示了在纯权重(W4A16)和权重-激活(W8A8)两种量化场景下的Aout
MSE误差,其中W
和Ain
张量来自LLaMA-65B模型的不同层。图6显示了使用4位进行纯权重(W-only)量化的结果。由于不同的权重张量在INT4和FP4之间偏好不同的格式,很自然地,不同的层在INT4和FP4之间也表现出不同的偏好。图7显示了使用8位进行权重-激活(WA)量化的结果,使用噪声信号功率比来表示量化误差(值越低越好)。结果表明,当考虑到激活量化时,FP8在大多数层中导致了更低的量化误差。然而,由于权重张量更偏好INT8而非FP8,仍然存在一些INT8更优的情况。基于以上观察,我们可以得出结论,在考虑层误差时,FP或INT对LLaMA层的适用性因情况而异。INT4和FP4对于不同层中的权重都很有用,因为不存在适用于静态张量量化的最优4位格式。同时,尽管我们得出了INT8更适合权重、FP8更适合激活的结论,但Aout
的准确性取决于W
和Ain
相乘的影响,因此对于W8A8量化也没有一致的优越格式。在第5节中,我们将证明为每个层选择合适的格式可以比为所有层使用相同格式获得更好的模型准确性。
A2 方法细节
4.1 利用整数和浮点格式的互补优势
提出混合格式量化(MoFQ)方法
鉴于分析发现没有任何一种量化格式在所有场景中都能始终优于其他格式,我们提出了混合格式量化(MoFQ)方法。MoFQ背后的关键思想是在一个统一的框架中利用整数(INT)和浮点(FP)格式的互补优势,从而最大化两种格式的潜在益处。
MoFQ的逐层格式选择机制
具体而言,MoFQ允许在逐层的基础上选择最合适的格式。如算法1所示,该算法将待量化的模型、一个is_w_only
标志、格式候选项(例如INT和FP)、比特宽度(例如8或4)以及误差度量作为输入。如果is_w_only
设置为true,则只量化层中的权重张量(即纯权重W-only量化);否则,权重和激活都将被量化(即WA量化),从而产生一个可以利用低比特硬件矩阵乘法单元的量化算子。我们专注于逐层格式选择,每层/张量使用相同的格式,并且所有量化张量/层使用相同的比特宽度,因为这种方法遵循简单性原则,提供了一种直接高效的实现,对现有系统或硬件的适应性要求最低。这种直接的方法可以取得令人满意的结果,我们将在第5节中进行展示。使用比层级更细的粒度或增加比特宽度确实可以提高量化效果,但也会带来内存消耗增加以及系统或硬件复杂性提高的代价。我们将对这种权衡的探索作为未来的工作,因为它需要进一步的调查和分析。
1: function MOFQ(model, is_w_only, format_candidates, bit_width, error_metric)
2: quantized_model ← INITIALIZE_EMPTY_MODEL
3: for layer in model.layers_to_quant do
4: min_error ← ∞, best_format ← None
5: for format in format_candidates do
6: quantized_layer ← QUANTIZE_LAYER(layer, format, bit_width, is_w_only)
7: error ← COMPUTE_ERROR(layer, quantized_layer, error_metric)
8: if error < min_error then
9: min_error ← error, best_format ← format
10: end if
11: end for
12: quantized_layer ← QUANTIZE_LAYER(layer, best_format, bit_width, is_w_only)
13: ADD_LAYER_TO_MODEL(quantized_model, quantized_layer)
14: end for
15: return quantized_model
16: end function
17: function QUANTIZE_LAYER(layer, format, bit_width, is_w_only)
18: . Quantize the given layer with the specified format, bit_width, and is_w_only flag
19: end function
20: function COMPUTE_ERROR(original_layer, quantized_layer, error_metric)
21: . Calculate the error between original and quantized layers using the error_metric
22: end function
误差度量的选择
误差度量的选择在MoFQ中起着至关重要的作用,因为它影响着量化准确性与速度之间的平衡。有多种度量可用,包括张量误差、层输出误差和模型输出误差,其精确度依次递增。更精确的度量可能会带来更好的量化结果,但代价是计算时间的增加。因此,选择合适的误差度量对于在量化过程中实现准确性与效率之间的理想平衡至关重要。值得一提的是,用于确定格式优劣的评估度量是经验性的,没有绝对标准。例如,较低的张量误差可能表明获得更好模型准确性的可能性更高,但这并不能保证。在MoFQ中,我们使用各种选择度量来找到量化准确性与速度之间的适当平衡。我们的经验观察表明,使用张量误差或层输出误差足以指导纯权重(W-only)量化的格式选择。而对于WA量化,模型输出误差提供了最佳的格式选择。
4.2 通过重分配NaN和Inf来增强低比特浮点量化
重分配NaN和Inf的动机
在低比特量化中,最大化数字表示效率对于实现最佳的精度和表达能力至关重要。一个优化的机会在于重新分配标准浮点格式中的特殊值NaN(非数字)和Inf(无穷大)。在IEEE浮点格式中,指数域所有比特位都设置为1表示NaN和Inf值。然而,在模型量化期间,这些特殊值没有实际用途,导致比特组合的浪费,而这些组合本可以用来表示更广泛的数字范围。通过将NaN和Inf的表示重新分配给归一化数,我们可以增强低比特FP格式的精度和表达能力,以改进模型量化。
FP4与FP8中重分配的实践影响
在实际的量化场景中,NaN和Inf冗余的影响因表示所用的比特数而异。例如,在8位浮点格式(FP8)中,影响相对较小,因为它可以表示256个数字,NaN和Inf只占一小部分。另一方面,FP8主要用于WA量化,这需要硬件支持矩阵乘法。因此,由于潜在的硬件兼容性问题,修改FP8可能不合适。然而,在4位格式(FP4)中,影响变得更为显著,因为它总共只能表示16个数字。由于FP4主要用于纯权重(W-only)量化,格式修改可以在软件层面解决。如表1所示,当遵循IEEE 754标准时,其中4个数字用于表示NaN和Inf。通过重新分配它们,我们可以获得额外的可表示数字,特别是±4和±6。张量级分析表明,我们重新设计的FP4格式相比于符合IEEE标准的FP4格式,可以带来约35%的量化误差降低。这一改进使得在纯权重(W-only)量化中,更多层倾向于我们重新设计的FP4而非INT4。
表1: FP4-E2M1中带NaN和Inf(IEEE 754标准)表示的数字与不带NaN和Inf(我们的设计)表示的数字。
A4 实验环境
- 模型架构: LLaMA [20] 和 OPT [25]。
- 数据集:
- WikiText-2 [14]: 用于评估困惑度(Perplexity)。
- LAMBADA [16]: 用于评估平均准确率。
- PIQA [5]: 用于评估平均准确率。
- HellaSwag [24]: 用于评估平均准确率。
- 硬件配置: 论文未明确提及实验所用的具体硬件配置。
- 软件配置:
- 实现基于 PPQ 库 [3] 和 GPTQ 库 [1]。
- 量化配置:权重张量采用逐通道量化,激活张量采用逐张量量化。FP4格式为E2M1(不含NaN和Inf),FP8格式为E4M3。
A4 实验结果
5.1 W-only 4比特量化达到SOTA量化误差
量化精度比较
表2比较了LLaMA模型上各种量化方法的性能,包括INT4(GPTQ)、FP4(ours)和MoFQ4。其中,INT4(GPTQ)是GPTQ论文【索引8,Gptq: Accurate post-training quantization for generative pre-trained transformers,2022】中的SOTA方法,FP4(ours)是本文提出的FP4格式,MoFQ4是FP4(ours)和INT4格式的混合。评估结果显示,FP4(ours)和MoFQ4通常优于INT4(GPTQ),而MoFQ4的结果往往比FP4(ours)更好。然而,MoFQ并非总能超越FP4,这表明MoFQ方法仍有进一步改进的空间。
表2: 在WikiText-2、LAMBADA、PIQA和HellaSwag数据集上的纯权重量化结果。对于WikiText-2数据集,我们展示困惑度指标。对于其他三个,我们展示平均准确率。
量化速度比较
除了比较量化精度,我们还考察了量化模型所需的运行时间。如表3所示,我们观察到FP4的量化速度比INT4(GPTQ)快77.8倍以上(校准样本数nsample=128),而MoFQ4比INT4(GPTQ)快9.3倍以上。这归因于GPTQ在量化过程中需要实时更新原始权重张量,导致了相当大的计算开销。相比之下,FP4(ours)和MoFQ4采用朴素的线性量化和四舍五入(RTN),从而实现了显著更快的速度。
表3: INT4(GPTQ), FP4(ours)和MoFQ4在LLaMA模型上的量化时间(秒)。括号中显示了相对于INT4(GPTQ)的加速比。
5.2 W8A8量化精度接近全精度模型
W8A8量化性能对比
本小节比较了LLaMA和OPT模型上各种量化方法的性能。评估的方法包括INT8、FP8和MoFQ8,其中MoFQ8代表在量化方法中混合使用FP8和INT8格式。
实验结果分析
表4比较了在四个数据集(WikiText-2, LAMBADA, PIQA, HellaSwag)上不同量化方法的表现。FP8在所有情况下都稳定地优于INT8。这可以归因于量化动态激活张量比静态权重张量更具挑战性,因为动态张量表现出更多样化的分布和更大的离群值【索引22,Smoothquant: Accurate and efficient post-training quantization for large language models,2022】。在第3节中,我们确定FP8比INT8更适合量化动态张量。因此,尽管FP8在权重张量上的性能可能弱于INT8,但它仍然能够为模型实现更低的总量化误差。
表4: 在WikiText-2, LAMBADA, PIQA和HellaSwag数据集上的WA-量化结果。对于WikiText-2数据集,我们展示困惑度指标。对于其他三个,我们展示平均准确率。
MoFQ8的优越性
至关重要的是,我们发现,在我们的MoFQ8量化方法下,无论模型大小或数据集如何,量化模型的准确性都与FP16模型非常接近。这表明MoFQ8有效地为每个层的分布选择了最合适的格式(INT8或FP8),最终以最小的准确性损失实现了W8A8量化结果。
A5 结论
本文深入研究并比较了用于量化大型语言模型(LLMs)的低比特整数(INT)和浮点(FP)格式。研究发现,由于张量分布的复杂性和多样性,最优的量化格式因层而异。因此,我们提出了混合格式量化(MoFQ)方法,该方法在逐层的基础上,从相同比特宽度的INT和FP格式中选择最优的一种。MoFQ在格式选择和模型性能方面表现出简单、有效和高效的特点,在纯权重(W-only)和权重-激活(WA)量化中均取得了当前最先进的成果。
尽管MoFQ展示了有前景的结果,但仍存在一些局限性和未来工作的机会:
1. 理论分析: 本文的分析主要是经验性的。虽然这为MoFQ的实际性能提供了宝贵的见解,但仍需要更多的理论研究来更深入地理解不同量化格式所涉及的原理和机制。
2. 更细粒度的扩展: MoFQ可以扩展到更细的粒度,例如通道级或块级的最优格式选择,以进一步提高模型精度。
💬 评论讨论
欢迎在这里分享您的想法和见解!