大模型量化方法选择与效果评估指南
随着大语言模型(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 的量化。当模型出现饱和(效果不随模型增大而变好)时,建议使用小模型 + 高位宽的量化。


