LESSON · 07

什么时候
该
微调?

微调与训练:成本、效果、决策。

大多数
情况
不该

Prompt → RAG → 微调 → 预训练,按这个顺序考虑。

决策树

  • 问题是 提示不到位?→ 改 Prompt
  • 问题是 缺少知识?→ 加 RAG
  • 问题是 风格 / 格式 / 领域语言?→ 微调
  • 问题是 整个能力缺失?→ 预训练(罕见)
  • 微调不教知识,只改"风格倾向"

全参 vs LoRA

全参微调

  • 更新所有权重
  • 显存爆炸(70B 需 1TB+)
  • 效果上限高
  • 代价昂贵
VS

LoRA

  • 只训练低秩矩阵
  • 参数量减少 10000×
  • 消费级显卡可跑
  • 效果接近全参

LoRA
核心
想法

大模型权重的"调整量"是低秩的。

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

  • 原模型权重压到 4-bit 存储
  • 前向时反量化,反向只更新 LoRA 部分
  • 单张 24GB 显卡微调 33B 模型
  • 效果几乎无损

PEFT 全家桶

  • LoRA / QLoRA:业界主流
  • Prefix Tuning:在前缀加可学向量
  • P-Tuning:可学的"软"提示词
  • Adapter:在层间插入小模块
  • 没有银弹,按场景选

指令微调数据格式

  • 三段式:instruction / input / output
  • 对话式:messages: [system, user, assistant]
  • 规模:1k 条精标 > 10w 条粗标
  • 多样性:覆盖各类任务和长度
  • "Less is More" — LIMA 论文核心结论

DPO · 直接偏好优化

  • RLHF 复杂:要训奖励模型 + PPO
  • DPO 直接用偏好对训练,简单稳定
  • 数据:(prompt, chosen, rejected)
  • 已成为主流偏好对齐方法
  • 变体:IPO / KTO / ORPO

算力估算(粗略)

  • 7B 全参 · 8×A100 80GB · 几小时-几天
  • 7B QLoRA · 1×4090 24GB · 几小时
  • 70B QLoRA · 2×A100 80GB · 一天起
  • 云成本 · 几十到几千美元一次

工具链

  • LLaMA-Factory · 中文社区主流,零代码
  • Axolotl · YAML 驱动,工业化
  • Unsloth · 速度快 2-5×,显存省 50%
  • HF TRL · 官方 SFT/DPO 库

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 长出眼睛和耳朵