跳到主要内容

模型微调与模型蒸馏 — 概念、方法与选型

· 阅读需 6 分钟

微调和蒸馏是聊开源模型时绕不开的两个词,但经常被混为一谈。一句话区分:微调改变「模型会什么」,蒸馏改变「模型有多大」——微调是拿你的数据继续训练,让模型适配你的任务;蒸馏是让大模型当老师,把能力压缩进小模型。本文讲清两者的本质、方法和选型。

一、模型微调:让基座模型「听话」​

基座模型只会续写​

预训练模型(Base 模型)本质是一个超强的续写器:你给它一句「写一封请假邮件」,它大概率会继续编后面的字,而不是按你的指令输出。让它变得「听话」需要两个阶段:

  1. 指令微调(SFT):用「指令-回答」对数据训练,学会对话格式。这是绝大多数微调的入口
  2. 对齐(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 官方随后做了一次教科书级的黑盒蒸馏:

  1. 用 R1 生成约 80 万条带思维链的推理数据(数学、代码、逻辑)
  2. 用这批数据对 Qwen2.5-7B/14B/32B 和 Llama 系列做 SFT
  3. 产物 R1-Distill-Qwen-7B 等模型,数学/代码能力碾压同尺寸模型,接近大模型水平

注意这里的关键:R1-Distill 系列本质是「蒸馏数据 + 微调小模型」的组合拳——蒸馏不是魔法,它生产的是高质量数据,最终落地的动作还是微调。

三、对比表​

维度微调蒸馏
核心目标让模型适配任务/领域让模型变小变便宜
数据来源标注/整理的任务数据教师模型输出(合成数据)
主要成本训练算力教师推理成本 + 训练算力
产物规模与原模型相同更小(通常 7B 以下)
典型场景领域助手、风格化产品端侧、高并发、成本敏感
效果上限取决于数据质量和模型容量取决于教师能力(不会超过教师)

四、实际选型:先问三个问题​

  1. 模型能力不够? → 微调(或换更大模型/更强基座)
  2. 模型太贵/太慢/太大? → 量化优先(量化实战指南),还不够再蒸馏
  3. 能不能组合? → 能,而且常见:大模型蒸馏出数据 → 小模型微调(R1-Distill 路径),或者微调好的大模型再蒸馏给端侧小模型

一个实用的工程直觉:

任务数据充足 + 要领域能力 → 微调(LoRA 起步)
部署成本敏感 + 要小模型 → 蒸馏(黑盒采样 → SFT)
数据少 + 模型已够用 → 都别做,RAG + Prompt

五、总结​

微调和蒸馏不是二选一的对立方案,而是流水线上的两道工序:蒸馏负责「造数据」,微调负责「学数据」。理解这一点,就不会被各种名词绕晕——看到 Distill 后缀的模型,本质是「用大模型合成数据微调出来的小模型」;看到 LoRA/QLoRA,本质是「用极小代价让现有模型适配你的任务」。

相关阅读:LoRA/QLoRA 参数高效微调实战、GRPO 对齐训练演进、LLM 量化生产指南、开源 LLM 部署方案全景