大模型量化方法选择与效果评估指南
随着大语言模型(LLM)的规模不断扩大,推理成本成为主要瓶颈。量化技术通过降低模型权重的精度来减少内存占用并提升推理速度,是部署大模型的关键手段。本文基于对《Evaluating Quantized Large Language Models》的研究总结,深入探讨后训练量化(PTQ)的方法选择、不同张量类型的量化影响以及对各类任务的具体效果评估。
一、背景与核心目标
量化主要分为权重量化、激活量化和 KV 缓存量化。我们的目标是找到在特定内存预算下,性能损失最小化的量化配置。实验主要针对 PTQ 场景,即在不重新训练模型的情况下,直接对预训练模型进行量化处理。
1. 统计分析工具
为了科学地评估量化风险,我们使用三种张量统计方法来分析数据分布:
- 最大绝对值(AbsMax):显示动态范围。如果数值范围过大,量化时的舍入误差会显著增加。
- 标准差(Std)σ:反映数据值偏离平均值的程度。较小的标准差表明数据分布集中,更适合量化,因为极端值较少。
- 峰度(Kurtosis):总结了张量的异常值情况。公式为 $\frac{1}{n}\sum_{i=1}^{n}(x_i - \mu)^4$。高峰度表明分布具有重尾,意味着存在较多异常值,这会破坏量化后的精度;低峰度则表明轻尾,异常值较少,量化更稳健。
2. 量化类型详解
根据量化对象的不同,主要分为三类:
- 仅权重量化(Weight-only):只量化每个线性层的权重张量 W。这是最基础的量化方式,实现简单,但可能无法完全利用硬件加速特性。
- 权重 - 激活量化(Weight-Activation, WA):同时量化输入激活 X 和权重 W。这能进一步压缩计算量,但对激活值的分布敏感,通常需要校准步骤。
- KV 缓存量化(KV Cache Quantization):量化自注意力块中的键张量 K 和值张量 V。这对长上下文推理至关重要,因为 KV 缓存随序列长度线性增长。
为了方便描述,我们使用 W、A 和 KV 后跟正整数表示位宽。例如,W4A8 表示权重量化到 4 位,激活量化到 8 位;KV4 表示 KV 缓存量化到 4 位。
二、量化对不同 LLM 架构的影响
1. 模型大小与容忍度
实验发现,模型越大,对仅权重量化和 KV 缓存量化的容忍度越高。这是因为大模型参数冗余度高,微小的权重扰动不会显著改变输出分布。然而,对于激活量化,大模型的容忍度反而较低,因为激活值的动态范围通常更大。
2. MoE 架构的特殊性
利用专家混合(MoE)技术增加模型大小并不一定增强模型对量化的容忍度。例如,FP16 Mixtral-8x7B MoE 模型的性能与 LLaMA2-70B 相似,但其对仅权重和 KV 缓存量化的敏感性比 LLaMA2-70B 更高。相反,Mixtral-8x7B 对量化的敏感性更接近于同一模型家族中较小的 LLaMA2-7B 和 Mistral-7B。这表明 MoE 结构中的稀疏性可能导致某些专家对量化噪声更敏感。
3. OPT 模型的敏感性
OPT 模型系列对 Weight-only 和 Weight-Activation 的量化非常敏感,不适合直接进行低位宽量化,可能需要特定的校准策略或 QAT(量化感知训练)。
三、量化对不同 Tensor 类型的影响
1. 权重量化与模型规模
模型参数越多,对权重量化的容忍度越高。在大多数任务上,大部分 LLMs 可以通过 W4 或 KV4 量化保持其性能。当将 LLMs 量化到 W3 或 KV3 时,所有模型家族中小型模型的性能都会明显下降。此外,对于 W2 或 KV2,大多数模型都会经历显著的性能损失,几乎不可用。
2. 权重 - 激活量化前沿
对于权重 - 激活量化,W4A8 LLMs 代表了可以达到良好性能的前沿。W4A4 量化将严重影响 LLMs 的效果,导致能力丧失。在具有大批量大小和长文本的实际应用中,一种常见做法是同时量化权重和 KV 缓存。对于短文本任务,W8KV4 几乎无损失。对于长文本任务,W8KV8 是更好的选择,以维持上下文一致性。
四、量化对不同任务的影响
1. 通用 NLP 任务
我们没有观察到量化在不同语言中的不同影响。在 CHID 和 Winogrande 数据集上评估了各种量化 LLMs,这些数据集分别是中文和英文的完形填空任务。尽管不同 LLMs 在这些任务上的表现各异,但量化引起的性能损失趋势相当相似。W4, W4A8 和 KV4 的量化几乎不影响效果。在内存限定时,推荐使用大模型 W3 的量化。当模型出现饱和(效果不随模型增大而变好)时,建议使用小模型 + 高位宽的量化。
2. 涌现能力评估
能力涌现包含 In-Context Learning(上下文学习)、Instruction-Following(指令遵循)、Multi-Step Reasoning(多步推理)和 Self-Calibration(自我校准)。在四种突出能力中,多步推理和自我校准能力对量化的容忍度明显低于指令遵循和上下文学习能力,尤其是对于小型 LLMs。一般来说,对于较小的模型(<13B),W8 或 KV8 更适合维持多步推理和自我校准能力。对于较大的模型(>13B),W4 或 KV4 更适合维持所有四种突出能力。此外,对于大多数 LLMs,W4A8 不会导致显著的性能损失,但 W4A4 会导致所有模型完全失去突出能力。
3. 伦理任务
对于伦理任务,小型模型对量化的敏感性更高。仅权重量化会增强模型对敏感信息的判断,而 KV 缓存量化则有相反的效果。这意味着在涉及安全对齐的场景下,需要谨慎选择量化方案,避免引入偏差。
五、对话与长上下文任务
1. 对话质量评估
使用两轮的 MT-bench 评估量化后的 LLMs 对话的质量。分数范围从 1 到 10。对话能力对 KV 缓存量化的容忍度高于权重量化。大多数 LLM 家族可以量化为 W8、W4A8 和 KV4,而不会造成 GPT-4 分数的显著损失(<0.2)。
具体的失败模式包括:
- 使用 W3 和 KV3 量化时,大多数 LLMs 开始重复一些句子。
- 使用 W2、KV2 和 W4A4 时,大多数 LLMs 失去了对话能力,生成无意义的符号或重复一些单词。
- 只有少数 LLMs,如 ChatGLM3-6B、Falcon-40B 和 Falcon-180B,在 KV2 量化下仍能生成连贯的句子,尽管大多数句子缺乏有意义的内容。
在 MT-Bench 中,第二轮对话的 GPT-4 分数一致低于第一轮。然而,量化对大多数 LLMs 中的两轮对话没有影响。一个例外是,当将 KV 缓存从 KV8 量化到 KV3 时,LLaMA2-13B 在第二轮对话的 GPT-4 分数显著下降了 1.19,而第一轮对话的 GPT-4 分数仅下降了 0.31。
2. 长文本处理能力
长文本(>4k)对仅权重和 KV 缓存量化的敏感性高于短文本(<4k)。对于仅权重量化,长文本的性能损失显著大于短文本。当量化到 W3 时,Mixtral-8x7B 和 Vicuna-7B 模型在较长文本上的准确率损失更为显著。
对于权重 - 激活量化,量化模型在长文本上的性能退化并不比短文本大。实际上,我们可以将大多数 LLM 家族量化到 W4 和 W4A8,除了 LongChat(基于 LLaMA 的)家族(16K),它只能被量化到 W8 和 W8A8。
对于长上下文任务,大多数 LLMs 对 KV 缓存量化的敏感性高于仅权重量化和权重 - 激活量化。在相同的位宽下,使用 KV 缓存量化的 LLMs 的性能明显低于仅权重量化的性能。在 LongChat 家族中,即使是 KV8 量化也会导致长文本上的显著性能退化。对于 Vicuna 和 ChatGLM 家族(32K),KV8 量化几乎无损,而在使用 KV4 时长文本上的性能退化才会发生。Mistral 家族显示出对 KV 缓存量化的最高容忍度,这与短文本不同。对于 Mistral 家族,KV4 仍然是无损的。
量化对模型处理不同位置信息的能力的影响各不相同。在含有 16K 令牌的长文本中,仅权重和 KV 缓存量化对中间位置带来更显著的损失。对于其他家族,在大多数情况下,量化在不同位置的效果是一致的。一个例外是 KV4 量化的 Vicuna-7B 在文本开头显示出更显著的效果。
六、先进量化方法的局限性
最先进的量化方法,如 SmoothQuant 和 AWQ,在量化造成的性能损失适中时,可以有效提升性能。然而,当使用极低位宽时,AWQ 和 SmoothQuant 无法恢复完全损坏的性能。
WQ 可以提高量化 LLMs 的性能。此外,模型越大,其性能越接近 FP16 基线。然而,在 W2 量化的情况下,量化的 LLMs 完全失去了它们的能力,AWQ 无法恢复损坏的性能。权重 - 激活量化也观察到了类似的结果。虽然 SmoothQuant 可以部分恢复 W4A4 量化的性能,但性能仍然显著低于 FP16 基线。
为了使极低位宽量化(如 W2、W4A4 和 KV2)有效,需要进一步研究量化方案或量化感知训练(QAT)方法。单纯依靠后训练量化难以突破当前的精度瓶颈。
七、实践建议与结论
综合上述实验结果,针对不同的应用场景,提出以下量化策略建议:
- 通用推理场景:优先选择 W4A8 或 KV4 配置。这在性能和资源消耗之间取得了最佳平衡,适用于大多数 NLP 任务和中等长度的上下文。
- 长文本应用:若需处理超过 4k 的上下文,建议采用 W8KV8 或至少 W8KV4。避免使用过低的 KV 位宽,以防止长距离依赖丢失。
- 复杂推理任务:对于多步推理和自我校准等关键能力,小型模型应保留 W8 或 KV8 的高位宽。大模型可尝试 W4,但需监控具体任务指标。
- 对话系统:关注 KV 缓存的稳定性。W4A8 和 KV4 通常能保证两轮对话的质量。避免使用 W2 或 KV2,否则极易出现胡言乱语。
- 资源受限环境:在内存极度紧张的情况下,考虑使用 W3 量化配合大模型,而非小模型低位宽。大模型的冗余性更能抵抗量化噪声。
总之,量化并非简单的'一刀切'过程。需要根据模型架构、任务类型和硬件约束进行精细化的权衡。未来的研究方向应集中在如何通过 QAT 或新的量化算法来突破极低位宽的精度极限,特别是在长上下文和复杂推理领域。