🐸 青蛙编程网
首页 / AI / 微调 LLaMA-Factory / 1. 微调是什么

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 简化版,去掉参考模型

动手改

  1. 找一个你每天都在用的场景(比如公司内部 FAQ),判断它该用提示词、RAG 还是微调,说出理由
  2. 搜一搜 LoRA 原始论文(arXiv:2106.09685),看看「低秩」在数学上到底低在哪
  3. 打开 llamafactory-cli help 看看有哪些子命令,挑一个猜猜它是干嘛的

小结

  • 微调 = 在预训练模型上再训一段,学任务、格式和风格;预训练我们做不了,SFT 和偏好对齐可以
  • RAG 管「模型不知道的事实」,微调管「模型做事的方式」
  • LLaMA-Factory 用一份 YAML 统一了 100+ 模型的微调,Web UI 和命令行都可用
  • LoRA 只训练小补丁矩阵,QLoRA 再把底座压到 4bit,这是消费级显卡能微调的关键
  • 训练方式有 pt / sft / rm / ppo / dpo / kto,ORPO 和 SimPO 是 DPO 的变体

下一章:环境搭建 🐸

📥 下载本章代码

ZIP 内含本章全部代码文件与说明,解压即用,与教程内容同步生成。