模型蒸馏 vs 微调——两个 80 分,一个 120 分

“我想让模型懂我的业务”——这是大多数 AI 项目第一步。蒸馏 vs 微调,选错了浪费 10 倍成本。

两个概念的清晰区分

蒸馏(Distillation)

让小模型学大模型的行为。

  • 教师:大模型(GPT-4o、Claude)
  • 学生:小模型(自己训练的 7B/13B)
  • 过程:用大模型生成数据,训练小模型模仿
  • 目的:用小模型达到大模型 90%+ 效果,成本降 10 倍

微调(Fine-tuning)

让模型学特定知识或风格。

  • 基础:已有模型(GPT-4o、Llama、Qwen)
  • 过程:用特定数据集继续训练
  • 目的:让模型”专业”——懂医疗、法律、企业内部术语

关键区别

维度 蒸馏 微调
目的 缩小成本 增加专业能力
数据来源 大模型生成 业务数据
改变的是什么 模型规模 模型知识/风格
典型场景 通用 Agent、成本敏感 垂直行业、企业内部

蒸馏:什么时候用

适合场景

  1. 通用任务 + 成本敏感

    • 客服机器人、内容审核、简单分类
    • 用大模型标注几万条数据,训一个 7B 小模型
    • 推理成本降 10-20 倍
  2. 离线批量任务

    • 文档摘要、报告生成、数据清洗
    • 用大模型生成高质量数据,小模型批量跑
  3. 端侧部署

    • 手机端、嵌入式设备
    • 必须用小模型,蒸馏是唯一路径

不适合场景

  • 需要强推理(复杂数学、规划)
  • 需要多轮对话(蒸馏损失上下文能力)
  • 需要最新知识(小模型知识截止更早)

微调:什么时候用

适合场景

  1. 垂直行业知识

    • 医疗、法律、金融——专业术语多
    • 通用模型不懂”POCT”、”靶向治疗”
    • 用专业语料微调,效果立竿见影
  2. 特定输出格式

    • 你的产品需要固定 JSON schema
    • 微调比 Prompt 稳得多
  3. 企业内部知识

    • 公司产品手册、内部流程
    • 不能放公网(安全),只能本地微调

不适合场景

  • 知识更新频繁(微调成本高)
  • 数据量太少(< 1000 条,效果差)
  • 通用对话(微调反而会”窄化”模型)

微调的几种方法

1. Full Fine-tuning(全量微调)

所有参数都参与训练。

  • 优点:效果上限最高
  • 缺点:成本极高(7B 模型微调要 80G+ 显存)
  • 适用:有钱 + 数据量大

2. LoRA(Low-Rank Adaptation)

只训练少量参数,冻结原模型。

  • 原理:在每层加”低秩矩阵”,只训这些矩阵
  • 优点:显存需求降到 1/10
  • 缺点:效果略逊于全量
1
2
3
4
5
6
7
8
9
from peft import LoraConfig, get_peft_model

config = LoraConfig(
r=8, # 低秩矩阵的秩
lora_alpha=32, # 缩放因子
target_modules=["q_proj", "v_proj"], # 应用到注意力层
lora_dropout=0.05
)
model = get_peft_model(base_model, config)

LoRA 是目前最主流的微调方法。

3. QLoRA(Quantized LoRA)

4-bit 量化 + LoRA。

  • 基础模型量化到 4-bit(显存再降一半)
  • LoRA 矩阵保持 FP16
  • 7B 模型微调只需 24G 显存

QLoRA 是个人/小团队的最优解。

蒸馏的工程实践

流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1. 用大模型标注数据
- 输入:业务问题
- 输出:大模型的标准答案

2. 数据清洗
- 过滤低质量
- 去重
- 平衡类别

3. 训练小模型
- 基础模型:Qwen-7B / Llama-3-8B
- 训练框架:LoRA / 全量

4. 评估
- 测试集对比大模型
- 目标:达到大模型 90%+ 效果

我的蒸馏实战经验

我做的一个客服 Agent:

  • 数据:5000 条对话(Q&A)
  • 教师:GPT-4o
  • 学生:Qwen-7B + LoRA
  • 训练:2 小时(A100)
  • 效果:达到 GPT-4o 92% 的对话质量
  • 推理成本:降 15 倍

值得做吗? 值得——一个月省下 $3000+。

微调的工程实践

数据准备

微调的核心是数据,不是模型。

数据要求:

  • 数量:至少 1000 条,理想 5000+
  • 质量:高质量比数量更重要
  • 格式:JSONL,每行 {"prompt": ..., "response": ...}

数据合成

真实业务数据不够时,用 GPT-4o 合成:

  • 提供 100 条真实数据作为”种子”
  • 让 GPT-4o 生成类似的 5000 条
  • 人工 review 200 条做质量把关

训练监控

1
2
3
4
5
6
7
8
9
10
11
from transformers import Trainer

trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_data,
eval_dataset=eval_data,
callbacks=[
EarlyStoppingCallback(early_stopping_patience=3)
]
)

关键监控:

  • training loss(应该稳步下降)
  • eval loss(应该跟着下降,不能涨)
  • 几个真实业务样本的人工评估

蒸馏 vs 微调:实际怎么选

决策树

1
2
3
4
5
6
7
你的需求是什么?
├─ 通用任务,想省钱 → 蒸馏
├─ 专业领域知识 → 微调
├─ 特定输出格式 → 微调
├─ 端侧部署 → 蒸馏
├─ 多轮对话 → 蒸馏(微调会破坏对话能力)
└─ 复杂推理 → 都不要,直接用大模型

成本对比

方案 训练成本 推理成本/1K Token 适用
直接调 GPT-4o $0 $0.01 临时验证
微调 GPT-4o-mini $50 $0.0003 垂直领域
蒸馏 7B 自部署 $200 $0.0001 高频通用
微调 7B LoRA $50 $0.0001 垂直+自部署

几个坑

坑 1:数据太少硬上微调

100 条数据微调 = 基本没效果(过拟合)。

至少 1000 条才值得做。

坑 2:用蒸馏做”专业知识”

蒸馏是”模仿行为”,不是”灌输知识”——专业知识必须微调。

坑 3:微调后忘了基模型能力

Full Fine-tuning 容易”灾难性遗忘”——微调后模型丧失了通用能力。

LoRA/QLoRA 保留基模型能力更好。

坑 4:以为微调一次就完事

模型效果会”漂移”:

  • 业务变化 → 数据变化 → 重新微调
  • 建议:季度更新一次

写在最后

蒸馏和微调是 AI 工程化的两个核心武器——但用错地方就成废铁。

简单记:

  • 蒸馏:省钱、通用、模仿
  • 微调:专业、垂直、改造

蒸馏和微调不是替代关系——是互补关系。好的 AI 系统,常常是”大模型微调 + 小模型蒸馏”配合。