如何用 LoRA 微调一个专属模型
通用大模型什么都懂一点,但不一定贴合你的业务语气和格式。全量微调要改动几十亿参数、显存爆炸,而 LoRA 只训练极小一部分参数,一张消费级显卡就能微调。这篇教程用 Hugging Face 的 PEFT 库,带你完整走一遍 LoRA 微调流程。
LoRA 的原理
LoRA 冻结原模型权重,只在旁边加一对低秩小矩阵来学习”增量”:
graph LR
A[输入] --> B[原始权重W 冻结]
A --> C[低秩旁路 可训练]
B --> D[输出]
C --> D
训练时只更新这对小矩阵,参数量常降到原来的千分之一,效果却接近全量微调。
前置准备
- 一块显存 ≥ 16GB 的 GPU(7B 模型 + LoRA)
- Python 3.9+ 与 CUDA 环境
- 一份”指令→回答”格式的训练数据
步骤一:安装依赖
pip install transformers peft datasets accelerate torch |
步骤二:准备数据集
LoRA 指令微调常用 JSON 格式,每条含指令和期望回答:
[ |
数据质量比数量更重要,几十到几百条高质量样本就能看到效果。
步骤三:加载基座模型与分词器
from transformers import AutoModelForCausalLM, AutoTokenizer |
步骤四:配置 LoRA
用 PEFT 定义要把 LoRA 注入哪些模块:
from peft import LoraConfig, get_peft_model |
步骤五:开始训练
from transformers import TrainingArguments, Trainer |
步骤六:保存与合并
训练完保存 LoRA 权重,需要独立部署时再合并回基座模型:
model.save_pretrained("./lora-out") # 只存小矩阵,体积很小 |
步骤七:推理测试
from peft import PeftModel |
完整微调流程
graph TD
A[准备指令数据] --> B[加载基座模型]
B --> C[注入 LoRA 配置]
C --> D[训练小矩阵]
D --> E[保存 LoRA 权重]
E --> F[合并或直接加载推理]
常见问题
- 显存不足:减小 batch_size、降低 r,或改用 4bit 量化(QLoRA)
- 学不到东西:检查学习率(2e-4 常用)、数据格式是否正确
- 过拟合:数据太少时减少 epoch,或增大 dropout
- 灾难性遗忘:LoRA 天然比全量微调更不易丢失通用能力
小结
LoRA 让”微调大模型”从大厂专属变成个人可玩:冻结主干、只训小矩阵,显存和成本都大幅下降。记住流程——准备数据、注入 LoRA、训练、合并推理,再根据业务反馈迭代数据,就能逐步打磨出贴合场景的专属模型。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 非鱼小站!
评论
WalineDisqus









