大模型瘦身术:压缩·剪枝·蒸馏·分布式训练全讲透(附代码)
📢 本文是 「108张AI知识卡片·大模型通关手册」 系列第 13 篇。上一篇讲了部署+推理+量化+加速,这篇讲怎么让模型本身变得更小、更轻——压缩、剪枝、蒸馏,三大瘦身术。
目录
- TL;DR 太长不看
- 一、模型压缩:三大瘦身手段对比
- 二、剪枝:砍掉不重要的权重
- 三、知识蒸馏:大模型当老师,小模型当学生
- 四、分布式训练:一张卡训不了就多卡
- 五、一张图串起压缩链路
- 六、代码:剪枝 + 蒸馏简化实现
- 写到最后
- 系列导航 & 持续更新
TL;DR 太长不看
⚡ 30 秒版:先记这 4 条,细节往下翻。
- 🔴 模型压缩:量化(精度换空间)、剪枝(砍权重换空间)、蒸馏(大模型教小模型换空间)——三种手段,各有适用场景。
- 🟠 剪枝:找到不重要的权重,置零或删除——结构化剪枝(砍整个神经元)对硬件友好,非结构化剪枝(砍单个权重)压缩率更高但需要稀疏计算支持。
- 🟡 知识蒸馏:大模型(Teacher)的软标签比硬标签信息更丰富——小模型(Student)学软标签,用更少参数达到接近大模型的效果。
- 🟢 分布式训练:数据并行(每张卡一份模型副本,数据分片)、模型并行(模型切开放到不同卡上)、流水线并行(按层切分,流水线执行)——大模型训练必选。
- 🎁 压缩口诀:量化先做性价比最高→剪枝做结构化对硬件友好→蒸馏做任务专用小模型→分布式是训练不是压缩但让大模型训练成为可能。
一、模型压缩:三大瘦身手段对比

7B 模型 14GB 显存,70B 要 140GB——不是谁都有 8 张 A100。模型压缩就是让模型"瘦身":用更少的参数、更低的精度、更小的体积,达到接近原始模型的效果。
模型压缩解决的核心问题:模型太大,部署太贵。训练好的模型如果太大,推理成本高、部署门槛高、延迟大——压缩让模型"轻装上阵",装进更小的显存,跑在更便宜的硬件上。
它到底在干嘛(机制层):模型压缩三大手段。① 量化(Quantization):降低参数精度——FP16→INT8→INT4,每个参数占的位数减半再减半。上一篇讲过了,这里只做对比。② 剪枝(Pruning):砍掉不重要的权重——把"贡献小"的参数置零或删除,模型变稀疏。③ 知识蒸馏(Knowledge Distillation):大模型(Teacher)教小模型(Student)——小模型学大模型的"软标签"(概率分布),而不是硬标签(正确答案),用更少参数达到接近大模型的效果。三者对比:
| 量化 | 剪枝 | 蒸馏 | |
|---|---|---|---|
| 压缩方式 | 降低精度 | 砍权重 | 换小模型 |
| 压缩率 | 2-4× | 2-10× | 10-100× |
| 效果损失 | 1-5% | 2-10% | 3-15% |
| 需要重训练 | 否(PTQ) | 是(微调恢复) | 是(从头训练Student) |
| 硬件要求 | 通用 | 稀疏计算支持 | 通用 |
| 适用场景 | 通用部署 | 稀疏硬件 | 任务专用小模型 |
你能感受到什么(体感层):量化:7B FP16→7B INT8,14GB→7GB,效果几乎无损——最简单的压缩。剪枝:7B 剪掉 50% 权重→3.5B 等效大小,但需要稀疏计算硬件支持才能加速——否则只是省显存不省时间。蒸馏:7B Teacher→1.5B Student,14GB→3GB,效果损失 5-10%——但 Student 是"任务专用"的,在特定任务上可能接近 Teacher。
🎛️ 动手感受:三种压缩手段的效果对比
操作:同一个 7B 模型,分别用 INT8 量化 / 50% 剪枝 / 蒸馏到 1.5B,对比显存和效果。
你会看到:
- INT8 量化:7GB,效果损失 1-2%——最稳的压缩。
- 50% 剪枝:等效 3.5GB(但实际存储需稀疏格式),效果损失 3-5%——需要微调恢复。
- 蒸馏到 1.5B:3GB,效果损失 5-10%——但推理速度快 4-5 倍。
- 变化说明了什么:量化是"无感压缩",剪枝是"有感但可控",蒸馏是"大刀阔斧但换来自由"。
🤔 想一想
三种压缩手段可以叠加:先剪枝(砍掉 50% 权重)→再量化(INT8)→效果接近原始模型的 95%,但体积只有原来的 25%。但叠加顺序有讲究:先剪枝再量化比先量化再剪枝效果好——因为剪枝后模型更稀疏,量化误差在稀疏模型上更可控。
🔗 顺着他想:模型压缩是"总览",接下来逐个拆解——先讲剪枝,最直接的"砍权重"。
二、剪枝:砍掉不重要的权重

