本节最大的价值不是教你微调,而是劝你别乱微调。多数情况下,Prompt + RAG 已经够用。
LESSON · 07
什么时候 该微调?
微调与训练:成本、效果、决策。
强调:大多数情况不该微调。Prompt → RAG → 微调 → 预训练,按这个顺序考虑。
大多数 情况不该
Prompt → RAG → 微调 → 预训练,按这个顺序考虑。
决策树:缺知识 → RAG;缺风格 → 微调;缺能力 → 大概率得换模型,不是微调。
决策树
问题是 提示不到位 ?→ 改 Prompt
问题是 缺少知识 ?→ 加 RAG
问题是 风格 / 格式 / 领域语言 ?→ 微调
问题是 整个能力缺失 ?→ 预训练(罕见)
微调不教知识,只改"风格倾向"
全参 vs LoRA 的本质:要不要更新所有权重。70B 全参微调需要 1TB+ 显存,普通团队做不起。
全参 vs LoRA
全参微调
更新所有权重
显存爆炸(70B 需 1TB+)
效果上限高
代价昂贵
VS
LoRA
只训练低秩矩阵
参数量减少 10000×
消费级显卡可跑
效果接近全参
LoRA 核心想法:大模型权重的'调整量'是低秩的,所以训一个小矩阵就行。
LoRA 核心想法
大模型权重的"调整量"是低秩的。
讲一遍数学:原始 d×d 拆成 d×r 和 r×d 两个小矩阵,r=8 就能减 250 倍参数。
lora math
原始权重: W ∈ R^(d × d) (d=4096, 参数 ≈ 16M)
LoRA 改造:
W' = W + ΔW
ΔW = B · A B ∈ R^(d × r), A ∈ R^(r × d)
通常 r = 8 / 16 / 64
→ 训练参数: d × r + r × d = 2 d r
→ 当 r = 8: 16M → 65K, 减少 250 倍
QLoRA 把存储压到 4-bit,加上 LoRA,单张 24GB 显卡能微调 33B 模型。这是 2023 年最大的工程突破之一。
QLoRA · 4-bit 量化 + LoRA
原模型权重压到 4-bit 存储
前向时反量化,反向只更新 LoRA 部分
单张 24GB 显卡微调 33B 模型
效果几乎无损
PEFT 全家桶:LoRA 是工业主流,其他用得少但也要知道名字。
PEFT 全家桶
LoRA / QLoRA :业界主流
Prefix Tuning :在前缀加可学向量
P-Tuning :可学的"软"提示词
Adapter :在层间插入小模块
没有银弹,按场景选
指令微调数据:1k 条精标 > 10w 条粗标。LIMA 论文证明了'Less is More'。
指令微调数据格式
三段式 :instruction / input / output
对话式 :messages: [system, user, assistant]
规模 :1k 条精标 > 10w 条粗标
多样性 :覆盖各类任务和长度
"Less is More" — LIMA 论文核心结论
DPO 取代 RLHF 是大趋势。数据格式 (prompt, chosen, rejected) 三元组,训练简单稳定。
DPO · 直接偏好优化
RLHF 复杂:要训奖励模型 + PPO
DPO 直接用偏好对训练,简单稳定
数据:(prompt, chosen, rejected)
已成为主流偏好对齐方法
变体:IPO / KTO / ORPO
算力估算给个体感:7B QLoRA 一张 4090 几小时;70B QLoRA 两张 A100 一天起。云成本几十到几千美元。
算力估算(粗略)
7B 全参 · 8×A100 80GB · 几小时-几天
7B QLoRA · 1×4090 24GB · 几小时
70B QLoRA · 2×A100 80GB · 一天起
云成本 · 几十到几千美元一次
工具链:中文社区 LLaMA-Factory 主流;Axolotl 工业化;Unsloth 速度快。下一课多模态。
工具链
LLaMA-Factory · 中文社区主流,零代码
Axolotl · YAML 驱动,工业化
Unsloth · 速度快 2-5×,显存省 50%
HF TRL · 官方 SFT/DPO 库
Unsloth 是目前最快的 QLoRA 微调框架,Google Colab 免费 T4 即可跑。这段代码展示完整流程:加载量化模型 → 添加 LoRA → 训练。实际项目需要准备 dataset 和配置 SFTTrainer。
5 分钟 QLoRA 体验
# pip install unsloth
from unsloth import FastLanguageModel
import torch
# 加载 4bit 量化模型
model, tokenizer = FastLanguageModel.from_pretrained(
"unsloth/Qwen2.5-7B-bnb-4bit",
max_seq_length=2048,
load_in_4bit=True,
)
# 添加 LoRA adapter
model = FastLanguageModel.get_peft_model(model, r=16, lora_alpha=16)
# 训练(简化版,实际需要 dataset + trainer)
# from trl import SFTTrainer
# trainer = SFTTrainer(model=model, train_dataset=ds, ...)
# trainer.train()
# Google Colab 免费 T4 即可运行
# 链接: https://colab.research.google.com/drive/1Ys44kVvmeZtnICzWz0xgpRnrIOjZAuxp
本课收获
何时不该微调
LoRA / QLoRA
PEFT 家族
DPO 对齐
数据质量 > 数量
工具链
下一课 · 多模态 AI:AI 长出眼睛和耳朵