【大模型Wiki】06 · 知识蒸馏与模型压缩
知识蒸馏与模型压缩:让大模型变小
大模型 Wiki · 补充篇 11 | 2026-09 整理
让 671B 的 DeepSeek-V3 里有能用,和让 7B 的小模型在消费级显卡上跑起来,是两条不同的路。前者靠 MoE(见第 13 篇),后者靠压缩三板斧:蒸馏、量化、剪枝。2025–2026 年,这套技术已经从"研究选项"变成所有旗舰模型的标配工艺。
为什么压缩如此重要?因为大模型落地的真正瓶颈往往不是"模型不够强",而是"装不下、跑不快、用不起":
- 装不下:一个 70B 的 FP16 模型光权重就要 140GB,远超单卡显存。
- 跑不快:参数量越大,单次推理的 FLOPs 越高,延迟越难压到实时。
- 用不起:云端推理按 token 计费,参数规模直接决定每次调用的成本。
压缩技术就是在不(显著)损失能力的前提下,把模型"变小、变快、变便宜"。它们各有侧重:
| 技术 | 改变的是什么 | 典型收益 |
|---|---|---|
| 知识蒸馏 | 训练一个更小的"学生"模型 | 模型结构变小、精度恢复 |
| 量化 | 降低每个参数的存储位宽 | 显存/带宽大幅下降,零结构改动 |
| 剪枝 | 删除冗余参数/结构 | 参数与 FLOPs 同时下降 |

