arganzheng · 2026-05-01
\[\text{一步成本} = \frac{\text{权重} + \text{KV}}{\text{带宽} \times \text{每步 token}} + \text{算力}\]每种推理优化都改了成本公式的一项;除投机解码之外每一种都改变了输出分布;而退化是不均匀的——集中在困惑度看不到的地方。
| 改哪一项 | 篇 |
|---|---|
| 改解码过程(分母) | 01 采样与约束 · 02 投机解码 |
| 改权重字节 | 03 训练后量化 · 04 QAT 与评测 |
| 改 KV 字节 | 05 量化、驱逐、稀疏 attention |
| 改参数数量 | 06 剪枝、深度缩放、小模型 |
%%{init: {"flowchart": {"wrappingWidth": 180}}}%%
flowchart TB
C["一步 decode 成本<br/>=(权重 + KV + 算力)÷ 产出 token 数"]
C --> D1["改解码<br/>01 采样与约束"] --> D2["02 投机解码"]
C --> W3["改权重<br/>03 训练后量化"] --> W4["04 QAT 与低比特评测"]
C --> K5["改 KV<br/>05 量化、驱逐、稀疏"]
C --> P6["改结构<br/>06 剪枝、缩放"]
W4 & P6 -. "恢复靠蒸馏" .-> X["评测:退化在困惑度看不到处"]
D2 & K5 -.-> X
pass@1 与 pass@k 不能用同一组参数报告
| 量 | 数 |
|---|---|
| 熵对温度的导数 | \(dH/dT = \text{Var}(z)/T^3\) |
| 128K 词表尾部总质量 | 可达 10%;T = 0.7 也许只降到 0.02——低温没有去掉尾部 |
| pass@1 最优温度 | ≈ 0.2;pass@100 最优 ≈ 0.8 |
| pass@k 无偏估计 | \(1 - \binom{n-c}{k}/\binom{n}{k}\) |
| 高温下 | min-p 比 top-p 稳 |
草稿 γ 步、目标一次前向验证 γ+1 个;拒绝采样严格等于目标分布
| 量 | 数 |
|---|---|
| 期望产出 | \(\mathbb E[\text{tokens}] = \frac{1 - \alpha^{\gamma+1}}{1 - \alpha}\),speedup \(= \mathbb E/(\gamma c + 1)\),c ≈ 0.02–0.05 |
| 平均接受长度 | Medusa 2.5–3 → EAGLE 3.8–4.5 → EAGLE-3 5–6.5 |
| MTP 头(与主模型联合训练) | 接受率 85–90%、约 1.8× |
| 树的约束 | \(B \cdot N_{tree} \lesssim \text{ridge}\):batch 8 × 64 节点 = 512 已过 H100 的 295 |
4-bit 快在 decode 慢在 prefill;崩掉来自固定通道离群
| 量 | 数 |
|---|---|
| 舍入误差方差 | \(\Delta^2/12\):每少 1 bit ×4,INT8 → INT4 ×256 |
| 一个 15σ 权重 | 让 INT4 的 Δ = 2σ——group 内一个离群值毁掉一组 |
| g128 | 有效 4.156 bit,元数据 4% |
| 输出误差 | \(\text{tr}(EHE^\top)\),\(H = \mathbb E[XX^\top]\):误差落在激活大的通道被放大 |
| 方法 | 做什么 |
|---|---|
| GPTQ | 用 \(H^{-1}\) 把误差补偿到未量化的列 |
| AWQ | 保护激活幅度最大的约 1% 通道 |
| SmoothQuant | \(\text{diag}(s)\) 把激活的离群迁到权重 |
| 旋转(QuaRot) | Hadamard 把 1000 摊成约 17;70B W4A4KV4 困惑度 3.32 → 3.73 |
PPL +0.36 的代价:GSM8K 掉 3–6、needle 掉 10+
| Llama-3-8B W4 | 变化 |
|---|---|
| 困惑度 | +0.36 |
| MMLU | −1–2 |
| GSM8K | −3–6 |
| needle | −10 以上 |
| 逐 token KL 均值 | 0.01–0.05 nat;超 0.1 明显——看 P99 不看均值 |
key 有通道离群、value 没有——key per-channel、value per-token
| 步 | KV 大小 |
|---|---|
| BF16,每 token 320 KB | 40 GB |
| FP8(KL 0.001 nat) | 20 GB |
| INT4(元数据 25%,实际 3.2×) | 12.5 GB |
| + SnapKV 保留 25% | 3.1 GB |
删 25% 层 PPL +0.3、GSM8K 50→10——剪枝必须蒸馏恢复
| 量 | 数 |
|---|---|
| OBS / SparseGPT 重要性 | \(w_q^2 / [H^{-1}]_{qq}\)——与 GPTQ 同一个拉格朗日推导 |
| Wanda | \(\lvert w_{ij}\rvert \cdot \lVert X_j\rVert\)——与 AWQ 同一个一阶观察 |
| 非结构化 50% | Tensor Core 不识别零,不变快 |
| 2:4 | GEMM 1.3–1.8×,只在 compute-bound 有效;decode 字节只到 5/8 |
| Minitron 15B → 8B | 94B token 蒸馏 vs 从头 8T,省 40×;比继续预训练高 3–4 MMLU 点 |
| 线 | 落点 |
|---|---|
| 分布变了多少 | 有意改(采样)→ 不变(投机)→ 可控噪声(量化,Δ²/12、逐 token KL)→ 任务依赖(驱逐)→ 改变最大(剪枝);度量从 TV 到 KL 到任务曲线 |
| 成本公式的哪一项 | 投机改分母(≲ ridge);W4A16 改权重字节(止于 memory-bound);KV 量化在 40K 后边际更大;2:4 只在 compute-bound;叠加时消耗同一段余量 |
| 离群值与同一套二阶数学 | \(\text{tr}(EHE^\top)\):GPTQ = SparseGPT、AWQ = Wanda;通道级离群(LayerNorm γ,6.7B 起相变)与 massive activations(sink) |
| 困惑度 vs 关键 token | 每个「无损」都要问在哪个指标、哪类任务、什么协议下 |
| 蒸馏,教师 = 自己 | 训草稿、QAT、剪枝恢复;部署需求提前到训练:MTP 头、厂商 QAT 版、NSA / MLA、剪枝做初始化 |
| 篇 | 一个公式 / 一个数 |
|---|---|
| 01 | pass@1 最优 T ≈ 0.2、pass@100 ≈ 0.8;模型卡 T = 0.6 / top-p 0.95 |
| 02 | \(\alpha = 1 - \text{TV}\);\(\mathbb E = (1-\alpha^{\gamma+1})/(1-\alpha)\);\(B \cdot N_{tree} \lesssim\) ridge |
| 03 | \(\Delta^2/12\);\(\text{tr}(EHE^\top)\);Hadamard 1000 → 17 |
| 04 | STE \(\hat w = w + \text{sg}(Q(w) - w)\);PPL +0.36 ↔ needle −10 |
| 05 | 70B 128K:40 → 20 → 12.5 → 3.1 GB;sink 吃 30–50% |
| 06 | \(w_q^2/[H^{-1}]_{qq}\);2:4 1.3–1.8×;Minitron 省 40× |
/efficient-inference-and-compression-for-llms.html;通关自测 22 题在系列总结