1. 微调是什么:为什么需要它
这是什么:微调(fine-tuning)= 在已经训好的大模型上「再训一小会儿」,让它学会你的任务、格式和语气。
为什么用:通用模型什么都会一点,但谁都不专。提示词(prompt,临时交代任务的文字)越写越长又贵还不稳,微调是把能力直接刻进模型权重,一次训练长期受用。
如何用:本章先摆清微调在训练流程里的位置,再对比「提示词 / 微调 / RAG」怎么选,最后认识 LoRA 这个省显存的关键角色。
1.1 模型的三个阶段
一个能对话的大模型,训练上大致分三段,LLaMA-Factory 覆盖的正是后两段:
| 阶段 | 干什么 | 典型规模 | LLaMA-Factory 支持 |
|---|---|---|---|
| 预训练(pre-training) | 读海量语料,学语言和世界知识 | 万亿 token 级 | ✅ stage: pt |
| 指令微调(SFT,supervised fine-tuning) | 学「按指令回答」,对齐人类意图 | 百万级样本 | ✅ stage: sft |
| 偏好对齐(preference alignment) | 学会「哪个回答更好」 | 万级偏好对 | ✅ stage: dpo / kto / ppo |
预训练是「动辄上万亿 token 的脏活」,个人和小团队根本做不了。我们做的是后两段:拿一个现成的开源模型(base 或 instruct),用自己领域的数据再喂一遍。
1.2 提示词、微调、RAG 怎么选
这三样经常被混为一谈,其实分工很清楚:
| 你的需求 | 用提示词 | 用 RAG(检索增强) | 用微调 |
|---|---|---|---|
| 让模型懂你的专有名词 | 勉强,越写越长 | ✅ 塞进知识库 | ✅ 训练数据 |
| 让模型输出固定 JSON 格式 | 能,不稳 | ❌ 帮不上 | ✅ 效果最好 |
| 让模型学一种表达风格 | 勉强 | ❌ | ✅ 效果最好 |
| 让模型知道「今天发生了什么」 | ❌ 知识有截止日期 | ✅ 最合适 | ❌ 训练完就过时 |
| 每次都要换任务 | ✅ 最灵活 | ✅ | ❌ 要重训 |
一句话记忆:RAG 管「它不知道的事实」,微调管「它做事的方式」。
1.3 LLaMA-Factory 是什么
LLaMA-Factory 是作者 hiyouga 做的开源微调框架,论文在 arXiv:2403.13372,标题是 Unified Efficient Fine-Tuning of 100+ LLMs——一句话概括就是「把 100 多种大模型的微调统一到一套配置里」。
它的价值不在于算法多新,而在于把脏活全包了:
同一个想法 → 一份 YAML 配置 → train / chat / export 三条命令
llamafactory-cli train examples/train_lora/qwen3_lora_sft.yaml
llamafactory-cli chat examples/inference/qwen3_lora_sft.yaml
llamafactory-cli export examples/merge_lora/qwen3_lora_sft.yaml
你会看到(示意):
[INFO] Fine-tuning method: LoRA
[INFO] Number of trainable parameters: 16,515,072
{'train_runtime': 418.3, 'train_loss': 0.9871}
新手可以直接用网页界面 llamafactory-cli webui(LLaMA Board,基于 Gradio)点着来,不用碰命令行。两种用法共用同一套配置逻辑。
1.4 LoRA:省显存的关键角色
LoRA(Low-Rank Adaptation,低秩适配)不改动原模型权重,而是给每一层额外挂一个很小的「补丁矩阵」:
原权重 W(冻结,不参与训练) + BA(新增,秩很小,参与训练)
因为只有小矩阵在更新,优化器状态(optimizer state)就少得离谱,显存从「全参」直接掉到「十几 GB」级别。QLoRA 则在此基础上把原权重也压成 4bit 量化,7B 模型的显存需求能压到 6GB 左右。
后面第 2 章会把这笔账算清楚,第 4 章会真的跑一次。
1.5 LLaMA-Factory 支持的训练方式
| 阶段 | 配置里的写法 | 说明 |
|---|---|---|
| 预训练 | stage: pt |
继续训练原始语料,学新知识 |
| 指令微调 | stage: sft |
最常用,本教程第 4 章 |
| 奖励建模 | stage: rm |
训一个「打分器」,给回答打好坏分 |
| PPO | stage: ppo |
强化学习,需要额外算力 |
| DPO | stage: dpo + pref_loss: sigmoid |
直接用偏好对训练,本教程第 5 章 |
| KTO | stage: kto |
只要「好/坏」标签,不需要成对 |
| ORPO | stage: dpo + pref_loss: orpo |
单模型一次训完,不用参考模型 |
| SimPO | stage: dpo + pref_loss: simpo |
DPO 简化版,去掉参考模型 |
动手改
- 找一个你每天都在用的场景(比如公司内部 FAQ),判断它该用提示词、RAG 还是微调,说出理由
- 搜一搜 LoRA 原始论文(arXiv:2106.09685),看看「低秩」在数学上到底低在哪
- 打开
llamafactory-cli help看看有哪些子命令,挑一个猜猜它是干嘛的
小结
- 微调 = 在预训练模型上再训一段,学任务、格式和风格;预训练我们做不了,SFT 和偏好对齐可以
- RAG 管「模型不知道的事实」,微调管「模型做事的方式」
- LLaMA-Factory 用一份 YAML 统一了 100+ 模型的微调,Web UI 和命令行都可用
- LoRA 只训练小补丁矩阵,QLoRA 再把底座压到 4bit,这是消费级显卡能微调的关键
- 训练方式有 pt / sft / rm / ppo / dpo / kto,ORPO 和 SimPO 是 DPO 的变体
下一章:环境搭建 🐸