外观
蒸馏、剪枝与低秩分解
一句话定义:蒸馏、剪枝、低秩分解是与量化并列的三条模型瘦身路线——蒸馏让"小模型学着大模型的样子输出",剪枝删掉"不重要的权重",低秩分解把权重矩阵"压缩成两个小矩阵"。
行业洞察:部署优化的第一选择永远是量化,但量化有自己的天花板(4-bit 以下掉点加速、激活量化困难)。当量化不够用、或目标模型实在太大时,业界的主流打法是把三件套与量化组合:先蒸馏出一个更小更稳的学生模型,再对它做剪枝或量化。阿里巴巴、腾讯、Meta 的多个生产模型都走了"蒸馏→量化"路线——蒸馏解决精度、量化解决速度,各干各的活。关键在于理解每招的"成本-收益曲线",别拿大炮打蚊子。
一、模型压缩全景图
text
模型压缩四件套
├─ 量化(quantization) :降位宽,省带宽/显存,不动结构 → 部署改动最小
├─ 蒸馏(distillation) :小模型学大模型,重构模型本身 → 需训练,效果上限最高
├─ 剪枝(pruning) :删不重要的权重/通道,稀疏化 → 收益看是否支持稀疏加速
└─ 低秩分解(low-rank) :矩阵近似分解,SVD 压缩 → 适合全连接层,卷积收益小一句话定位:量化是"压缩精度",蒸馏是"压缩容量",剪枝是"压缩连接",低秩是"压缩结构"。本文聚焦后三种,量化详见 量化。
二、知识蒸馏(knowledge distillation)
1. 核心思想:软标签比硬标签信息量大
Hinton 在 2015 年《Distilling the Knowledge in a Neural Network》中提出:训练小模型(student)时,除了真实标签,还让它学习大模型(teacher)输出的软标签(soft label,即概率分布)。
text
大模型 teacher(已经训好)
│ 输出 softmax 概率分布(经温度 T 软化)
│ ↓ 软标签(如 猫0.6 狗0.3 鸟0.1)
小模型 student(待训练)
│ 损失 = α × 交叉熵(硬标签) + β × KL散度(软标签, 学生输出)为什么软标签强:硬标签只告诉模型"这是猫",软标签还传达了"猫和狗长得像、猫和鸟不像"的类间相似性结构——这些是 teacher 用海量数据学到的先验知识。所以学生模型能用更少的参数学到更多。
2. 三种蒸馏形态
| 形态 | 做法 | 典型场景 |
|---|---|---|
| 离线蒸馏(standard KD) | 先用大模型离线生成软标签,再训学生 | 最经典,一次性成本 |
| 在线蒸馏(online KD) | 师生同时训练,学生参与训练动态 | 无现成大模型时 |
| 自蒸馏(self-distillation) | 同一模型深层的输出教浅层 | 减少教师依赖 |
3. 训练成本高,但效果最好
蒸馏的显著代价是训练:需要大模型推理生成软标签(昂贵但一次性)+ 重新训练学生。收益也最直接:相同精度目标下,蒸馏出的学生模型往往比同规模直接训练的模型强一截,且天然更鲁棒。所以"蒸馏→量化"的组合是业界最常用的双保险:蒸馏把掉点预算留出来,量化只吃掉一小部分。
三、剪枝(pruning)
1. 非结构化剪枝:稀疏化,难加速
逐权重把"不重要"的参数置零(如按绝对值阈值),形成稀疏矩阵。压缩率可观(50~90% 稀疏),但普通硬件不加速——稠密矩阵运算并不会因为里面是 0 而变快,除非底层有稀疏内核。
2. 结构化剪枝:整块删,易加速
按通道/整层删,直接改变张量形状,任何硬件都能加速(矩阵变小了)。缺点是精度损失通常比非结构化大。
3. 半结构化 2:4 稀疏:Ampere 的甜点
NVIDIA Ampere 架构起支持 2:4 结构化稀疏:每 4 个连续权重中恰好保留 2 个。硬件层面有专门支持,INT8/FP16 稀疏算力翻倍(如 A100 的 FP16 312 TFLOPS → 稀疏 624 TFLOPS),且精度损失比完全随机剪枝可控。前提是模型要在训练/微调时按 2:4 mask 做"稀疏感知训练"(类似 QAT),否则掉点严重。
| 剪枝类型 | 压缩收益 | 精度风险 | 硬件加速 | 工程成本 |
|---|---|---|---|---|
| 非结构化 | 高(稀疏 90%) | 中 | 差(几乎无) | 低(mask 即可) |
| 结构化(通道/层) | 中 | 中高 | 好(形状变小) | 中(需重训练恢复) |
| 2:4 半结构化 | 中(固定 50%) | 中(配合训练) | 好(tensor core 原生) | 中高 |
四、低秩分解(low-rank decomposition)
1. 原理:一个矩阵 ≈ 两个小矩阵
用 SVD 把权重矩阵 W (m×n) 分解为 U (m×k) × V (k×n),当 k << min(m,n) 时,总参数量从 m×n 降到 k×(m+n)。
text
原始: W = U × V 参数量 m×n
压缩: k = 64(原 4096)→ m×k + k×n ≈ 4096×64×2 ≈ 0.5M vs 16.7M,省 ~97%2. 适用边界:全连接层好用,卷积收益小
- 全连接 / embedding 层:矩阵大而秩低,压缩效果显著;
- 卷积层:本身就是 4D 张量,SVD 分解收益有限,且多层间结构复杂;
- LLM 的 FFN 层:已有 LoRA 等成熟低秩方法,但 LoRA 是为微调设计的,部署时并非直接拿来压缩推理模型。
现实是:低秩分解作为独立部署手段用得越来越少,因为对现代深度模型,蒸馏和量化的收益更大、风险更可控。它更多作为训练侧技术(如 LoRA 微调、DeepSeek-V2 的 MLA)发挥作用。
五、三招对比与组合策略
1. 综合对比表
| 维度 | 蒸馏 | 剪枝 | 低秩分解 |
|---|---|---|---|
| 压缩比 | 由学生规模定,可 10~100× | 30~90% 稀疏(非结构化) | 全连接层 10~100× |
| 精度损失 | 最低(重训恢复) | 中(结构化剪枝重训可恢复) | 中高(固定结构误差) |
| 训练成本 | 高(重训学生) | 中(可能需微调) | 低 |
| 部署收益 | 模型本身变小变快 | 结构变快/支持稀疏 | 矩阵变小 |
| 硬件依赖 | 无 | 2:4 需 Ampere+;非结构化几乎无 | 无 |
| 生态成熟度 | 高(Hugging Face 大量蒸馏模型) | 中 | 低(部署端) |
2. 组合策略:先蒸馏后量化最常见
text
路线 A(最常用):蒸馏 → 量化
大模型 → 蒸馏出小模型(精度↑,容量↓) → PTQ/QAT 量化(速度↑↑)
理由:蒸馏让模型更"好量化",量化吃掉的部分精度有蒸馏的余量兜底
路线 B:剪枝 → 量化
大模型 → 2:4 稀疏或通道剪枝 → INT8 量化
理由:稀疏 + 量化叠加,A100 上可达 FP16 稠密的 ~4 倍吞吐
路线 C(不推荐):直接对原模型量化
省事,但掉点风险全扛组合的真实收益
A100 上 2:4 稀疏(2×)+ INT8(2~4×)组合,理论上可让模型吞吐提升 4~8 倍,这在 性能优化与容量规划 的四层优化里属于"模型层"的天花板级别优化。
3. 各自适合的模型类型
- LLM:优先量化 + 蒸馏(如蒸馏出 1/3 参数量的小 LLM),剪枝在 LLM 上研究多、落地少;
- CV 模型(ResNet/检测):2:4 稀疏 + 量化是成熟组合;
- NLP 中小模型(BERT 级):蒸馏成 TinyBERT/MiniLM 是标准动作,再配 INT8;
- 推荐系统 embedding 塔:低秩分解 + 量化组合常见。
权衡与取舍
| 决策点 | 选项 | 怎么选 |
|---|---|---|
| 压缩手段 | 量化 vs 蒸馏 vs 剪枝 vs 低秩 | 默认先量化;精度不够加蒸馏;硬件支持再加 2:4 稀疏 |
| 训练资源有无 | 有 → 蒸馏/结构化剪枝;无 → PTQ 量化 | 没 GPU 就别碰重训路线 |
| 硬件能力 | Ampere+ → 2:4 稀疏可用;老卡 → 别用稀疏 | 查目标卡规格再定 |
| 时间预算 | 上线前 1 周 → 只做量化;1 个月+ → 可做蒸馏 | 蒸馏重训以天计 |
一句话总结:量化解决"快",蒸馏解决"小且准",剪枝和低秩各有适用边界——先量化、不够就蒸馏、再不够加 2:4 稀疏,按这个顺序花你的预算。
延伸阅读
- 量化 —— 四件套中部署改动最小、收益最直接的一招
- 论文精读:蒸馏经典 —— KD 及其家族论文逐篇拆解
- 模型优化实战 —— 组合策略的落地步骤与验收
- GPU 与硬件选型 —— 2:4 稀疏需要的硬件前提
- 大模型推理优化 —— LLM 场景的压缩与推理组合拳