一个 7B 模型有 70 亿个参数——但真的每个参数都重要吗?研究发现,大模型中大量权重接近零,对输出贡献极小。剪枝就是找到这些"不重要"的权重,置零或删除——模型变稀疏,等效体积变小。
剪枝解决的核心问题:大模型有大量冗余参数。训练时参数多有利于优化,但推理时冗余参数浪费算力和显存——剪枝去掉冗余,让模型更紧凑。
它到底在干嘛(机制层):剪枝分两种。① 非结构化剪枝(Unstructured Pruning):砍单个权重——把绝对值最小的权重置零。优点:压缩率高(可以砍掉 90%+ 权重),因为只砍"最不重要的"。缺点:稀疏矩阵需要专门的稀疏计算硬件/软件支持,否则无法加速——GPU 原生不支持稀疏矩阵乘法。② 结构化剪枝(Structured Pruning):砍整个结构单元——整个神经元、整个注意力头、整个 FFN 中间维度。优点:对硬件友好,剪完直接是更小的稠密矩阵,不需要稀疏计算支持。缺点:压缩率比非结构化低(砍整个单元比砍单个权重"粗暴"),效果损失更大。剪枝流程:训练→评估权重重要性→剪枝→微调恢复→再评估→再剪枝→…(迭代剪枝,逐步砍,每次砍一点然后微调恢复,比一次性砍太多效果好)。权重重要性评估:幅度剪枝(绝对值越小越不重要,最简单)、梯度剪枝(梯度×权重越小越不重要,更准确)、损失敏感度(去掉这个权重后损失增加多少,最准确但最慢)。
你能感受到什么(体感层):非结构化剪枝 90%:7B 模型只保留 700M 非零权重——但需要稀疏计算库(如 Neural Magic的DeepSparse),否则推理速度不快。结构化剪枝 50%:7B 模型变成等效 3.5B——直接用标准 PyTorch 推理,速度提升 2 倍。迭代剪枝 vs 一次性剪枝:一次性砍 50% 效果损失 8%,迭代砍(每次砍 10%+微调,重复 5 次)效果损失 3%——迭代更稳但更耗时。
🎛️ 动手感受:不同剪枝策略的效果对比
操作:同一个 7B 模型,分别用非结构化 90% / 结构化 50% / 迭代结构化 50%,对比压缩率和效果。
你会看到:
- 非结构化 90%:等效 0.7B,但需要稀疏引擎——普通 GPU 上不加速。
- 结构化 50%:等效 3.5B,标准推理速度提升 2 倍,效果损失 5-8%。
- 迭代结构化 50%:等效 3.5B,效果损失 3-5%——比一次性剪枝好 2-3%。
- 变化说明了什么:结构化剪枝是工程首选——不需要特殊硬件,直接加速。迭代剪枝是效果首选——花更多时间,换来更少的效果损失。
🤔 想一想
剪枝的"重要性"假设是:权重绝对值越小越不重要。但这个假设不总是成立——有些小权重在特定输入下可能很关键(比如处理罕见但重要的模式)。幅度剪枝的"一刀切"可能误删关键权重。更精细的方法(如基于损失敏感度的剪枝)更准确但计算成本高——剪枝本身的成本也是工程考量。
🔗 顺着他想:剪枝是"砍权重",蒸馏是"换模型"——大模型当老师,小模型当学生。
三、知识蒸馏:大模型当老师,小模型当学生

