AI大模型应用开发之模型微调
模型微调 = 在“大模型已有能力”基础上,教它更符合你的业务预训练模型:大学毕业生岗位培训。
给新手看的「模型微调完整入门指南」
搞懂 LoRA / QLoRA 在干什么 → 分清 SFT / DPO → 会构建靠谱的数据集 → 能按步骤用 QLoRA 对 Llama-3 做一次 SFT 微调(业务向)
一、先给你一张“微调全景图”(一句话)
预训练模型
→(SFT:教它怎么回答)
→(DPO:教它偏好什么回答)
→ 业务可用模型
二、什么是模型微调?(新手版)
📌 一句话
模型微调 = 在“大模型已有能力”基础上,教它更符合你的业务
🌰 类比:
- 预训练模型:大学毕业生
- 微调:岗位培训
三、LoRA / QLoRA 是什么?(重点)
1️⃣ 为什么不能“直接微调全模型”?
Llama-3:
- 参数:几十亿
- 显存:炸裂
- 成本:很高
📌 所以我们要:
“少改参数,效果还不错”
2️⃣ LoRA 原理(通俗版)
📌 一句话
LoRA = 冻结原模型,只加“很小的可训练插件”
🌰 类比(强烈推荐)
- 原模型:一台复杂机器(不动)
- LoRA:外挂旋钮
- 你只拧旋钮,不拆机器
📌 LoRA 在干什么?
原来的权重矩阵:
W
LoRA 不改 W,而是加一个:
W + A × B
其中:
- A、B:很小的矩阵(可训练)
- 参数量:原来的 1%~2%
📌 口诀(必背):
原模型不动,小模块学习
3️⃣ QLoRA 是什么?(LoRA 的升级)
📌 一句话
QLoRA = LoRA + 4bit 量化,显存直接降一大半
QLoRA 做了两件事:
-
模型权重量化
- float16 → int4
-
仍然用 LoRA 训练小模块
📌 好处:
- 单卡就能微调 Llama-3
- 成本极低
📌 新手结论:
现在做微调,默认选 QLoRA
四、SFT / DPO 是什么?(一定要分清)
1️⃣ SFT(监督微调)
📌 一句话
SFT = 给“标准答案”,让模型学会“怎么答”
🌰 示例数据
{
"instruction": "解释什么是 Redis",
"output": "Redis 是一个基于内存的键值数据库..."
}
📌 特点:
- 简单
- 稳定
- 新手首选
2️⃣ DPO(偏好对齐)
📌 一句话
DPO = 告诉模型“哪个回答更好”
🌰 示例数据
{
"prompt": "解释什么是 Redis",
"chosen": "清晰、准确的回答",
"rejected": "含糊、错误的回答"
}
3️⃣ DPO vs RLHF(新手一定要知道)
| 对比 | RLHF | DPO |
|---|---|---|
| 是否需要奖励模型 | ✅ | ❌ |
| 训练复杂度 | 高 | 低 |
| 稳定性 | 一般 | 更稳 |
| 新手友好度 | ❌ | ✅ |
📌 新手结论:
DPO 是“平民版 RLHF”
五、如何构建“高质量微调数据集”?(非常重要)
1️⃣ 新手最容易犯的错
❌ 数据太少
❌ 问题太泛
❌ 答案像 ChatGPT 原样复制
❌ 没有业务针对性
2️⃣ 高质量数据的 4 个标准(必背)
✅ 标准 1:贴近真实业务
不是:
“什么是数据库?”
而是:
“在高并发场景下,为什么用 Redis?”
✅ 标准 2:问题具体、可执行
❌ “怎么优化系统?”
✅ “如何用 Redis 缓存降低接口延迟?”
✅ 标准 3:答案风格统一
例如:
- 面向新手
- 分点说明
- 不编造
✅ 标准 4:少而精
📌 经验值(SFT):
- 500~2000 条:明显有效
-
1 万:效果很好
3️⃣ 新手可用的数据来源
- 你自己的 FAQ
- 技术文档改写
- 人工生成(你 + ChatGPT)
📌 关键不是“多”,而是“准”
六、实战:用 QLoRA 对 Llama-3 做 SFT(新手流程)
以「企业内部技术助手」为例
🎯 目标场景
模型能用统一、专业、偏向公司技术栈的方式回答问题
1️⃣ 环境准备(一次即可)
pip install transformers datasets peft bitsandbytes accelerate
2️⃣ 准备 SFT 数据(示例)
[
{
"instruction": "公司为什么选择 Redis 而不是 MySQL 做缓存?",
"output": "在高并发场景下,Redis 基于内存..."
}
]
3️⃣ 加载 Llama-3 + QLoRA 配置
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig, get_peft_model
import torch
model_name = "meta-llama/Meta-Llama-3-8B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
load_in_4bit=True,
device_map="auto"
)
4️⃣ 配置 LoRA(核心)
lora_config = LoraConfig(
r=8,
lora_alpha=16,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
📌 你会看到:
可训练参数 < 2%
5️⃣ 开始 SFT 训练(示意)
from transformers import Trainer, TrainingArguments
training_args = TrainingArguments(
output_dir="./lora-llama3",
per_device_train_batch_size=2,
gradient_accumulation_steps=4,
num_train_epochs=3,
logging_steps=10,
save_steps=100
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset
)
trainer.train()
6️⃣ 推理效果
微调前:回答偏泛、像通用模型
微调后:风格统一、贴合公司技术
📌 这就是微调的价值
七、新手微调的正确学习顺序
1️⃣ 先 SFT
2️⃣ 再 LoRA
3️⃣ 再 QLoRA
4️⃣ 最后 DPO
📌 不要一口气全学完。
八、新手常见误区(一定要避)
❌ 数据不干净就训练
❌ 想靠 50 条数据“洗脑模型”
❌ 一上来就 RLHF
❌ 不评估就上线
九、终极新手记忆口诀(强烈建议背)
LoRA 改得少,
QLoRA 更省卡,
SFT 教怎么答,
DPO 教选哪个。
十、参考文档
Hugging Face 微调教程
《大模型微调实战》
有任何问题欢迎在评论区交流。
更多推荐


所有评论(0)