跳转到内容

LoRA 微调教程:用 Llama-Factory 在消费级 GPU 微调大模型

学完这一节,你能:

  • 理解 LoRA 为什么能在消费级 GPU 上微调 7B 模型,而且能用“贴便签”一句话讲明白
  • Llama-Factory 跑一次完整微调流程,且每一步都说得出“这步在干嘛”
  • 知道什么时候该微调、什么时候坚决不该——记住“先食疗、再运动、最后才手术”的顺序

⚠️ 先说结论:90% 的场景别微调

Section titled “⚠️ 先说结论:90% 的场景别微调”

这一节标着“进阶,可选”,我不是在客套——FDE 在现场 90% 的情况,用 RAG + Prompt Engineering 就够了。微调是最后手段,先别想它。

为什么要这么强调?因为新手最容易犯的错就是“一上来就想微调”。这里给你一棵决策树,用“治病”打比方,你按顺序问自己:

先试什么 治病的类比 在 AI 里是啥 成本
1. 先试食疗 改善饮食作息,小毛病先调养 Prompt 调优(改几句指令) 极低
2. 再试运动 加强锻炼,增强体质 RAG(给模型配资料库)
3. 还不行试理疗 找理疗师针对性调理 Few-shot(给几个示例)
4. 最后才手术 病入膏肓,非动刀不可 微调 高(GPU+数据)

回到类比:治病不会一上来就开刀。先食疗(改 Prompt:把“翻译一下”改成“把这句话翻译成英文,只输出译文”)——大多数小毛病这么一调就好了。食疗不行再运动(上 RAG:给模型配个资料库)——需要知识补充时这招最灵。还不行再理疗(上 Few-shot:给几个范例让它照着学)——需要模仿风格时用。只有这三招全试过都不行,而且你手里有 1000+ 条高质量标注数据,才考虑手术(微调)

该微调的真实信号:你已经认真试过 RAG + Prompt + Few-shot,效果仍不达标,且你有 1000-10000 条高质量标注数据。两个条件缺一不可——没有数据,微调无从谈起;没试过前几招,微调就是浪费 GPU 钱。

LoRA = 不重印整本书,只在关键页贴小便签。

要理解 LoRA,先得理解什么是“全参数微调”:

  • 全参数微调 = 把整本书重新印刷一遍。书里每一个字(参数)都要改一遍——又贵、又慢、还要专业印刷厂(大显存 GPU)。一本 7B 的“书”有 70 亿个字,全改一遍要几十上百 GB 显存,普通人玩不起。
  • LoRA = 原书一个字不改,只在几个关键页贴几张小便签,记着“这一页这个规则要稍微变一下”。书还是那本书,但读到关键页时看书 + 看便签一起读。

回到类比:LoRA 的妙处就是——原文不动,只加便签。推理时模型“读原文 + 看便签”,效果接近把书重印,但只训练了 0.1% 的内容(便签上的字),所以单卡 8GB 显存就能跑 7B 模型。这就是 LoRA 能在消费级 GPU 上跑的秘密。

LoRA 的全名你不用记,记住一件事:冻结原模型所有参数,只额外训练一对很小的“低秩矩阵”,推理时把它叠加到原模型上。

那什么是**“低秩矩阵”**?这是本节唯一的硬词,我用便签讲透:

回到类比:所谓“低秩矩阵”,就是那张小便签。“低秩”的意思是——它很小。一本书有 70 亿个字(参数),但你不用改 70 亿个,研究发现改其中很小一部分(就像只在几十页贴便签)就能达到接近重印的效果。这个“很小一部分”就是低秩矩阵——你可以理解为一张容量有限的便签纸

那便签到底多大?这就引出下一个关键概念——rank(秩)

rank=8 是什么意思?——便签有多大

Section titled “rank=8 是什么意思?——便签有多大”

在 Llama-Factory 里你会看到一个参数叫 rank(也叫 r),默认通常是 8。

回到类比:rank 就是便签的大小。数字越大,便签越大,能记的细节越多,但越贵(要训练的参数更多、显存吃得更多)。数字越小,便签越小,训练快但记不了多少东西。

实战经验:

  • rank=8:默认起步值,大多数任务够用。便签不大不小,稳。
  • rank=16 / 32:任务复杂、风格差异大时再加大。便签更大,记得多,但更贵。
  • rank=64 以上:基本没必要,除非你真的在搞大动作,不如直接考虑全参数微调。

新手建议:从 rank=8 开始,跑出来效果不好再加。别一上来就 64,那是烧钱。

微调要喂数据,数据长这样(叫 Alpaca 格式,最常见):

{"instruction": "把这句话翻译成英文", "input": "你好", "output": "Hello"}

