跳到主要内容

量化衰减:你的评估集从未预见到的能力税

· 阅读需 13 分钟
Tian Pan
Software Engineer

一个自托管 LLM 团队将生产模型从 fp16 量化为 int4。内存占用降低了 4 倍,吞吐量几乎翻倍,GPU 账单大幅缩减,团队重新运行了曾用于 fp16 发布把关的同一套评估组件。MMLU-Pro 保留了基准测试的 98.1%。综合质量看起来不错。他们发布了。

六周后,一名支持工程师注意到数学辅导功能悄悄变差了。合规团队标记了在对抗性提示下违反政策的补全次数有所增加。结构化输出的重试率从 1.4% 攀升至 6.8%。这些都没有出现在评估仪表盘上,因为评估仪表盘是为了验证另一个模型而构建的——那个虽然共享相同权重文件,但每个激活值背后都有四倍比特位的模型。

这就是量化漂移(quantization slippage)。成本分析只计算了内存和延迟方面的收益,却没有计算这次替换在无形中要求的评估重新锚定。而针对 fp16 分布进行校准的评估套件,现在正用错误的准则对错误的模型进行评分。

量化模型是恰好共享权重的另一个模型

大多数团队在量化部署时持有的心智模型是“模型相同,精度降低”。基准测试数据也印证了这一点。在综合基准测试中,INT8 通常比 BF16 下降 0.04%——基本属于噪声。即便是在 MMLU-Pro 上,采用 AWQ 等优秀方法的激进 int4 量化也能保留约 98% 的基准推理能力。采购方案将其四舍五入为“白捡的胜利”,然后继续推进。

采购方案对于变化的理解是错误的。降低比特宽度并不会在模型行为中均匀地降低精度——它降低的是那些对校准分布舍入误差贡献最小的激活值的精度,而这些激活值并不等同于对你生产流量贡献最大的激活值。一些具体的变化会随之而来:

  • 输出分布发生移动。 尾部 Token 的概率会不均匀地变得扁平或尖锐。在 Top-1 和 Top-2 概率接近的提示语上,模型会选择略有不同的 Token。综合评分几乎没有变动,因为大多数提示语并非“险胜”情况。但在至关重要的尾部提示语中,模型现在的表现与之前的自己完全不一致。
  • 在激进量化下,注意力模式会变得扁平。 这在对抗鲁棒性研究中已有详尽记录——int4 GPTQ 检查点在抗提示注入攻击方面的表现比 fp16 基准下降了 10% 以上,而相同位宽的 AWQ 有时甚至比稠密基准(dense baseline)有所提升。同样的模型家族,同样的提示语,完全不同的注入防御姿态。
  • 拒绝模式发生漂移。 int4 模型并非整齐划一地变得更容易或更不容易拒绝——它在不同形状的提示语上表现出的拒绝概率各不相同。某些类别收紧了,而另一些则放宽了。如果团队从未将“校准拒绝率”衡量为 SLI,这种漂移在客户或审计员发现之前是不可见的。
  • 格式合规性的降级是不均匀的。 在一项已发表的关于 4-bit 量化模型在 JSON 输出表现的基准测试中,响应格式的成功率从 0% 到 100% 不等,具体取决于模式(schema)的复杂程度。在 fp16 下达到 99% 格式合规的模型,在 int4 下处理复合对象时可能下降到 87%,而在处理扁平模式时仍保持 99%——而你的评估集如果只有三个扁平模式的固定用例,将报告没有任何退化。

需要内化的核心观点是:权重共享是一种部署优化,而非语义保证。量化后的检查点是一个具有相同参数数量但具有不同映射关系的函数。请务必这样对待它。

评估集是针对旧分布进行校准的

团队用来为量化部署开绿灯的评估套件并非从零开始构建。它是数月积累的结果:人类标注者根据 fp16 模型的风格特征对参考输出进行评分;“LLM 作为裁判”(LLM-as-judge)的评分器不断迭代其准则提示词,直到它们与人类对 fp16 输出的评分相关联;快照固定用例(snapshot fixtures)捕获了 fp16 的精确措辞以进行黄金集对比;团队对于“这个输出看起来不错”的直觉也是基于 fp16 的产出训练出来的。

当模型更换时,每一个锚点都在悄无声息地移动。具体来说:

LLM 裁判的校准漂移。 裁判是为 fp16 的输出评分而微调的。在 int4 输出上运行相同的裁判,它现在是在针对一个它未经校准的分布进行评分。如果 int4 模型稍微啰嗦一点,原本已经内化了 fp16 长度规范的裁判,可能会在简洁度上给出更严苛的评分,而在完整度上给出更宽松的评分。最终分数发生了变化,而团队无法判断模型是变差了、变好了,还是仅仅变得不同了。

快照测试因错误的理由而失败。 断言模型精确用词的快照套件现在变成了噪声。快照失败不是因为模型退化,而是因为它走了一条不同但等效的路径。团队禁用了快照,失去了回归测试的覆盖范围,随后真正的回归缺陷滑过时也无法察觉。

人工标注的黄金标签失效。 评估集中“这个提示应该产生这个答案”的标签是针对 fp16 的行为选择的。在一些提示语中,fp16 自信地给出了答案 A,而现在 int4 自信地给出了答案 B(同样正确)——而黄金标签会判定其错误。在另一些提示语中,fp16 产生 A,而 int4 产生 A'(一个较差的变体),但因为 A' 包含黄金标签的关键词,所以被判定为正确。其结果是双向的噪声,而团队依然信任这个分数。

下游分类器的立足点发生偏移。 团队在 fp16 补全内容上训练的安全分类器,现在正对 int4 补全内容进行评分。分类器的输入分布发生了移动。除非有人去衡量,否则它在新分布上的精确率和召回率是未知的,而团队通常不会去衡量,因为分类器“没有被动过”。

评估集不是固定资产。它是与产生它的模型耦合的配置。更换模型就是一种配置变更。

成本分析中遗漏定价的维度切片

综合基准测试分数只是一个头条数字。它在跟踪模型能力时也是错误的标准,因为在量化过程中,能力的损失在不同维度切片(slices)上并不是均匀分布的。过去两年的研究在这一点上结论一致:GSM8K 和其他数学任务的性能退化比综合指标显示的要早,因为数字一致性对精度的敏感程度超过了语义任务。在 8k+ 的长上下文提示词下,某些 int4 KV-cache 配置会出现性能下降,而短提示词则保持正常。代码生成在常见模式下表现良好,但在罕见 API 上会失效。低资源语言的退化速度也比英语快。

加载中…
References:Let's stay in touch and Follow me for more thoughts and updates