论文地址:

How Good Are Low-bit Quantized LLAMA3 Models? An Empirical Study
https://arxiv.org/abs/2404.14047

前言结论

  1. 几乎所有量化方式在8bit 量化无损失
  2. GPTQ 和 AWQ 4bit量化对8B模型来说有1-2%的性能损失,对70B模型只有0.4%性能损失。
  3. 参数越大的模型,低bit量化损失越低。
  4. 综合来说,如果追求无任何性能损失,8B模型用8bit量化,70B模型用4bit量化;如果能接受2-3%损失,8B模型用4bit量化,70B模型用3bit量化。

概述

这篇论文旨在评估LLAMA3模型在低比特量化(1-8位)下的性能表现,特别是在资源受限的环境中。通过对现有的后训练量化(PTQ)和LoRA微调量化(LoRA-FT)方法进行全面评估,研究其在LLAMA3模型上的适用性及其性能衰减问题。期望通过这项研究为未来开发更高效的低比特量化方法提供参考。

新颖性

论文的新颖性体现在以下几个方面:

  1. LLAMA3模型的首次全面量化评估:尽管LLAMA3模型已经展示了卓越的性能,但其在低比特量化条件下的表现尚未得到充分研究。
  2. 多种量化方法和广泛的数据集:本文选择了10种现有的量化方法,并使用了多个数据集来进行实验,涵盖从1位到8位的量化范围,提供了全面的性能评估。
  3. 揭示量化带来的性能挑战:研究揭示了LLAMA3在超低比特量化条件下的显著性能衰减问题,指出了未来改进的方向。

量化和反量化

量化是将高精度数字转换为低精度数字,以减少存储和计算资源。具体步骤如下:

AIGC底层技术之模型量化全解_AIGC


  1. 确定范围:确定FP16格式的权重范围,例如0.871。
  2. 计算比例因子(Scale):使用int8的范围乘以比例因子,以覆盖FP16的范围。
  3. 应用量化公式:将FP16格式的数据乘以比例因子并四舍五入转换为int8格式。

AIGC底层技术之模型量化全解_量化方式_02


反量化是将量化后的数据恢复到高精度格式。步骤包括:

AIGC底层技术之模型量化全解_AIGC_03


应用反量化公式:使用比例因子将量化数据还原。

注意误差:反量化可能导致数据不完全准确。

常见量化方式

1. GPT-Q:GPT模型的训练后量化

GPTQ 是一种用于4位量化的训练后量化 (PTQ) 方法,旨在优化GPU推理和性能。其核心思想是通过将所有权重压缩到4位量化中来最小化均方误差,并在推理过程中动态地将权重解量化为float16。具体步骤包括缩放、四舍五入、限制范围和反缩放。

关键点:

  1. 能在四个GPU小时内量化1750亿参数的GPT模型,将位宽减少到3或4位,准确性几乎不受影响。
  2. 这种方法的压缩增益是以前方法的两倍多,保持了准确性。
  3. 可以用于端到端推断加速,相对于FP16,使用高端GPU(NVIDIA A100)时约为3.25倍,使用NVIDIA A6000时为4.5倍。
  4. 是第一个表明可以将数百亿参数的模型量化为每个组件3-4位的方法。

2. GGUF | GGML

GGUF 是 GGML 的新版本,允许在 CPU 上运行 LLM,同时将部分层次转移到 GPU 上以加速运行。尽管使用 CPU 通常比使用 GPU 进行推理要慢,但对于在 CPU 或 Apple 设备上运行模型的人来说,这是一种很好的格式。GGUF 提供了从2到8位精度的不同量化级别,并支持将原始的LLaMA模型转换为GGUF格式,然后量化为较低的精度。


3. PTQ 训练后量化(Post-Training Quantization)

PTQ 是一种在模型训练后进行量化的方法,通过将浮点数权重和激活转换为较低精度的表示,来减小模型大小和计算复杂度,同时保持精度损失较小。PTQ 分为只量化模型权重的方法和同时量化权重和激活的方法。


4. QAT 训练感知的量化(Quantization Aware Training)

QAT 在训练过程中模拟量化,使模型适应更低的位宽而不损失精度。QAT 涉及在训练过程中对模型进行量化操作,并在必要时进行反量化,从而在不显著影响精度的情况下实现量化。


5. AWQ 激活感知的权重量化(Activation-aware Weight Quantization)

AWQ 是一种量化方法,假设并非所有权重对 LLM 的性能同等重要,因此只量化不重要的权重。此方法在保持性能的同时实现显著的加速,适用于GPU和CPU。

量化过程包括:

校准:确定权重和激活的分布。

确定重要的激活和相应的权重。

缩放:将关键实体放大,量化其余权重为较低精度。

6. AQLM (Additive Quantization LM)

AQLM 于2024年2月发布,是一种仅权重后训练量化(PTQ)算法,可将模型权重量化到2位范围,同时保持准确性。与现有方法相比,AQLM 提供了更小的基准改进,适用于3位和4位范围,优于 GPTQ 和其他近期方法。

实验设计

评估模型

  1. LLAMA3-8B
  2. LLAMA3-70B

量化方法

  1. PTQ方法:RTN、GPTQ、AWQ、SmoothQuant、PB-LLM、QuIP、DB-LLM、BiLLM
  2. LoRA-FT方法:QLoRA、IR-QLoRA

