蒸馏、剪枝与稀疏化
量化改数的精度,压缩改数的数量。本章讲三条"删"的路:蒸馏(删老师)、剪枝(删权重)、稀疏化(删计算)——以及它们在硬件上各自的真实折扣。
知识蒸馏:把大模型的能力装进小模型
经典 KD(Hinton et al.)让小模型拟合大模型的软标签(温度软化后的分布)——软标签携带类间相似度的"暗知识",比 one-hot 监督信息量大。LLM 时代的三种形态:
- logit 蒸馏:直接对齐师生 logits(KL 散度)。受限于输出维度,且闭源模型只有 API 时不可行。
- 序列级蒸馏:老师生成完整回答,学生做 SFT——工程上最常见(用强模型造数据本身就是广义蒸馏,见后训练篇)。
- 特征蒸馏:对齐中间层表示,需要师生结构对齐,LLM 场景少用。
在推理优化中的定位(题库 126):蒸馏与量化正交——蒸馏决定模型有多大,量化决定数有多宽,实践中通常先蒸馏出目标尺寸再量化部署。
剪枝:结构化与非结构化
非结构化剪枝(逐个权重置零)理论压缩率高( lottery ticket 类工作证明 90% 稠密度可达),但稀疏矩阵的存储/计算需要专用格式与硬件支持——在通用 GPU 上,非结构化稀疏往往比稠密更慢(索引开销吃掉理论收益)。它对推理加速的实际价值接近于零(题库 127 的核心判断)。
结构化剪枝删的是规则单元——整个注意力头、整个 FFN 通道、整层。删完的模型仍是规整张量,任何硬件都直接受益(显存、带宽、计算全按比例降)。工程流程:按重要性评分(L2 范数/激活量/梯度信息)排序 → 一次删一个粒度 → 微调恢复 → 迭代。代价曲线:删 10–20% 通道微调后损失很小,50% 起精度明显受损——结构化剪枝是"缩小的预训练",不是免费午餐。
2:4 稀疏:硬件支持的折中
NVIDIA 从 Ampere 起在 Tensor Core 内置 2:4 结构化稀疏:每 4 个权重必须有 2 个为零,硬件按压缩格式跳过零计算——理论 2 倍算力/带宽折扣。这是"非结构化的灵活性"与"结构化的硬件友好"之间的精确妥协:
- 剪枝满足 2:4 pattern → 权重按 [values(2N), mask] 格式存储 → Tensor Core 直接执行稀疏 GEMM。
- 实际收益折扣:权重稀疏了,但激活不稀疏(除非配套激活稀疏),且稀疏 GEMM 的实现效率低于最优稠密 GEMM——实测加速通常 1.3–1.6 倍,不是 2 倍。
- 生态现实:训练侧支持链路(稀疏感知训练 → 剪枝 → 微调)复杂,工业采用有限;它是"硬件给了折扣,但生态没跟上"的典型。
稀疏 attention 与 MoE:结构性稀疏的两个赢家
泛泛的权重稀疏不温不火,但结构先验明确的稀疏是大模型的主流:
- MoE(见专家并行篇):FFN 的"条件稀疏"——每个 token 只激活 8/256 个专家,算力换容量的教科书实现。它的成功公式:稀疏粒度是整个专家(硬件友好)+ 路由是学出来的(先验清晰)。
- 稀疏 attention(题库 215):滑窗/块稀疏跳过
中的无关块。约束与 2:4 同源:稀疏 pattern 必须规则到 kernel 能高效执行(块级而非元素级)。见Attention Kernel篇。
规律:稀疏要兑现成加速,pattern 必须在"够细(省得多)"与"够规整(算得快)"之间找到硬件能消化的粒度。 元素级太细(GPU 吃不消),专家/块级正合适。
压缩手段的组合拳
工业部署的常见顺序与账本:
- 蒸馏/选择模型尺寸:决定
(能力与成本的总量级)。 - 结构化剪枝(可选):在尺寸之间做精修(如 Llama 剪枝出 8B 档)。
- 量化(见量化章):决定字节宽,W4 是当前服务默认。
- 投机采样(见[投机采样]篇):不压缩模型,用小模型榨取大模型的解码带宽。
每一步都可独立验证精度(PPL/下游任务),组合时顺序影响小,但所有压缩手段都要在最终负载上验收——PPL 相近不代表指令跟随与长文本能力不退化。
小结
- 蒸馏在 LLM 时代以"序列级/造数据"形态存在,与量化正交可叠加。
- 非结构化剪枝在通用 GPU 上无实际加速,结构化剪枝是唯一可兑现的"删权重",2:4 是硬件给定的折中点。
- 稀疏要变现,粒度必须规整:MoE 与块稀疏 attention 是两个成功反例之外的常态注脚。
- 压缩组合拳的验收在最终负载,不在 PPL。
思考题
- 为什么 2:4 稀疏实测只有 1.3–1.6 倍而非 2 倍加速?
- 一个 70B 模型剪枝掉 30% FFN 通道与直接用 47B 稠密模型比,各自的优势场景?
- 蒸馏 + W4 量化 + 投机采样能同时叠加吗?画出三者的作用位置。
参考答案
- 稀疏 GEMM 实现(索引、mask 处理)本身有效率损失;激活仍稠密,load 带宽不省一半;以及剪枝后的微调若不充分,精度要求迫使保留更大的紧凑模型。
- 剪枝模型保留了 70B 的表示能力"残骸",微调恢复后通常在同尺寸下优于从零训练的 47B,适合"已有 70B 资产 + 想要更小部署"的场景;47B 稠密模型胜在训练充分、无剪枝偏置,适合重新训练的选择。账本:剪枝省的是一次预训练,付出的是精度上限。
- 可以完全正交:蒸馏作用在模型选择(
),量化在数值表示(字节宽),投机采样在解码调度(每步多 token)——分别对应"模型多大、数多宽、一步出多少",互不冲突,这也是工业推理栈的标准组合。
参考资料
- Hinton et al., Distilling the Knowledge in a Neural Network(arXiv 1503.02531)
- Mishra et al., Accelerating Sparse Deep Neural Networks(arXiv 2104.08378,NVIDIA 2:4 稀疏白皮书)
- Frantar & Alistarh, SparseGPT: Massive Language Models Can Be Accurately Pruned in One-Shot(arXiv 2301.00774)
- Mistry et al., 相关剪枝综述与 MiniLLM(Gu et al., arXiv 2306.08543,序列级蒸馏)