LLM 量化精读笔记 · 10 质量评估方法论:perplexity、基准与自定义评测
对应:Inference Engineering Ch5 的 “Measuring Quality Impact”;SWE-bench(arXiv:2310.06770);MMLU;GPTQ/AWQ/KIVI 论文的评测协议。 学完本章你应该能:① 写出 perplexity 的定义并解释它的优缺点;② 设计一套"三层评测"($PPL \to$智能基准$\to$自定义评测)的验收协议;③ 理解"与噪声不可区分"的操作化含义(多次运行、配对比较、置信区间);④ 列出量化评测的常见陷阱。
目录(本章) #
- 本章目标
- 核心原则:找"与噪声不可区分"的差异
- 第一层:Perplexity(最简)
- 第二层:智能基准(MMLU、SWE-bench 等)
- 第三层:自定义评测(最准)
- 统计显著性:怎么判断"没变"
- 验收协议:关卡式流程
- 陷阱清单
- 本章小结
- 习题与解答
- 延伸阅读
1. 本章目标 #
前 8 章讲了"怎么量化",本章讲怎么证明量化没有搞砸。Inference Engineering 的一句话是本章的总纲:
“In every case, you’re looking for differences indistinguishable from noise."(所有情况下,你要找的都是与噪声不可区分的差异。)
2. 核心原则:找"与噪声不可区分"的差异 #
量化评测不是"分数变了吗”,而是"这个变化能解释为随机噪声吗"。为什么这么严格:
- 评测本身有噪声(采样、温度、并行浮点非确定)。
- 量化引入的是"系统性"误差——它可能恰好落在噪声范围内,也可能超出。
- 我们的目标不是"量化后分数最高",而是"量化后任务质量与原模型无实质差异"。
操作化:量化模型与 FP16 基线在同一批样本、同一随机种子下做配对比较;重复多次,看差值是否落在噪声范围内。
3. 第一层:Perplexity(最简) #
3.1 定义 #
对自回归模型,给定 token 序列$x = (x_{1}, …, x_{N})$:
$$ PPL = \exp( -(1/N) \cdot \sum log p(x_{i} | x_{直觉:PPL 是"每 token 平均惊讶度"的指数化$——PPL = 10$大约等于模型每步像在 10 个等概率选项里猜。3.2 计算要点 #
- 用模型自己生成的 logits 算 log 概率(teacher forcing,不解码)
- 标准数据集:WikiText-2、C4(固定切分、固定长度,如 2048 token)
- 与 FP16 基线在完全相同的切分上对比
3.3 优点与缺点 #
| 优点 | 缺点 |
|---|---|
| 便宜、可复现、对全局退化敏感 | 对"任务级"退化不敏感(PPL 不变但代码/推理变差) |
| 论文标配,方便横向对比 | 测的是语言建模,不是你的业务 |
| 能快速筛掉灾难性量化 | 平均指标,掩盖长尾/长上下文问题 |
PPL 是守门员,不是裁判。 它合格只是入场券。
4. 第二层:智能基准(MMLU、SWE-bench 等) #
| 基准 | 测什么 | 成本 | 备注 |
|---|---|---|---|
| MMLU | 57 个学科的知识/推理(选择题) | 低 | 广泛使用;few-shot 设置要固定 |
| HumanEval / MBPP | 代码生成 | 中 | 164 题,样本少,方差大 |
| GSM8K | 数学应用题 | 中 | 8.5k 题,对推理链敏感 |
| SWE-bench | 真实 GitHub issue 端到端修复 | 高 | 2,294 个真实任务,最接近工程场景 |
| MT-Bench / AlpacaEval | 指令跟随 / 偏好 | 中 | 用 LLM-as-judge,注意裁判偏差 |
| RULER / 大海捞针 | 长上下文检索 | 中 | 量化 KV 后必测(08 章) |
选择原则:
- 覆盖你的任务类型(代码模型测 SWE-bench/HumanEval,聊天模型测 MT-Bench…)
- 样本量要够:HumanEval 只有 164 题,$\pm 2$题就是 1.2% 的波动
- 固定设置:few-shot 数、温度、最大生成长度必须与基线一致
5. 第三层:自定义评测(最准) #
5.1 为什么必须有 #
MMLU 再全也覆盖不了你的 prompt 模板、你的工具调用格式、你的业务长尾。自定义评测 = 用真实分布验收。
5.2 三种做法 #
| 做法 | 适用 | 注意 |
|---|---|---|
| 金标准比对(exact match / 单元测试 / 规则) | 有明确答案的任务 | 覆盖要广 |
| LLM-as-judge | 开放式回答 | 有位置/长度/风格偏差,要 A/B 盲评、换位 |
| 人工抽评 | 高价值任务 | 样本少但最可信,作为最终确认 |
5.3 设计要点 #
- 样本:几百到几千条,覆盖正常/长尾/边界
- 分布:与线上流量一致(来源、长度、语言、主题)
- 场景:单轮、多轮、长上下文、流式
- 指标:不只平均——看失败分布(长上下文是否集中翻车?)
6. 统计显著性:怎么判断"没变" #
6.1 噪声从哪来 #
采样噪声(temperature > 0 的解码) 并行非确定性(TF32/FP8 归约顺序、多卡) 评测集切分/顺序
6.2 最小可靠协议 #
- 同一份样本,同一个种子,量化 vs FP16 各跑≥ $3$次
- 报告均值与置信区间(bootstrap 或多次运行的标准差)
- 配对比较:对每个样本算差值,再对差值做检验(符号检验/t 检验)
- 判定:
- 量化-基线的差值 95% CI 包含$0 \to$“不可区分”
- CI 不包含 0 但幅度极小(如$MMLU \pm 1$分)$\to$结合任务重要性判断
6.3 一个错误示范 #
❌ 量化模型跑 1 次$MMLU = 68.2$,$FP16 = 68.5 \to$“差 0.3,可接受” ✅ 各跑 5 次,配对 t 检验$p=0.6$,$CI [-1.2, +0.6] \to$“无法区分”
7. 验收协议:关卡式流程 #
Gate 0:格式与部署检查(模型能跑、kernel 生效、速度/显存达标) Gate 1:PPL(WikiText-2/C4,与基线同切分) 通过标准:$\Delta PPL$小于基线波动(经验上$< 0.2\sim 0.3$) Gate 2:任务基准(MMLU + 业务相关基准) 通过标准:差值在噪声范围内(多次运行 CI 覆盖 0) Gate 3:自定义评测(真实 prompt 集 + 长上下文 + 边界) 通过标准:配对比较不可区分;长尾无集中退化 Gate 4:生产 A/B(小流量灰度,观测线上指标) 通过标准:业务指标(延迟/成本/质量)达标,可回滚
任何一关失败$\to$回退上一档(更细粒度、更高位宽、换方法),而不是硬上线。
8. 陷阱清单 #
- 校准集 == 评测集(作弊,04 章)
- 只跑 PPL 就上线(PPL 不敏感于任务退化)
- 样本太少还下结论(HumanEval 164 题$\pm 1.2\%$)
- 只看平均、不看长尾(长上下文/多轮集中退化)
- 评测设置不一致(few-shot、温度、长度与基线不同)
- 只测一次(把噪声当结论)
- 用 GPU 并行差异当"量化效果"(TF32 vs FP32)
- 忘了量化的是哪一层(只量化权重却怪 KV 方案,或反之)
9. 本章小结 #
- 总纲:找与噪声不可区分的差异。
- 三层评测:PPL(守门)$\to$智能基准(任务级)$\to$自定义评测(真实分布,最终裁判)。
- 统计纪律:配对、多次、置信区间;不拿单次跑分下结论。
- 关卡流程:四道 Gate,任一失败就降档。
- 陷阱:校准=评测、只看 PPL、小样本、平均掩盖长尾。
一句话记忆:“PPL 证明它没失智,基准证明它没退步,自定义评测证明它没在你的业务上翻车——三个都过了,才算量化完成。”
10. 习题与解答 #
题 1(计算):PPL 手算 #
模型对 4 个 token 的 log 概率为$[-0.5, -1.0, -2.0, -0.5]$。PPL 是多少?
题 1 解答
平均负对数似然= $(0.5+1.0+2.0+0.5)/4 = 1.0 \to PPL = \exp(1.0) \approx 2.72$。含义:平均每步像在约 2.7 个等概率选项中猜测。
题 2(设计):KV 量化的验收 #
为 2-bit KV 方案设计 Gate 1–4(沿用第 7 节框架),特别注意哪些关卡是 KV 量化特有的?
题 2 解答要点
Gate 1:长序列 PPL(WikiText-2 用 2048/8192 长度);Gate 2:长上下文基准(RULER/大海捞针);Gate 3:业务长对话评测;Gate 4:生产 A/B 看长会话留存/质量。KV 特有:必须覆盖"误差累积"场景(长上下文、多轮),短文本测不出问题(08 章)。
题 3(统计):判定"不可区分" #
量化 vs FP16 各跑 5 次 MMLU:68.1, 68.4, 67.9, 68.3, 68.2 vs 68.5, 68.1, 68.7, 68.3, 68.4。判断是否可接受(先算均值差,再定性说明需要什么才能下结论)。
题 3 解答
均值差≈ $68.2 - 68.4 = -0.2$。但单看均值不够:需要配对(同种子同样本)后的差值分布和 CI。若 5 次独立采样,标准差$\sim 0.2$,差 0.2 基本落在噪声内;正式判定要配对 t 检验/bootstrap CI 覆盖 0。
题 4(思考):PPL 为什么骗人 #
举一个"PPL 不变但任务变差"的量化场景,并解释机制。
题 4 解答要点
例:量化让模型对"常见高频 token"的预测几乎不变(PPL 被高频部分主导),但对长尾/推理链 token 的分布被打乱$\to$代码/数学任务退化。机制:PPL 是平均,量化误差集中在少数敏感位置(softmax 前的 QK、深层特征)时,平均指标不敏感。
题 5(协议):灰度上线 #
设计 Gate 4 的生产 A/B:流量怎么分、观测多久、指标怎么定、回滚条件是什么?
题 5 解答要点
5–10% 流量灰度 1–3 天;指标:延迟(TTFT/TPS)、成本、业务质量(留存/采纳率/人工评分);对照:同流量 FP16;回滚条件:任一质量指标显著退化(CI 不覆盖 0)或长尾异常率上升。
11. 延伸阅读 #
- Inference Engineering Ch5:Measuring Quality Impact 一节
- SWE-bench(arXiv:2310.06770):真实 GitHub issue 端到端评测
- MMLU(GitHub):57 学科知识基准
- RULER:长上下文基准(KV 量化必测)
- 上一篇: 09 QAT 与训练内量化;下一篇:[11 系统协同与部署]——把量化装进真正的推理引擎。