7B 模型效果好但太贵——能不能训练一个 1.5B 的小模型,效果接近 7B?知识蒸馏的思路:让 7B 模型(Teacher)当老师,1.5B 模型(Student)当学生——Student 不学"标准答案"(硬标签),学 Teacher 的"思维方式"(软标签)。
知识蒸馏解决的核心问题:小模型直接训练效果不够,但大模型太贵——蒸馏让小模型"站在大模型的肩膀上",用更少参数达到更好效果。
它到底在干嘛(机制层):知识蒸馏的核心是软标签。硬标签:标准答案——“这个句子是积极的”(one-hot 编码,正确类别=1,其余=0)。软标签:Teacher 模型的概率分布——“积极 0.7,中性 0.2,消极 0.1”。软标签比硬标签信息更丰富:它不仅告诉你"正确答案是什么",还告诉你"其他选项有多接近"——这些"暗知识"(Dark Knowledge)就是蒸馏的关键。蒸馏损失 = α × Student 与硬标签的交叉熵 + (1-α) × Student 与 Teacher 软标签的 KL 散度。α 通常取 0.1-0.3——主要学软标签,少量学硬标签。温度参数 T:Softmax 之前除以 T,让概率分布更"平滑"——T 越大,分布越均匀,暗知识越明显。通常 T=2-5。蒸馏的三种模式:① 离线蒸馏:Teacher 已训练好,直接用——最简单,最常用。② 在线蒸馏:Teacher 和 Student 同时训练——Teacher 也在进步,但实现复杂。③ 自蒸馏:模型自己教自己——深层教浅层,或同一模型的不同快照互教。
你能感受到什么(体感层):直接训练 1.5B:在情感分类上准确率 85%。1.5B + 硬标签:同样的数据,准确率 85%——模型大小决定了上限。1.5B + 蒸馏(7B Teacher):准确率 89%——比直接训练高 4%,接近 7B 的 91%。7B Teacher 直接推理:准确率 91%,但推理成本是 1.5B 的 5 倍。蒸馏的性价比:1.5B Student + 蒸馏,用 20% 的推理成本达到 98% 的 Teacher 效果。
🎛️ 动手感受:硬标签 vs 软标签 vs 蒸馏的效果对比
操作:同一个 1.5B Student,分别用硬标签训练 / 软标签蒸馏(T=1)/ 软标签蒸馏(T=3),对比效果。
你会看到:
- 硬标签:准确率 85%——标准训练基线。
- 蒸馏 T=1:准确率 87%——软标签比硬标签信息更丰富,即使温度=1 也有提升。
- 蒸馏 T=3:准确率 89%——温度越高,暗知识越明显,Student 学得越好。
- T=10:准确率 88%——温度太高,分布太平滑,反而丢失了关键信息。
- 变化说明了什么:T=3-5 是蒸馏温度的甜点——太低暗知识不够,太高信息被稀释。
🤔 想一想
蒸馏有个隐含假设:Teacher 和 Student 的"能力差距"不能太大——1.5B 学 7B 可以,但 0.1B 学 7B 就很难了。差距太大,Student 根本学不动 Teacher 的软标签——就像让小学生学大学教材,信息密度太高反而学不到东西。蒸馏适合"差距适中"的场景:Student 容量是 Teacher 的 1/4 到 1/2 时效果最好。
🔗 顺着他想:压缩、剪枝、蒸馏都是"让模型变小"——但如果模型本身就很大,训练它就需要分布式训练。
四、分布式训练:一张卡训不了就多卡

