模型微调与模型蒸馏 — 概念、方法与选型
微调和蒸馏是聊开源模型时绕不开的两个词,但经常被混为一谈。一句话区分:微调改变「模型会什么」,蒸馏改变「模型有多大」——微调是拿你的数据继续训练,让模型适配你的任务;蒸馏是让大模型当老师,把能力压缩进小模型。本文讲清两者的本质、方法和选型。
一、模型微调:让基座模型「听话」
基座模型只会续写
预训练模型(Base 模型)本质是一个超强的续写器:你给它一句「写一封请假邮件」,它大概率会继续编后面的字,而不是按你的指令输出。让它变得「听话」需要两个阶段:
- 指令微调(SFT):用「指令-回答」对数据训练,学会对话格式。这是绝大多数微调的入口
- 对齐(Alignment):用 RLHF / DPO / GRPO 等让模型学会「人类偏好」——不跑题、不胡说、拒绝有害请求。对齐训练演进见这篇文章
微调解决什么问题
- 领域适配:医疗、法律、代码、客服话术——让模型懂你的领域
- 格式/风格控制:JSON 输出、固定语气、特定产品文案风格
- 私有知识注入:公司内部规范、产品文档(数据量大时比 RAG 靠谱)
全参微调 vs LoRA
| 方式 | 显存 | 数据需求 | 适用 |
|---|---|---|---|
| 全参微调(FFT) | 极高(7B 需 60G+) | 十万级 | 数据多、算力足 |
| LoRA | 低(7B 约 12-16G) | 千级起步 | 消费级显卡首选 |
| QLoRA(4bit 量化底座) | 极低(7B 约 8G) | 千级起步 | 单卡跑一切 |
LoRA 只训练插入的低秩矩阵(参数量约 0.1%),效果接近全参。机制和踩坑见LoRA/QLoRA 参数高效微调实战,这里给一个最小可跑示例(Unsloth 版,QLoRA):
from unsloth import FastLanguageModel
model, tokenizer = FastLanguageModel.from_pretrained(
"unsloth/Qwen2.5-7B-bnb-4bit", # 4bit 量化底座
)
model = FastLanguageModel.get_peft_model(
model, r=16, lora_alpha=16,
target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
)
# 然后用你的 (指令, 回答) 数据集走标准 SFT 训练循环
# model.save_pretrained("my-finetuned-lora") # 保存 adapter
重要判断:什么时候别微调
- 知识型问题 → 优先 RAG(检索增强),微调不适合注入零散知识
- 简单指令 → 优先 Prompt 工程,改提示词比训练便宜几个数量级
- 只有几百条数据 → 先考虑 Few-shot,别浪费算力
二、模型蒸馏:大模型教小模型
为什么需要蒸馏
大模型能力强的代价是贵、慢、吃显存。蒸馏的目标:让小模型在特定能力上逼近大模型,部署成本降一个量级(端侧、高并发、按量计费的场景最值)。
三种蒸馏方式
1. 白盒蒸馏(经典 KD):教师模型输出 logits,用温度 T 软化后作为「软标签」,让学生模型的分布逼近教师。需要访问教师模型的 logits(同框架内做),效果好但耦合深。
2. 黑盒蒸馏(当前工业主流):只调用教师模型的 API/接口,采样它的输出文本,组成数据集。不需要任何内部访问,最灵活——本质是「用大模型合成高质量训练数据」。
3. 推理/CoT 蒸馏:专门采样教师的思维链(Chain-of-Thought)输出,让小模型学会「先推理再回答」。数学、代码类任务收益最大。
经典案例:DeepSeek-R1 蒸馏
R1 用强化学习练出了极强的推理能力,DeepSeek 官方随后做了一次教科书级的黑盒蒸馏:
- 用 R1 生成约 80 万条带思维链的推理数据(数学、代码、逻辑)
- 用这批数据对 Qwen2.5-7B/14B/32B 和 Llama 系列做 SFT
- 产物
R1-Distill-Qwen-7B等模型,数学/代码能力碾压同尺寸模型,接近大模型水平
注意这里的关键:R1-Distill 系列本质是「蒸馏数据 + 微调小模型」的组合拳——蒸馏不是魔法,它生产的是高质量数据,最终落地的动作还是微调。
三、对比表
| 维度 | 微调 | 蒸馏 |
|---|---|---|
| 核心目标 | 让模型适配任务/领域 | 让模型变小变便宜 |
| 数据来源 | 标注/整理的任务数据 | 教师模型输出(合成数据) |
| 主要成本 | 训练算力 | 教师推理成本 + 训练算力 |
| 产物规模 | 与原模型相同 | 更小(通常 7B 以下) |
| 典型场景 | 领域助手、风格化产品 | 端侧、高并发、成本敏感 |
| 效果上限 | 取决于数据质量和模型容量 | 取决于教师能力(不会超过教师) |
四、实际选型:先问三个问题
- 模型能力不够? → 微调(或换更大模型/更强基座)
- 模型太贵/太慢/太大? → 量化优先(量化实战指南),还不够再蒸馏
- 能不能组合? → 能,而且常见:大模型蒸馏出数据 → 小模型微调(R1-Distill 路径),或者微调好的大模型再蒸馏给端侧小模型
一个实用的工程直觉:
任务数据充足 + 要领域能力 → 微调(LoRA 起步)
部署成本敏感 + 要小模型 → 蒸馏(黑盒采样 → SFT)
数据少 + 模型已够用 → 都别做,RAG + Prompt
五、总结
微调和蒸馏不是二选一的对立方案,而是流水线上的两道工序:蒸馏负责「造数据」,微调负责「学数据」。理解这一点,就不会被各种名词绕晕——看到 Distill 后缀的模型,本质是「用大模型合成数据微调出来的小模型」;看到 LoRA/QLoRA,本质是「用极小代价让现有模型适配你的任务」。
相关阅读:LoRA/QLoRA 参数高效微调实战、GRPO 对齐训练演进、LLM 量化生产指南、开源 LLM 部署方案全景