评估数据集

  1. WikiText2:用于文本生成任务的困惑度评估。
  2. C4:用于大规模语言模型评估的数据集。
  3. PTB(Penn Treebank):传统的语言建模数据集。
  4. CommonSenseQA:常识问答数据集,用于评估模型的常识推理能力。
  5. PIQA:物理常识问答数据集。
  6. ARC-e 和 ARC-c:AI2推理挑战数据集。
  7. HellaSwag:句子完形填空数据集。
  8. Winogrande:Winograd Schema Challenge的扩展版本。
  9. MMLU(Massive Multitask Language Understanding):多任务语言理解评估数据集。

评估指标

困惑度(Perplexity, PPL)

困惑度是衡量语言模型预测下一个词的准确性的指标。具体来说,它表示的是模型的不确定性。困惑度越低,表示模型越能准确预测文本中的下一个词。

常识问答准确率(CommonSenseQA Accuracy)

常识问答准确率是衡量模型在常识推理任务中表现的指标。CommonSenseQA数据集包含一系列常识性问题,模型需要从多个选项中选择最符合常识的答案。准确率表示模型选择正确答案的比例。

MMLU准确率(MMLU Accuracy)

MMLU(Massive Multitask Language Understanding)是一个多任务语言理解评估基准,包含多个不同领域的任务,如人文学科、STEM(科学、技术、工程、数学)、社会科学和其他领域。MMLU准确率表示模型在这些任务上的平均表现。

具体评估如下:

人文学科(Hums.):包括文学、历史、哲学等。

STEM:包括数学、物理、化学、计算机科学等。

社会科学(Social):包括心理学、社会学、经济学等。

其他(Other):包括一些跨学科或不属于上述类别的任务。

其他评估数据集准确率

  1. PIQA(Physical Interaction Question Answering):物理常识问答数据集,模型需要选择最符合物理常识的答案。
  2. ARC-e和ARC-c(AI2 Reasoning Challenge Easy and Challenge Sets):AI2推理挑战数据集,包含简单和困难两个版本,测试模型在复杂推理任务中的表现。
  3. HellaSwag:句子完形填空数据集,测试模型在上下文理解和续写句子中的表现。
  4. Winogrande:Winograd Schema Challenge的扩展版本,测试模型在解决歧义和推理任务中的表现。


量化参数指标设置:#W、#A、#G


在量化神经网络模型时,我们需要将浮点数表示的权重和激活值转换为更低精度的表示形式(例如8位、4位、2位等),以减少模型的存储需求和计算复杂度。#W、#A、#G是量化过程中涉及的三个关键参数:

#W(Weight Bit-width, 权重比特数)

#W表示模型权重被量化到多少位(bit)。权重是神经网络中连接不同神经元的参数,这些参数决定了输入数据如何通过网络进行传播和变换。通常,权重以32位浮点数(FP32)表示,但为了减少存储空间和计算需求,可以将其量化到更少的位数,如8位(int8)、4位(int4)甚至更低。

例如:

  1. 16位权重(FP16):半精度浮点数表示的权重。
  2. 8位权重(int8):将权重从浮点数表示转换为8位整数表示。
  3. 4位权重(int4):将权重进一步量化到4位整数表示。
  4. 2位权重(int2):将权重量化到2位整数表示。

量化后的位数越少,模型的存储需求越小,计算速度越快,但也可能导致精度损失。

#A(Activation Bit-width, 激活比特数)

#A表示模型激活值被量化到多少位。激活值是神经元在接受输入并经过激活函数(如ReLU、Sigmoid、Tanh)处理后的输出。这些输出值在网络的前向传播过程中会被传递到下一层神经元。

例如:

  1. 16位激活(FP16):半精度浮点数表示的激活值。
  2. 8位激活(int8):将激活值从浮点数表示转换为8位整数表示。
  3. 4位激活(int4):将激活值进一步量化到4位整数表示。
  4. 2位激活(int2):将激活值量化到2位整数表示。

激活值的量化与权重量化类似,也会影响模型的存储需求和计算性能。

#G(Group Size, 分组数)

#G表示在分块量化(grouped quantization)过程中使用的组的大小。分块量化是一种优化策略,它将模型的参数分成多个小块,然后对每个小块分别进行量化。这样可以在保持量化精度的同时,进一步减少存储需求和计算复杂度。

实验结果

LLAMA3-8B

AIGC底层技术之模型量化全解_AWQ_04


LLAMA3-70B

AIGC底层技术之模型量化全解_GPTQ_05


LoRA微调量化

AIGC底层技术之模型量化全解_AIGC_06



后训练量化(PTQ)

  1. RTN:基本的四舍五入量化方法,在低比特时性能下降显著。
  2. GPTQ:利用误差补偿的权重量化方法,在2-3位量化时性能显著下降。
  3. AWQ:通过抑制异常通道的方法减少权重量化的难度,能够保持LLAMA3在3位量化时的性能。
  4. SmoothQuant:通过平滑激活偏移的方法实现权重和激活量化,8位和6位下能保持较好的性能,但在4位时表现不佳。
  5. PB-LLM、DB-LLM、BiLLM:这些方法专为超低比特(≤ 2位)量化设计,能够在极低比特下保持较高的准确率。

LoRA微调量化(LoRA-FT)

  1. QLoRA 和 IR-QLoRA:在MMLU和CommonSenseQA数据集上的评估显示,低秩微调在4位量化下并不能完全补偿量化引入的误差,反而在某些情况下性能下降更严重。