Skip to content

蒸馏、剪枝与低秩分解

本页速览 量化之外,蒸馏、剪枝、低秩分解是另三条模型瘦身路线。本文对比三种技术的原理、适用场景与组合策略,帮你决定该用哪一招。

蒸馏、剪枝与低秩分解

一句话定义:蒸馏、剪枝、低秩分解是与量化并列的三条模型瘦身路线——蒸馏让"小模型学着大模型的样子输出",剪枝删掉"不重要的权重",低秩分解把权重矩阵"压缩成两个小矩阵"。

行业洞察:部署优化的第一选择永远是量化,但量化有自己的天花板(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 稀疏,按这个顺序花你的预算

延伸阅读

参考资料