微调入门:什么是 Fine-tuning,什么时候需要它
前言
网上很多文章上来就教你跑微调代码,但很少讲清楚一个根本问题:你需不需要微调。
这篇文章先回答”什么时候需要微调”,再讲清楚微调的核心概念和方法,最后给出一个决策框架。
一、微调 vs RAG:什么时候选哪个
| RAG(检索增强) | 微调(Fine-tuning) | |
|---|---|---|
| 解决的问题 | 让模型知道它不知道的事实 | 让模型学会它不会的行为 |
| 典型场景 | “公司年假怎么请?” | “用公司客服特有的语气回复用户” |
| 数据需求 | 文档(PDF、TXT、网页等) | 几百到几万条”输入-输出”示例对 |
| 成本 | 低,不需要 GPU 训练 | 中到高,需要 GPU |
| 维护 | 文档更新即生效 | 需要重新训练 |
| 延迟 | 多了检索步骤,略慢 | 没有检索步骤,快 |
| 举例 | 产品手册问答、制度查询 | 特定风格的文案生成、领域分类、结构化提取 |
简单判断标准:
1 | 你的任务需要模型知道很多事实类信息? |
二、全量微调 vs LoRA vs QLoRA
全量微调(Full Fine-tuning)
更新模型的所有参数。效果最好,但对硬件要求极高。
以 7B 参数的模型为例,全量微调需要约 60-80GB 显存(用 AdamW 优化器,还要存梯度、优化器状态)。普通人的显卡(4090 24GB、4070 12GB)根本跑不了。
LoRA(Low-Rank Adaptation)
在原始模型旁边挂载小的可训练矩阵,训练时冻结原模型参数,只更新这些小矩阵。
1 | 原模型权重(冻结) + LoRA 矩阵(可训练) = 最终模型 |
QLoRA
LoRA + 把原模型量化到 4-bit。进一步降低显存需求。
1 | QLoRA 训练 7B 模型: |
三者的关系:
| 模型参数量 | 训练速度 | 效果 | |
|---|---|---|---|
| 全量微调 | 最多 | 最慢 | 最好(理论上) |
| LoRA | 极少(<1%) | 快 | 接近全量微调 |
| QLoRA | 极少(<1%) | 较快 | 略低于 LoRA,差距很小 |
结论:除非你有成百上千张 A100,否则 LoRA/QLoRA 就是你唯一实际可用的选择。好消息是它的效果通常也够用了。
三、微调的数据准备
数据格式
最常用的是 Alpaca(指令微调)格式:
1 | [ |
也支持更简单的对话格式(ShareGPT 格式):
1 | [ |
数据量多少才够
| 任务类型 | 最少数据量 | 推荐数据量 |
|---|---|---|
| 风格/格式调整 | 100~500 条 | 1000~3000 条 |
| 领域知识注入 | 500~2000 条 | 3000~10000 条 |
| 复杂推理任务 | 2000~5000 条 | 10000+ 条 |
数据质量比数量重要得多。1000 条精心标注的高质量数据,效果往往好于 10000 条随便爬的数据。
数据质量检查清单
- 每条 instruction 表述清晰,人看了知道该做什么
- output 格式一致,没有前半条是 JSON 后半条是 plain text
- 覆盖了预期的使用场景,没有明显遗漏
- 排除了明显错误的样本(标注错误、前后矛盾)
- 训练集和验证集不重叠
四、微调成本估算
以 QLoRA 微调 Qwen2.5-7B 为例,在 4090 24GB 上:
| 数据量 | 训练时间 | 电费(约) | 平台费用(AutoDL 4090) |
|---|---|---|---|
| 500 条 | ~20 分钟 | <1 元 | ~2 元 |
| 2000 条 | ~1.5 小时 | ~1 元 | ~5 元 |
| 5000 条 | ~4 小时 | ~2 元 | ~15 元 |
| 10000 条 | ~8 小时 | ~4 元 | ~30 元 |
省钱操作:
- 先用 500 条跑一轮,看效果趋势,效果好再加数据
- 使用云 GPU(AutoDL、恒源云)比自己买显卡划算
- 社区有很多预训练好的 LoRA 权重,找到合适的直接合并使用
五、什么时候不应该微调
- 需求是加知识:放文档用 RAG 就行,没必要微调
- 数据不够:少于 100 条高质量数据,微调效果很难保证
- 频繁变化的信息:比如每日更新的产品库存——微调跟不上变化速度
- 用更好的 prompt 就能解决:很多时候不是模型不行,是 prompt 没写好。先使劲优化 prompt,还不行再考虑微调
- 有现成的 API 能搞定:GPT-4o 加一个好的 system prompt 能解决大部分问题
六、决策流程
1 | 你要做什么? |
RAG 是快刀,微调是重剑。大多数实际需求用 RAG 加一个仔细设计的 prompt 就能解决。只有当你确实需要模型”学会一种新的做事方式”时,才上微调。
下一篇文章会讲具体怎么用 LLaMA-Factory 做 LoRA 微调。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 七月小站!