大模型微调入门——什么场景才该微调,LoRA 和全参怎么选

Day10|大模型微调入门——什么场景才该微调,LoRA 和全参怎么选
前言:90% 说要微调的人,其实都不该微调
上周有个读者在后台留了条挺长的消息。
"檀木,我们 RAG 上线三个月了,效果一直上不去。老板说别折腾检索了,让我去微调一个模型。可我连微调要多少张卡都不知道,该从哪下手?"
我盯着这条消息看了挺久。
不是不会答。是这句话里藏着一个特别普遍的误区——"效果不好 = 该微调了"。
我见过太多团队,prompt 没调明白、检索没做干净,一拍脑袋就上微调,烧了几万块 GPU 费,回头一看,效果还不如改两行 prompt。
所以这篇我不急着教你怎么调参。先帮你把两道选择题做对:
- 你的问题,到底该不该用微调解决?(vs RAG)
- 真该微调了,LoRA 和全参怎么选?
把这两题答对,你已经跑赢 80% 匆忙上微调的人。

PART 01:微调 vs RAG——先把这道选择题做对
很多人把微调和 RAG 当成二选一。这是第一个大坑。
它俩根本不是解决同一个问题的。
RAG 解决的是"知识":你的私有数据、公司文档、最新资讯——模型不知道的,现查现答,还能附来源。
微调解决的是"行为":让模型用你想要的风格说话、按固定格式输出、学会某个领域的推理套路。
一个管"知道什么",一个管"怎么说话"。
记住这个决策框架:
- 知识要频繁更新、要可溯源 → 用 RAG。文档改了重灌一遍就行,几秒钟。
- 输出风格/语气/格式固定、领域推理方式特殊 → 用 微调。比如让它永远用你们公司的法务口吻写合同条款。
- 两者可以叠加:先微调一个"懂行"的底座,再叠 RAG 注入实时知识。这才是企业里的成熟做法。
两个最常见的翻车现场:
翻车一:用微调塞知识。 把公司文档全喂进模型微调,指望它"记住"。结果知识一更新,又得重训一遍,烧钱且永远滞后。知识的活儿,就该交给 RAG。
翻车二:用 RAG 改风格。 检索做得再好,也改不了模型"说话的味儿"。你想让它简短干练,它偏给你长篇大论——这不是知识问题,是行为问题,RAG 管不着。
所以回到开头那位读者:RAG 效果上不去,第一反应不该是"换微调",而是先问"我的问题是知识问题还是行为问题"。 八成是检索或数据没弄干净(Day09 讲过),跟微调没关系。

PART 02:LoRA vs 全参微调——重武器里选哪把
好,假设你已经判断清楚:这事儿真该微调。那接下来选哪把枪?
全参微调(Full Fine-Tuning):更新模型的所有参数。
它的好处是效果上限高,坏处也明显——显存爆炸。一个 7B 模型全参微调,光优化器状态就要吃掉几十 G 显存,没几张 A100 别想。而且容易"灾难性遗忘":学了新任务,把老本事忘光了。
LoRA(Low-Rank Adaptation,低秩适配):这才是 2026 年普通人的主战场。
它的思路特别优雅——别动原模型,只在旁边"焊"两个小矩阵。
把权重更新写成:
W = W₀ + B·A
W₀是原模型权重,完全冻结,一个参数都不动B和A是两个很小的矩阵(比如 4096×8 和 8×4096),只训练它俩
为什么这么干管用?因为研究发现:模型权重的实际变化,"内在秩"很低。你不需要动全部几十亿参数,用两个小矩阵就能近似表达那个变化。
效果立竿见影:
- 可训练参数从几十亿降到几百万,不到总参数的 0.1%
- 一张消费级显卡(甚至 Mac)就能跑
- 效果逼近全参微调,多数场景差距可忽略
- 还能热切换:一个底座挂多个 LoRA,按需加载,像换皮肤一样
所以入门选谁,答案很清楚:LoRA。 除非你是大厂、有卡、追求极限效果,才考虑全参。

PART 03:最小可跑通的微调流程
理论说完,上手。最小闭环就三步:备数据 → 训练 → 评估。
第一步:备数据(指令微调格式)
微调不是随便喂文本,得整理成"指令—输出"对。最常见的是这种 JSON:
{"instruction": "把客服反馈分类", "input": "收到的货破了", "output": "物流破损投诉"}
{"instruction": "把客服反馈分类", "input": "App 一直闪退", "output": "功能Bug反馈"}
一个小提醒:几百条高质量数据,胜过几万条垃圾。先把数据洗干净(Day09 的功夫这儿用上了),别指望靠量堆出效果。
第二步:LoRA 训练(peft + transformers)
from transformers import AutoModelForCausalLM
from peft import LoraConfig, get_peft_model
from trl import SFTTrainer, SFTConfig
# 1. 加载基座模型(4bit 量化,省显存)
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen2.5-7B-Instruct", load_in_4bit=True, device_map="auto"
)
# 2. 挂 LoRA:只训练注入的低秩矩阵,原模型冻结
lora_config = LoraConfig(
r=8, lora_alpha=16, lora_dropout=0.05,
target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
task_type="CAUSAL_LM",
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# trainable params: 6M || all params: 7.6B || trainable%: 0.08%
# 3. 训练
trainer = SFTTrainer(
model=model,
train_dataset=ds,
args=SFTConfig(
output_dir="./lora-out",
per_device_train_batch_size=4,
num_train_epochs=3,
learning_rate=2e-4,
bf16=True,
),
)
trainer.train()
# 4. 合并导出(推理时不用再挂 LoRA)
merged = model.merge_and_unload()
merged.save_pretrained("./qwen2.5-7b-my-lora")
print_trainable_parameters() 那一行会告诉你:7.6B 参数里,只训了 0.08%。这就是 LoRA 省钱的秘密。
第三步:评估(别省这一步)
训练完先别急着上线。留一小撮没训过的数据,让模型跑一遍,看输出对不对。没有评估的微调,等于盲飞。
还有个省钱心法:从小处验证。先用 7B 量化模型 + 几百条数据 + LoRA 跑通整条链路,确认方向对了,再考虑加大投入。别一上来就全参 + 万级数据,那是烧钱比赛。
结尾:RAG 给模型补课,微调给模型塑形
盘点一下这篇的核心:
- 微调 vs RAG 不是二选一:RAG 管知识,微调管行为,先判断你的问题是哪一类
- 入门选 LoRA:冻结原模型、只训低秩矩阵,一张卡就能跑,效果逼近全参
- 最小闭环:备指令数据 → LoRA 训练 → 评估 → 合并导出
我见过最可惜的,是那些 RAG 都没玩明白、就冲去微调的团队。钱花了,问题还在。
RAG 给模型补课,微调给模型塑形——补错地方,越努力越跑偏。
工具是工具,先搞清楚你要解决什么问题,比学怎么用工具更重要。
互动时间:你现在手头的 AI 项目,卡在"知识"还是"行为"上?是 RAG 检不准,还是模型说话味儿不对?评论区说说,我帮你判断该不该上微调。
下一篇 Day11 预告:微调的数据到底怎么准备——几百条高质量数据怎么挑、怎么标注、怎么避免把模型教坏。关注小刘檀木,不错过每一篇。
— END —
小刘檀木 · 帮普通人把 AI 学进简历
更多推荐




所有评论(0)