文章目录
- 前言
- 一、什么是模型微调?
- 二、常见微调方式总览
- 三、Full Fine-tuning 全参数微调
- 优点
- 缺点
- 适合场景
- 四、LoRA 微调
- 优点
- 缺点
- 适合场景
- 推荐程度
- 五、QLoRA 微调
- 优点
- 缺点
- 适合场景
- 对 Intel Arc 显卡的情况
- 六、Freeze 微调
- 优点
- 缺点
- 适合场景
- 七、Prompt Tuning / Prefix Tuning / P-Tuning
- 常见方式
- 优点
- 缺点
- 适合场景
- 八、SFT 指令微调
- 多轮对话数据格式
- SFT 的作用
- 常见训练组合
- 九、DPO / ORPO / PPO 偏好优化
- 1. 常见偏好优化方法
- 2. 优点
- 3. 缺点
- 4. 适合场景
- 十、不同微调方式的区别总结
- 1. 从训练参数量看
- 2. 从显存需求看
- 3. 从效果上限看
- 4. 从入门难度看
前言
在学习大模型微调时,经常会看到很多名词:
- Full Fine-tuning
- LoRA
- QLoRA
- Freeze
- Prompt Tuning
- Prefix Tuning
- SFT
- DPO
- ORPO
- PPO
这些方式看起来都叫“微调”,但它们的训练成本、适用场景和效果差别很大。
本文用比较通俗的方式,整理一下目前大模型微调常见的几种方式,以及它们之间的区别。对于个人电脑用户,尤其是使用消费级显卡的用户,也会给出一些选择建议。
一、什么是模型微调?
大模型微调可以简单理解为:
在已有基础模型的能力之上,用自己的数据继续训练,让模型更适合某个任务、领域或回答风格。
比如基础模型本来已经会中文问答,但你希望它更像:
- 企业客服
- 法律助手
- 医疗问答助手
- 角色扮演模型
- 代码助手
- 固定格式输出助手
- 某个业务系统的问答机器人
这时候就可以通过微调,让模型更贴近你的需求。
二、常见微调方式总览
常见方式可以分为几类:
| 微调方式 | 是否训练全部参数 | 显存需求 | 入门难度 | 适合个人电脑 |
|---|---|---|---|---|
| Full Fine-tuning 全参数微调 | 是 | 极高 | 高 | 不推荐 |
| LoRA | 否,只训练少量 adapter 参数 | 较低 | 低 | 推荐 |
| QLoRA | 否,4bit 加载基础模型,只训练 LoRA | 更低 | 中等偏高 | NVIDIA 更合适 |
| Freeze 微调 | 否,只训练部分层 | 中等 | 中等 | 一般 |
| Prompt / Prefix Tuning | 否,只训练提示向量 | 很低 | 中等 | 可尝试 |
| DPO / ORPO / PPO | 偏好优化,不是普通 SFT | 中高 | 高 | 后期再学 |
三、Full Fine-tuning 全参数微调
Full Fine-tuning 是最传统的微调方式。
它会更新模型的全部参数。
比如一个 7B 模型有 70 亿参数,全参数微调就是这 70 亿参数都参与训练和更新。
优点
- 效果上限高
- 可以深度改变模型能力
- 适合大规模领域适配
- 适合有大量高质量数据的场景
缺点
- 显存需求极高
- 训练成本高
- 训练速度慢
- 容易把原模型能力训坏
- 对数据质量要求很高
适合场景
全参数微调更适合:
- 大公司
- 实验室
- 有多张高端 GPU 的团队
- 需要深度定制基础模型的项目
对于普通个人用户来说,一般不推荐从全参数微调开始。
四、LoRA 微调
LoRA 是目前个人用户最常用的大模型微调方式。
LoRA 的核心思想是:
不直接修改大模型原始参数,而是在模型部分层旁边增加一小部分可训练参数。
可以把它理解为:
原模型不大动,只训练一个外挂补丁。
训练完成后,通常会得到一个 LoRA adapter 文件,而不是一个完整的新模型。
优点
- 显存需求低很多
- 训练速度更快
- 训练产物小
- 可以保存多个不同 LoRA
- 不容易破坏原模型能力
- 非常适合个人学习和实验
缺点
- 效果上限通常低于全参数微调
- 不适合把模型训练成完全不同的能力体系
- 基础模型本身不会的东西,LoRA 不一定能学好
适合场景
LoRA 适合:
- 指令微调
- 中文问答风格优化
- 企业客服话术
- 角色扮演
- 固定格式输出
- 行业知识问答
- 小规模数据微调
推荐程度
对于个人用户,尤其是刚开始学习 LLaMA-Factory 的用户,LoRA 是最推荐的方式。
五、QLoRA 微调
QLoRA 可以看作是 LoRA 的省显存版本。
它的做法是:
用 4bit 量化方式加载基础模型,只训练 LoRA 参数。
也就是说:
模型主体被压缩成 4bit,外面再挂一个 LoRA adapter 进行训练。
优点
- 比普通 LoRA 更省显存
- 可以在较小显存上尝试更大的模型
- 适合 7B、14B 等模型的低成本微调
缺点
- 依赖量化库
- 很多方案依赖 CUDA 和 bitsandbytes
- 对非 NVIDIA 显卡兼容性不一定好
- 环境配置更容易踩坑
适合场景
QLoRA 比较适合:
- NVIDIA 显卡用户
- 显存有限但想训练更大模型的用户
- 已经熟悉 LoRA 训练流程的用户
对 Intel Arc 显卡的情况
如果使用 Intel Arc A770 这类显卡,需要注意:
- PyTorch 一般走 XPU 后端
- 常见 QLoRA 生态主要围绕 CUDA
- bitsandbytes 很多功能对 Intel Arc 不友好
- 新手不建议一上来就做 QLoRA
更稳的路线是先用普通 LoRA 跑通。
六、Freeze 微调
Freeze 微调是冻结大部分模型参数,只训练其中一部分层。
比如:
- 只训练最后几层
- 只训练输出层
- 冻结 embedding 和前面大部分 transformer 层
优点
- 比全参数微调省显存
- 比全参数训练更稳定一些
- 训练参数量更少
缺点
- 效果不一定比 LoRA 好
- 调参相对麻烦
- 在当前大模型微调生态中不如 LoRA 常用
适合场景
Freeze 更适合:
- 特定实验
- 小模型任务
- 分类任务
- 对模型结构比较熟悉的用户
对于大部分 LLM 微调任务,LoRA 更常用。
七、Prompt Tuning / Prefix Tuning / P-Tuning
这一类方法不是大量修改模型参数,而是训练一小段“软提示词”或“前缀向量”。
可以理解为:
不是直接教模型新知识,而是训练一个隐形提示词,让模型更容易进入某种任务状态。
常见方式
- Prompt Tuning
- Prefix Tuning
- P-Tuning
- P-Tuning v2
优点
- 参数量非常小
- 显存占用低
- 训练产物很小
- 适合轻量任务
缺点
- 效果通常不如 LoRA 稳定
- 对复杂任务适应能力有限
- 对提示设计和任务形式比较敏感
适合场景
这类方法适合:
- 简单分类任务
- 固定任务格式
- 研究实验
- 对资源要求很低的场景
对于普通大模型指令微调,LoRA 通常更实用。
八、SFT 指令微调
SFT 的全称是 Supervised Fine-Tuning,也就是监督微调。
这是大模型微调里最常见的训练阶段。
SFT 数据通常长这样:
{"instruction":"请解释什么是 LoRA 微调。","input":"","output":"LoRA 微调是一种低成本微调方法,它只训练少量额外参数,而不是更新整个大模型。"}多轮对话数据格式
除了单轮问答数据外,SFT 也常用多轮对话格式。
示例:
{"conversations":[{"from":"human","value":"你是谁?"},{"from":"gpt","value":"我是一个经过微调的中文助手。"}]}这种格式适合训练聊天助手、客服机器人、角色扮演模型等多轮对话场景。
SFT 的作用
SFT 主要用来教模型:
- 怎么回答问题
- 按什么格式回答
- 用什么风格回答
- 学习某类任务的输入输出模式
- 适应某个业务场景
简单来说,SFT 不是让模型从零开始学习语言,而是在已有基础模型能力之上,让模型更适合某个具体任务。
常见训练组合
实际使用时,经常会看到下面几种组合:
LoRA + SFT或者:
QLoRA + SFT这里需要注意:
- SFT 是训练目标
- LoRA / QLoRA 是训练方法
也就是说,SFT 决定“训练模型学什么”,LoRA / QLoRA 决定“用什么方式训练”。
九、DPO / ORPO / PPO 偏好优化
DPO、ORPO、PPO 这类方法通常不是入门阶段的普通微调,而是偏好对齐训练。
它们的目标不是简单教模型一个“标准答案”,而是让模型更偏向某种更好的回答。
比如给模型两种回答:
问题:请解释什么是机器学习? 回答 A:简洁、准确、结构清楚。 回答 B:啰嗦、含糊、有错误。训练时告诉模型:
A 比 B 更好经过训练后,模型之后就会更倾向生成类似回答 A 的内容。
1. 常见偏好优化方法
常见方法包括:
- DPO
- ORPO
- PPO
- KTO
- SimPO
其中 DPO 在当前大模型微调中比较常见,因为它相对 PPO 更容易训练,工程实现也更简单一些。
2. 优点
DPO / ORPO / PPO 这类方法的优点包括:
- 可以优化回答偏好
- 可以让模型更符合人类评价
- 可以改善啰嗦、跑题、拒答等问题
- 适合进一步对齐模型风格
例如,如果一个模型已经能回答问题,但回答太啰嗦、不够稳定,就可以用偏好优化继续调整。
3. 缺点
这类方法也有明显缺点:
- 数据准备更复杂
- 训练难度更高
- 通常要先有 SFT 模型
- 对训练稳定性要求更高
相比普通 SFT,偏好优化不仅需要问题和答案,还需要“哪个答案更好”的偏好数据。
4. 适合场景
DPO / ORPO 适合:
- 已经完成 SFT 后继续优化
- 有偏好数据集
- 希望模型回答更符合人类偏好
- 做模型对齐实验
如果是新手,不建议第一步就做 DPO。更推荐先把 LoRA + SFT 跑通,再学习偏好优化。
十、不同微调方式的区别总结
下面从几个角度对不同微调方式做一个简单对比。
1. 从训练参数量看
全参数微调 > Freeze > LoRA > QLoRA > Prompt Tuning全参数微调训练的参数最多,Prompt Tuning 训练的参数最少。
一般来说,训练参数越多,对显存和算力的要求也越高。
2. 从显存需求看
全参数微调最高 LoRA 较低 QLoRA 更低 Prompt Tuning 最低全参数微调需要保存和更新完整模型参数,因此显存需求最高。
LoRA 只训练少量额外参数,所以显存压力小很多。
QLoRA 进一步把基础模型量化成 4bit 加载,因此显存需求更低,但环境兼容性也更复杂。
3. 从效果上限看
全参数微调通常最高 LoRA 性价比最高 Prompt Tuning 较有限全参数微调的效果上限通常最高,但成本也最高。
LoRA 虽然不一定达到全参数微调的上限,但它在训练成本、显存占用和实际效果之间取得了很好的平衡,所以是个人用户最常用的方案。
4. 从入门难度看
LoRA 最适合新手 QLoRA 需要处理量化兼容问题 DPO / PPO 更适合进阶学习