三个字段,大白话翻译:

  • instruction:指令——你要模型干啥(“翻译成英文”)
  • input:输入——用户给了啥(“你好”)
  • output:标准答案——你希望模型输出啥(“Hello”)

回到类比:这就像给便签写范本——“遇到这种问题,标准答法是这种”。模型看了几千张这种便签,就学会了你的风格。准备 1000-10000 条这样的数据,质量比数量重要(垃圾数据教不出好模型)。

Llama-Factory 是目前最易用的微调工具,带 WebUI(网页界面),点点鼠标就能跑。下面每一步我都标了“这步在干嘛”。

Terminal window
# 这步在干嘛:把工具下载到本地(只需一次)
git clone https://github.com/hiyouga/Llama-Factory.git
cd Llama-Factory
# 这步在干嘛:安装工具(只需一次)。装的是这个工具自带的依赖
pip install -e ".[torch,metrics]"
# 这步在干嘛:启动网页界面(就像打开一个网页版的操作台)
llamafactory-cli webui

打开浏览器访问 WebUI 后,按这个顺序点(每步都有“这步在干嘛”):

WebUI 里的操作 这步在干嘛(用便签类比)
1. 选模型(如 Qwen2.5-7B / GLM-4-9B) 挑一本要改的书——选哪个底座模型
2. 上传数据集(你准备的 Alpaca jsonl) 准备你的便签内容——把 1000+ 条标注数据喂进去
3. 选 LoRA 训练(rank=8,epochs=3) 设便签大小和抄几遍——rank 是便签大小,epochs 是数据看几遍(看 3 遍通常够)
4. 开始训练(单卡约 2-4 小时) 让模型读便签,记下规则——这一步最耗时,去喝杯茶
5. 评估 + 合并 + 部署 考一下学得咋样,再把便签订进书里,最后上架

几个参数解释一下:

  • rank=8:便签大小(上面讲过),新手用 8。
  • epochs=3:把全部数据看几遍。3 遍是稳妥值——看得太少学不会,看太多会“死记硬背”(过拟合),反而变笨。
  • 单卡约 2-4 小时:这就是 LoRA 的威力——一张消费级显卡(8GB 显存),两三个小时跑完。要是全参数微调,这得几天 + 专业机房。

回到类比:整个流程就是——挑一本书(Qwen2.5),贴满你的便签(数据),让模型反复读几遍(epochs),最后把便签订进书里(合并),上架用。Llama-Factory 把这些步骤全做成了网页按钮,点点鼠标就行,不用敲一堆命令。

1. 优先级排序:Prompt、RAG、Few-shot、微调,该按什么顺序试?

用治病的顺序记:食疗 → 运动 → 理疗 → 手术

  1. Prompt 调优(食疗,改几句指令)
  2. RAG(运动,配资料库)
  3. Few-shot(理疗,给范例)
  4. 微调(手术,最后手段)

前三个 90% 场景够用。只有全试过都不行 + 有 1000+ 条标注数据,才动手术。

2. LoRA 为什么能在消费级 GPU 上微调 7B 模型?用"便签"讲明白。

全参数微调 = 把整本书(70 亿个字)重印一遍,要几十上百 GB 显存,玩不起。LoRA = 原书一个字不改,只在关键页贴小便签,只训练那 0.1% 的便签内容。所以单卡 8GB 显存就能跑 7B 模型。推理时模型“读原文 + 看便签”,效果接近重印全书。

3. rank=8 是什么意思?新手该用多少?

rank便签的大小。数字越大,便签越大,记的细节越多,但越贵(显存吃得更多)。数字越小,便签越小,训练快但记不了多少。新手从 rank=8 起步,效果不好再加到 16 / 32,别一上来就 64。

问题 原因 解决
一上来就想微调 没试 RAG/Prompt 按“食疗→运动→理疗→手术”的顺序,前三招先各试一遍
微调后效果反而变差 数据太少或太脏 至少 1000 条高质量标注,质量比数量重要
显存不够 rank 开太大或没开 LoRA 确认选了 LoRA 模式,rank 用 8,别开全参数
训练完模型“死记硬背” epochs 太多 epochs=3 起步,看着验证集分数,掉了就停

三句话回顾:

  1. 90% 场景别微调——记住“食疗(Prompt)→运动(RAG)→理疗(Few-shot)→手术(微调)“的顺序。
  2. LoRA 的秘密 = 原书不改,只贴便签——所以消费级 GPU 也能跑 7B 模型。
  3. rank=8 是便签大小,新手从这里起步;Llama-Factory 是最易用的微调工具,网页点点就行。

下一节:客户访谈——FDE 怎么跟客户聊,挖出他们真正想要什么(而不是他们嘴上说的)。


← 上一节:评估工具 | 下一节:客户访谈