下面三章分别拆解这三类方法,并在最后一章给出工程上的"组合拳"建议。
一、知识蒸馏(Knowledge Distillation)
知识蒸馏(Knowledge Distillation,KD)由 Hinton 等人在 2015 年的经典论文《Distilling the Knowledge in a Neural Network》中系统提出。核心思想一句话概括:让一个小模型(学生)去模仿一个大模型(教师)的行为,而不是只去拟合原始训练数据的硬标签。
这种"模仿"之所以有效,是因为教师模型的输出里蕴含了远超 one-hot 标签的信息——比如它给"猫"打的 0.7 分、给"狗"打的 0.25 分、给"汽车"打的 0.05 分,本身就暗示了"猫和狗在视觉上比猫和汽车更相似"。这种类间相似性被称为"暗知识"(dark knowledge),是蒸馏效果远超普通监督学习的根本原因。
1.1 经典蒸馏:学输出分布
Hinton 2015 年的经典框架:教师模型的 softmax 输出(带温度 T 软化)作为"软标签"监督学生模型。软标签携带类间相似性的"暗知识",比 one-hot 硬标签信息量大得多。
1.1.1 温度系数 T 的数学原理
标准 softmax 是:
其中 \(z_i\) 是第 \(i\) 类的 logit。当某些 logit 远大于其余项时,softmax 输出会非常"尖锐"(接近 one-hot),暗知识被压缩掉了。Hinton 引入温度 \(T\) 来软化分布:
- 当 \(T = 1\) 时,退化为普通 softmax。
- 当 \(T \to \infty\) 时,分布趋近于均匀分布,所有类的相对关系被拉平。
- 当 \(T > 1\)(典型取 2~4 甚至更高)时,logit 之间的差距被"温和地"缩小,那些概率很小的"次选类"也会分到不可忽略的概率质量,暗知识得以保留。
直觉理解:温度越高,模型越"温柔"地表达它的不确定度。学生通过拟合这个软化后的分布,能同时学到"主类是谁"和"哪些类是容易混淆的近邻"。
1.1.2 为什么损失要乘 \(T^2\)
用 KL 散度衡量学生与教师软分布的距离时,一个重要细节是梯度量级补偿。Hinton 指出:对 \(z_i / T\) 求导后,梯度会缩小约 \(1/T^2\) 倍(因为 softmax 对缩放输入的导数也缩放 \(1/T^2\))。如果不加补偿,低温度下的梯度信号会被"稀释"。因此标准做法是把 soft 损失乘以 \(T^2\):
这个 \(T^2\) 系数保证在反向传播时,软标签监督的梯度幅值与原始 logit 尺度一致。注意:只乘在 soft 分支上,hard 分支(真实标签)不加 \(T^2\)(hard 分支本身没有温度缩放)。
1.1.3 损失函数的三种组成:hard / soft / feature
一个完整的蒸馏训练损失通常可以拆成三部分,这也是现代蒸馏框架(DistilBERT、TinyBERT 等)的实际做法:
-
Soft loss(软标签损失):学生与教师在温度 \(T\) 下的输出分布之间的 KL 散度,承载"暗知识"。
\[\mathcal{L}_{\text{soft}} = T^2 \cdot \mathrm{KL}\!\left(\sigma(z_t/T)\,\|\,\sigma(z_s/T)\right) \] -
Hard loss(硬标签损失):学生输出对真实标签的普通交叉熵,保证基本正确性、防止软标签带偏。
\[\mathcal{L}_{\text{hard}} = \mathrm{CE}\!\left(y,\, \sigma(z_s)\right) \] -
Feature loss(特征/隐层损失):让学生中间层的隐藏表示(hidden states)去对齐教师的对应层。最典型的是 FITNet(Romero et al., 2015),用一个可学习的投影矩阵把学生窄隐藏层映射到教师宽隐藏层维度后做 MSE;DistilBERT 则用余弦相似度对齐最后一层隐藏态。特征损失能让浅层学生也学到教师的中层语义表征,对小模型尤其重要。
\[\mathcal{L}_{\text{feat}} = \mathrm{MSE}\!\left(\phi_s(x),\, W_{\text{proj}}\,\phi_t(x)\right) \]
总损失为加权组合:
# 经典 KD 损失
loss = alpha * KL(student_softmax(T) || teacher_softmax(T)) * T**2 \
+ (1 - alpha) * CE(student_logits, hard_labels)
其中 alpha 平衡软/硬两项。实践中常见取值 alpha=0.7~0.9——更信任教师的软分布,但仍保留少量硬标签保底。若教师与学生结构差异很大、或任务标签噪声大,可下调 alpha。
1.1.4 一个最小可运行 KD 示例(PyTorch)
下面给出一段自包含、可直接跑的蒸馏训练伪代码,便于建立直观感受:
import torch
import torch.nn as nn
import torch.nn.functional as F
def kd_loss(student_logits, teacher_logits, labels, T=4.0, alpha=0.7):
"""
student_logits / teacher_logits: [B, num_classes] 未过 softmax 的 logits
labels: [B] 真实类别索引
T: 温度系数,软化输出分布
alpha: 软损失权重
"""
# 软标签分支:用温度 T 软化后用 KL 散度对齐,并乘 T^2 补偿梯度
soft_loss = F.kl_div(
F.log_softmax(student_logits / T, dim=-1),
F.softmax(teacher_logits / T, dim=-1).detach(), # teacher 不回传梯度
reduction="batchmean",
) * (T ** 2)
# 硬标签分支:学生正常对真实标签做交叉熵
hard_loss = F.cross_entropy(student_logits, labels)
return alpha * soft_loss + (1 - alpha) * hard_loss
# 训练循环示意
# teacher.eval() # 教师全程不参与训练、不更新梯度
# for x, y in loader:
# s_logits = student(x)
# with torch.no_grad():
# t_logits = teacher(x)
# loss = kd_loss(s_logits, t_logits, y, T=4.0, alpha=0.7)
# loss.backward(); opt.step()
关键踩坑点:
teacher_logits一定要.detach(),否则梯度会反向流回教师、把教师也"带歪"。F.kl_div要求第一个参数是 log_softmax(不是 softmax),第二个是普通 softmax,顺序写反会报错或梯度异常。reduction="batchmean"才是 Hinton 原论文定义的标准 KL(对 batch 求平均、对类别求和),用"mean"会少除类别数、量级不对。
1.2 白盒 vs 黑盒蒸馏
| 方式 | 教师可访问性 | 典型做法 | 例子 |
|---|---|---|---|
| 白盒 | 可拿到 logits/权重 | 蒸馏 logit 分布、隐层特征 | DistilBERT、TinyLlama |
| 黑盒 | 只能用 API | 蒸馏输出数据(生成指令-回答对再 SFT) | 早期 Alpaca、很多国产小模型 |
白盒蒸馏要求教师模型的权重或至少前向 logits 可见,能做软标签/特征对齐,信息利用率最高。代价是需要教师和学生在同一框架内、能拿到推理中间结果。
黑盒蒸馏只把教师当成一个"数据生成器":用教师模型(常是闭源强模型)批量生成(指令,回答)对,再用这些合成数据对开源小模型做常规 SFT。这一步严格说已经不是经典意义上的"logit 蒸馏",而是数据蒸馏 / 行为克隆。它的好处是零依赖教师内部实现,只要能调 API 即可;坏处是只能学到教师的"输出风格",学不到暗知识中的细粒度类间关系,且数据质量完全取决于教师。
闭源 API 时代,黑盒蒸馏是事实上的主流:用 GPT/Claude 生成训练数据,微调开源小模型。各厂商服务条款对此限制不一,商用需注意合规。例如 OpenAI 的使用条款长期禁止用其输出训练竞争性模型,因此在商用闭环里做黑盒蒸馏前务必核对对方 ToS,避免法律与合规风险。2025 年后不少开源强模型(Qwen、Llama、DeepSeek)本身就能充当教师,白盒/黑盒的边界变得模糊。
1.3 推理轨迹蒸馏(2025 年后的重点升级)
推理模型时代,蒸馏的对象从"输出分布"升级为推理轨迹(long CoT):
- DeepSeek-R1 蒸馏系列:直接用 R1 生成的 80 万条长思维链样本 SFT 到 Qwen/Llama 小模型上,R1-Distill-Qwen-7B 在 AIME 上超过原版 QwQ-32B——证明"小模型学大模型的思考过程"比"小模型自己 RL"便宜且有效。具体规模覆盖 1.5B / 7B / 8B / 14B / 32B / 70B 多个档次;R1 官方报告其 Distill-Qwen-32B 在 AIME 2024 达到约 72.6% pass@1,明显超过 QwQ-32B-Preview(约 50%),而 7B 蒸馏版也达到约 55.5%。这说明"思考范式"本身可以被小模型通过 SFT 直接继承。
- NVIDIA Llama-Nemotron 系列:同样以教师长思维链为监督数据,并配套"可切换推理开关"的训练策略(推理模式/非推理模式)。
- on-policy 蒸馏(2026 前沿):学生自己生成,教师打分/纠偏,消除 off-policy 数据的分布偏移。经典离线蒸馏用的是"教师出题、教师解题、学生照抄"的 off-policy 数据,学生生成的分布与训练分布不一致,会引入暴露偏差(exposure bias)。on-policy 蒸馏改为:让学生先采样出一批回答,再由教师对这些回答进行修正或打分(rejection sampling / best-of-n),用"学生自己的产出 + 教师反馈"来训练,分布更自洽。DeepSeek-V4、Qwen3.5、GLM-5.2 的后训练管线里都出现了"strong→weak 蒸馏"或"on-policy distill"环节。
一句话总结行业共识:RL 教模型学会思考,蒸馏把思考能力传给小模型。
补充:推理轨迹蒸馏在代码/数学等"可验证奖励"领域收益最大,因为教师的正确思维链本身就是高质量监督;而在开放式闲聊、创意写作等主观任务上,长链"思考"反而可能引入冗余,需要按需开启。
1.4 蒸馏的边界
- 蒸馏上限受教师能力封顶:教师不会的,学生靠蒸馏学不到(这也是 RL 依然必要的原因)。一个常被引用的不等式是:学生能力的理论上限 ≈ 教师在该分布上的能力;想突破上限必须引入教师没见过的信号(更强的数据、RL 探索、人类反馈),这正是"蒸馏给基线、RL 补上限"组合的逻辑。
- 合成数据循环风险:Nature 2024 的 model collapse 研究警示,递归用自己生成的数据训练会坍缩。当多代模型都用"上一代生成的数据"训练,分布会逐渐收缩、多样性崩塌(model collapse)。稳妥配方是"合成数据 + 过滤验证器 + 多源混合"——用强验证器筛掉教师幻觉/低质样本,并保留足够比例的真实高质量人类数据作为锚点。
- 蒸馏并非总是最优:当学生与教师结构差距过大(如 1.5B 学生学 671B 教师的全部能力),单靠 SFT 蒸馏会遇到"容量瓶颈",此时需要配合 RLVR 在小模型自身容量内"重新激发"能力,而不是无限堆蒸馏数据。
二、量化(Quantization)
把 FP16/BF16 权重压到更低位宽。量化的本质是用更少的 bit 表示同一个张量,核心权衡是"位宽↓ → 显存/带宽↓ → 但精度损失↑"。
2.1 位宽与格式速查
| 格式 | 位宽 | 说明 |
|---|---|---|
| FP32 | 32 | 训练原始精度,推理基本不用 |
| BF16/FP16 | 16 | 推理主流起点 |
| INT8 (W8A8) | 8 | 服务端常用,几乎无损 |
| NF4/INT4 | 4 | 消费级本地部署主流(GPTQ/AWQ/bnb) |
| FP8 | 8 | H 系列显卡原生支持,训练推理都在用 |
| NVFP4 | 4 | NVIDIA 2026 主推,Nemotron 3 用 4-bit 训练 |
名词澄清:
- W8A8:权重 8-bit、激活 8-bit,全程低精度计算,对算子支持要求高。
- W4A16:权重 4-bit、激活保持 16-bit(GPTQ/AWQ 常见做法),计算时反量化回高精度,兼容性最好、最易落地。
- NF4(NormalFloat 4-bit):一种为"近似标准正态分布"的权重专门设计的 4-bit 数据类型(QLoRA 提出)。它把信息论上针对标准正态分布最优的量化点直接固化成 4-bit 码本,比均匀 INT4 更适合 LLM 权重分布。
- FP8(E4M3 / E5M2):H100/H200 等卡原生 Tensor Core 支持,训练与推理均可,几乎无损且无需重训。
2.2 主流量化方法
- GPTQ:基于二阶信息的逐层权重量化,离线校准。源自 OBS(Optimal Brain Surgeon)思路:逐层把权重从 FP16 量化到 INT4,同时利用该层激活的 Hessian(逆二阶信息)估计量化误差,并把误差"补偿"到同一层尚未量化的权重上,从而最小化逐层重建误差。通常只需 128 条左右校准样本,纯离线、一次性完成,无需训练。优点:生态成熟、速度快;缺点:在极小位宽(2-bit 以下)质量衰退明显。
- AWQ(Activation-aware Weight Quantization):激活感知,保护对输出影响大的"显著权重",4-bit 质量最好的一档。AWQ 的核心观察是:权重的"重要性"不应只看权重绝对值大小,而应看它对应的激活大小——约 1% 的"显著权重"通道(activation 幅值大)对最终输出贡献了绝大部分信息。AWQ 通过按激活统计量给每个通道乘一个缩放系数(salient 通道放大、量化误差被相对摊薄),再统一量化。相比 GPTQ 的逐层补偿,AWQ 是 per-channel 的、更轻量且对校准集不敏感,4-bit 下常略胜 GPTQ。
- GGUF/llama.cpp 系:端侧生态标准,Q4_K_M 等混合位宽,CPU 也能跑。GGUF 是 llama.cpp 的模型容器格式,支持 k-quant(不同张量用不同位宽:attention 用稍高位、FFN 用低位)的混合策略,
Q4_K_M是质量与体积平衡最好的常用档位(约 4.5–5 bit 等效),Q5_K_M/Q8_0更准但更大。它的杀手锏是纯 CPU / Apple Silicon NPU 也能跑,成为本地部署事实标准。 - QAT(量化感知训练):训练时就模拟量化噪声,Kimi K3 已用 QAT,比 PTQ 后量化的损失更小。PTQ(Post-Training Quantization,GPTQ/AWQ 都属此类)不改训练、直接量化,便宜但有损;QAT 在训练前向里插入"伪量化"节点(FakeQuant:量化再反量化,模拟舍入误差),让模型在训练期就适应低精度,量化后损失最小,但需要算力重训、成本高。2026 年 Kimi K3、部分端侧旗舰已采用 QAT 把模型直接训成 4-bit 友好。
- 其它:SmoothQuant(W8A8 时把激活的离群值平滑到权重上,解决激活 outlier 问题)、SpQR(保留极少数异常权重为高精度、其余低位)、HQQ(无校准集的即量化算法)等,按部署硬件灵活选用。
2.3 显存速算
FP16 推理:参数量 × 2 GB(+20% 激活/缓存开销)。例如 7B FP16 ≈ 14GB,13B ≈ 26GB,70B ≈ 140GB,135B ≈ 270GB。
4-bit 量化后体积 ≈ 参数量 × 0.5 GB(NF4/INT4 每参数半字节)+ 约 10–20% 反量化/索引开销。所以 70B 模型 ≈ 40GB 出头,一张 48G 卡(如 RTX 4090/5090、A6000、L40S)可跑;7B 4-bit ≈ 4–5GB,普通 8GB 显存笔记本即可。
速算小公式(估算权重本体,不含 KV Cache 与激活):
| 模型 | FP16 权重 | INT8 权重 | 4-bit 权重 |
|---|---|---|---|
| 7B | ~14 GB | ~7 GB | ~4–5 GB |
| 13B | ~26 GB | ~13 GB | ~8 GB |
| 70B | ~140 GB | ~70 GB | ~40 GB |
| 405B | ~810 GB | ~405 GB | ~230 GB |
注意:实际推理还要叠加 KV Cache(随上下文长度线性增长,长上下文服务常被 KV Cache 主导)与激活显存(随 batch 增大)。例如 70B 模型服务化时,KV Cache 可能再吃掉数十 GB。
2.4 量化实战代码
用 HuggingFace transformers + auto-gptq / auto-awq 做离线量化非常简短:
# ---- GPTQ 量化(离线,需校准集)----
from transformers import AutoTokenizer, AutoModelForCausalLM, GPTQConfig
import torch, datasets
model_id = "Qwen/Qwen3-14B"
tokenizer = AutoTokenizer.from_pretrained(model_id)
# 校准集:取几百条代表性文本即可
calib = datasets.load_dataset("c4", "en", split="train") \
.select(range(128))["text"]
gptq_cfg = GPTQConfig(
bits=4, # 目标位宽
group_size=128, # 每 128 个权重共享一个量化尺度,越小越准越慢
desc_act=True, # 按激活排序,质量更好(稍慢)
)
model = AutoModelForCausalLM.from_pretrained(
model_id, device_map="auto", quantization_config=gptq_cfg,
)
# 用校准集跑一遍前向,完成量化
model.quantize(calib)
model.save_pretrained("./qwen3-14b-gptq-4bit")
# ---- AWQ 量化(auto-awq)----
from awq import AutoAWQForCausalLM
from transformers import AutoTokenizer
model = AutoAWQForCausalLM.from_pretrained("Qwen/Qwen3-14B")
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3-14B")
# AWQ 只需少量校准样本,自动估计显著权重缩放
model.quantize(tokenizer, quant_config={"w_bit": 4, "q_group_size": 128})
model.save_quantized("./qwen3-14b-awq-4bit")
推理加载量化模型(无缝对接 device_map):
from transformers import AutoModelForCausalLM, AutoTokenizer
# GPTQ
model = AutoModelForCausalLM.from_pretrained(
"./qwen3-14b-gptq-4bit", device_map="auto")
# 也可配合 4-bit 的 bitsandbytes 做 LoRA 微调底座(见第 11 篇 QLoRA)
踩坑提示:
group_size越小量化越准但文件越大;128 是常用甜点,64 更准,256 更快。- AWQ 对校准集不敏感,GPTQ 建议校准集覆盖目标领域(领域外校准会掉点)。
- 量化后务必用一小批真实任务样本做"困惑度 + 人工抽检"双验证,避免"平均损失没变但特定能力崩了"(如某些语言/代码能力选择性退化)。
三、剪枝(Pruning)与稀疏化
剪枝(Pruning)通过删除"不重要"的权重/结构来缩小模型。与量化不同,剪枝改变的是参数数量本身。
- 非结构化剪枝(Unstructured):删单个权重(如按绝对值最小置零,magnitude pruning)。压缩率理论上很高,但权重组态是稀疏矩阵,需要专用稀疏计算库/硬件(如 NVIDIA 的 2:4 稀疏)才能真正加速;否则只是存储稀疏、计算并不快。深度学习里常用"彩票假设"(Lottery Ticket Hypothesis)解释:存在极小子网络即可复现原模型表现。
- 结构化剪枝(Structured):删整层/整头/整个 FFN 通道(channel/head/block),硬件友好、无需特殊算子。LLM 时代流行 层删除(depth pruning):实验证明 Transformer 并非每一层都"必要",删掉部分冗余层后模型能力损失有限。代表工作:
- LLM-Pruner:基于梯度/重要性的结构化剪枝,识别并移除对输出贡献低的耦合结构。
- Sheared-Llama:先结构化剪枝得到目标大小的小模型(如 1.3B/2.7B),再用蒸馏恢复精度——"剪了再补"。
- Minitron(NVIDIA):提出"prune-then-distill"流程,利用教师模型的 logits 作为软标签对小模型二次训练,比从零预训练小模型省 40× 算力。
- 稀疏化与推理加速:结构化剪枝后可用普通算子直接跑、延迟线性下降;非结构化剪枝需稀疏内核(如 2:4 模式在 Ampere 上有 2× 理论加速)。
剪枝与量化的协同:剪枝先"瘦结构",量化再"压位宽",两者叠加能把 7B 模型压到可在 4GB 显存跑、且精度保留 90%+ 的程度。
四、端侧与边缘部署(2026 现状)
| 场景 | 方案 | 代表 |
|---|---|---|
| 手机/PC | llama.cpp、MLC、Apple MLX | Qwen3-4B、Llama 3.2 3B |
| 浏览器 | WebGPU + 量化 wasm | WebLLM |
| 国产芯片 | LLMemade 等适配层 | 昇腾/寒武纪 |
| 企业服务 | vLLM/SGLang + FP8/INT8 | 高并发 API 服务 |
各场景要点:
- 手机/PC:llama.cpp(GGUF)是本地部署之王,支持 CPU/GPU/Metal/Vulkan;Apple MLX 在 Apple Silicon 上近乎原生、能耗极低;MLC-LLM 覆盖 Android/iOS/Web。常见做法是把 3–8B 模型量化到 Q4_K_M,单机上跑个人助手。
- 浏览器:WebLLM 借助 WebGPU 在网页里直接推理,配合 wasm 量化,零安装即可用,适合演示与轻量嵌入。
- 国产芯片:昇腾(Ascend)、寒武纪(Cambricon)等需专门的图适配/量化工具链(如 LLMemade、各厂 CANN),通常走 INT8/INT4 定点推理。
- 企业高并发:vLLM / SGLang 配 FP8/INT8 + 连续批处理(continuous batching)+ PagedAttention,单卡吞吐可拉满,是 OpenAI 类 API 服务的底座。
五、组合拳:一个 2026 年典型的"小模型工厂"
- 选一个 MoE 旗舰当教师(如 DeepSeek-V4 / Kimi K3)
- 教师 + 验证器批量合成推理轨迹数据(数学/代码可验证收益最大)
- 小模型先 SFT 蒸馏,再小规模 RLVR 补上限
- QAT 或 AWQ 量化到 4-bit
- 剪枝 + 二次蒸馏进一步缩身
- llama.cpp/vLLM 部署
DeepSeek-R1-Distill、Qwen 小杯系列、Nemotron、MiMo 都是这条流水线的产物。
更细的工程经验:
- 先量化再蒸馏还是先蒸馏再量化?多数团队选择"先蒸馏训练出能力强的稠密小模型,再量化部署",因为量化会引入噪声、不适合在训练中反复切换;QLoRA 除外(训练期就 4-bit)。
- 蒸馏数据配比:合成推理轨迹(可验证领域,如数学/代码)建议占大头,但务必混入 10–30% 真实高质量数据防 model collapse。
- 能力验证顺序:先测通用基准(MMLU 类)保底,再测目标领域(如客服话术、代码补全),最后做安全/拒答抽检。
六、三类压缩方法对比表
| 维度 | 知识蒸馏 | 量化 | 剪枝 |
|---|---|---|---|
| 产出形态 | 一个全新的更小模型 | 原模型的低位宽版本 | 原模型的稀疏/精简版本 |
| 是否需要重训 | 通常是(训练学生) | PTQ 否 / QAT 是 | 通常配合少量再训练 |
| 推理加速来源 | 模型更小→FLOPs 更少 | 访存/带宽更低 | 参数更少→FLOPs 更少 |
| 典型压缩比 | 2–10× | 2× (INT8) ~ 4× (4-bit) | 1.5–4× |
| 硬件依赖 | 无(训练时需教师) | 低位宽算子(部分需专用) | 结构化剪枝无需特殊硬件 |
| 精度风险 | 受教师上限约束 | 低位宽噪声 | 删错结构导致能力塌陷 |
| 可逆性 | 不可(需重训) | PTQ 可逆 | 不可(删掉即丢) |
| 适合阶段 | 想换小模型架构时 | 部署上线压成本 | 结构性瘦身 |
经验法则:要彻底换小模型 → 蒸馏;要最快压显存、零改结构 → 量化;要同时降 FLOPs 和显存且能改结构 → 剪枝;三者往往叠加使用。
七、小结与实践建议
- 蒸馏是"换血":当你需要一个结构更小、可独立部署的学生模型,且手上有强教师或可调用 API,蒸馏(尤其是推理轨迹 SFT 蒸馏)是 2025–2026 性价比最高的路径。记得用 on-policy/验证器过滤缓解数据循环风险。
- 量化是"即刻见效":绝大多数部署场景第一步就是量化。服务端 W8A8/FP8 几乎无损,端侧 4-bit(AWQ/GPTQ/GGUF)是标配。优先选 AWQ 或 GGUF 的 Q4_K_M 平衡档。
- 剪枝是"结构性瘦身":当你受限于硬件、量化仍装不下时,用结构化剪枝(层删除)砍冗余,再蒸馏补精度。Sheared-Llama / Minitron 证明这条路省时省钱。
- 组合使用:真实"小模型工厂" = 教师合成数据 → 蒸馏 SFT → RLVR 补上限 → 量化/剪枝 → 部署。这条链路已是行业共识工艺。
- 永远做验证:压缩不是无损魔法。每次操作后都要跑困惑度 + 任务指标 + 人工抽检三件套,重点关注"平均不掉点但某些能力选择性崩塌"的情况(如长上下文、特定语言、代码)。

浙公网安备 33010602011771号