7B 模型 FP16 训练要 14GB 显存——但训练需要存梯度+优化器状态,实际要 56GB+(Adam 优化器状态是模型参数的 2 倍)。一张 A100 80GB 刚好训 7B,70B 就需要 560GB+——至少 8 张 A100。分布式训练就是让多张卡协同工作,训练更大的模型。
分布式训练解决的核心问题:单卡显存不够训练大模型。模型参数+梯度+优化器状态的总显存远超单卡容量——分布式训练把计算和存储分摊到多张卡上。
它到底在干嘛(机制层):分布式训练三种模式。① 数据并行(Data Parallelism):每张卡一份完整的模型副本,数据分成 N 份——每张卡处理不同的数据,算出梯度后同步(AllReduce),更新参数。优点:实现简单(PyTorch DDP 一行代码)。缺点:每张卡要装下完整模型——模型太大单卡装不下就不行。② 模型并行(Tensor Parallelism):模型按权重切分到不同卡上——一个矩阵乘法切成两半,两张卡各算一半,结果拼接。优点:模型可以很大,不受单卡限制。缺点:每层都需要卡间通信(AllReduce),通信开销大——需要高带宽互联(NVLink)。③ 流水线并行(Pipeline Parallelism):模型按层切分——卡 1 负责 1-8 层,卡 2 负责 9-16 层,…。优点:通信量小(只在层边界传递激活值)。缺点:流水线气泡(Pipeline Bubble)——前一张卡算完才能传给下一张,存在等待时间。实际方案:三者组合——70B 模型通常用 8 卡流水线并行×8 卡张量并行=64 卡,再加数据并行扩展到数百卡。Megatron-LM 和 DeepSpeed 是最常用的分布式训练框架。
你能感受到什么(体感层):数据并行 8 卡:8×A100,每卡装完整 7B 模型,训练速度约 7.5×(通信开销约 6%)。张量并行 2 卡:2×A100,每卡装半个 7B 模型权重,但每层都要 AllReduce——需要 NVLink 才高效。流水线并行 4 卡:4×A100,每卡负责 8 层——但流水线气泡约 10-20% 空闲。组合 64 卡:8×流水线×8×张量=64 卡训 70B 模型——通信开销约 15-25%,实际加速约 50×。
🎛️ 动手感受:不同并行策略的加速效果
操作:同一个 7B 模型,分别用数据并行 1/2/4/8 卡,对比训练速度和通信开销。
你会看到:
- 1 卡:基准速度,无通信开销。
- 2 卡数据并行:1.9× 加速,通信开销约 5%。
- 4 卡数据并行:3.7× 加速,通信开销约 7%。
- 8 卡数据并行:7.2× 加速,通信开销约 10%。
- 变化说明了什么:数据并行的通信开销随卡数增长——超过 64 卡后,通信可能成为瓶颈,需要换张量并行/流水线并行。
🤔 想一想
分布式训练的"扩展效率"(Scaling Efficiency)= 实际加速 / 理想加速。8 卡数据并行理想加速 8×,实际 7.2×,扩展效率 90%——很好。但 256 卡可能只有 150×,扩展效率 59%——通信开销吃掉了 41% 的算力。分布式训练的终极挑战是"通信与计算的平衡"——计算越快,越容易被通信拖后腿。
🔗 顺着他想:4 个概念串起来,就是大模型"瘦身+训练"的完整链路。
五、一张图串起压缩链路
4 个概念串成一条从"压缩"到"训练"的完整链路:
大模型压缩与训练链路
│
① 模型压缩 ← 三大瘦身手段总览:量化/剪枝/蒸馏
│
② 剪枝 ← 砍不重要权重,结构化剪枝对硬件友好
│
③ 知识蒸馏 ← 大模型教小模型,软标签比硬标签信息更丰富
│
④ 分布式训练 ← 多卡并行,让大模型训练成为可能
压缩口诀:
- 量化先做——INT8 性价比最高,一行代码搞定。
- 剪枝做结构化——对硬件友好,直接加速。
- 蒸馏做任务专用——小模型+蒸馏=特定任务的轻量方案。
- 分布式是训练不是压缩——但让大模型训练成为可能。
六、代码:剪枝 + 蒸馏简化实现
import torch
import torch.nn as nn
import torch.nn.functional as F
# ① 结构化剪枝:按L1范数剪掉整个神经元
def structured_prune_linear(layer: nn.Linear, prune_ratio: float = 0.5):
"""按L1范数剪掉prune_ratio比例的输出神经元"""
importance = layer.weight.abs().sum(dim=1) # 每个输出神经元的L1范数
n_prune = int(len(importance) * prune_ratio)
keep_indices = importance.argsort()[n_prune:] # 保留重要的
keep_indices, _ = keep_indices.sort()
new_out = len(keep_indices)
new_layer = nn.Linear(layer.in_features, new_out, bias=(layer.bias is not None))
new_layer.weight.data = layer.weight.data[keep_indices]
if layer.bias is not None:
new_layer.bias.data = layer.bias.data[keep_indices]
return new_layer, keep_indices
# 演示
layer = nn.Linear(512, 256)
pruned, indices = structured_prune_linear(layer, prune_ratio=0.5)
print(f"原始: {layer.in_features}→{layer.out_features}")
print(f"剪枝后: {pruned.in_features}→{pruned.out_features} (保留50%神经元)")
# ② 知识蒸馏损失
def distillation_loss(student_logits, teacher_logits, labels,
temperature: float = 3.0, alpha: float = 0.3):
"""蒸馏损失 = α×硬标签CE + (1-α)×软标签KL"""
hard_loss = F.cross_entropy(student_logits, labels)
soft_student = F.log_softmax(student_logits / temperature, dim=-1)
soft_teacher = F.softmax(teacher_logits / temperature, dim=-1)
soft_loss = F.kl_div(soft_student, soft_teacher, reduction='batchmean') * (temperature ** 2)
return alpha * hard_loss + (1 - alpha) * soft_loss
# 演示
student_out = torch.randn(4, 100) # batch=4, vocab=100
teacher_out = torch.randn(4, 100)
labels = torch.randint(0, 100, (4,))
loss = distillation_loss(student_out, teacher_out, labels, temperature=3.0, alpha=0.3)
print(f"蒸馏损失: {loss.item():.4f}")
print(f"温度T=3.0,软标签权重70%,硬标签权重30%")
这段代码实现了结构化剪枝和知识蒸馏的核心逻辑。生产环境推荐:剪枝用 TorchPruner/NNI,蒸馏用 TextBrewer/Pytorch Distiller,分布式训练用 DeepSpeed/Megatron-LM。
写到最后
4 个概念,从压缩的三种手段总览到剪枝的"砍权重"、蒸馏的"大教小"、分布式训练的"多卡并行"——串起来就是大模型"瘦身+训练"的完整链路。压缩不是"偷工减料",是"精兵简政"——用更少的资源做更多的事。
下一篇讲大模型"体检"——评测体系,怎么知道模型好不好。
如果你读下来觉得真有用:
- 👍 点个赞,让我知道压缩蒸馏这种"瘦身术"写法值得继续;
- ⭐ 收藏起来,剪枝/蒸馏/分布式这些概念在模型优化实战中回来翻的概率很高;
- 💬 关注一下,下一篇"模型评测篇"会讲评测体系/Benchmark/Judge,关注了就不会错过。

有问题评论区直接说,我会逐条回。
更多推荐

所有评论(0)