通用大模型什么都懂一点,但不一定贴合你的业务语气和格式。全量微调要改动几十亿参数、显存爆炸,而 LoRA 只训练极小一部分参数,一张消费级显卡就能微调。这篇教程用 Hugging Face 的 PEFT 库,带你完整走一遍 LoRA 微调流程。

LoRA 的原理

LoRA 冻结原模型权重,只在旁边加一对低秩小矩阵来学习”增量”:

训练时只更新这对小矩阵,参数量常降到原来的千分之一,效果却接近全量微调。

前置准备

  • 一块显存 ≥ 16GB 的 GPU(7B 模型 + LoRA)
  • Python 3.9+ 与 CUDA 环境
  • 一份”指令→回答”格式的训练数据

步骤一:安装依赖

pip install transformers peft datasets accelerate torch

步骤二:准备数据集

LoRA 指令微调常用 JSON 格式,每条含指令和期望回答:

[
{"instruction": "把这句话改写成客服语气", "input": "退款要等三天", "output": "您好,您的退款预计三个工作日内到账,请耐心等待哦~"},
{"instruction": "总结产品卖点", "input": "这款耳机续航30小时", "output": "超长30小时续航,畅听一整天。"}
]

数据质量比数量更重要,几十到几百条高质量样本就能看到效果。

步骤三:加载基座模型与分词器

from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "Qwen/Qwen2-1.5B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto")

步骤四:配置 LoRA

用 PEFT 定义要把 LoRA 注入哪些模块:

from peft import LoraConfig, get_peft_model

lora_config = LoraConfig(
r=8, # 低秩维度,越大能力越强也越占显存
lora_alpha=16, # 缩放系数,常设为 r 的 2 倍
target_modules=["q_proj", "v_proj"], # 注入哪些层
lora_dropout=0.05,
task_type="CAUSAL_LM",
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# 输出:可训练参数约占总参数的 0.1%

步骤五:开始训练

from transformers import TrainingArguments, Trainer

args = TrainingArguments(
output_dir="./lora-out",
per_device_train_batch_size=2,
gradient_accumulation_steps=8,
num_train_epochs=3,
learning_rate=2e-4,
logging_steps=10,
)
trainer = Trainer(model=model, args=args, train_dataset=dataset)
trainer.train()

步骤六:保存与合并

训练完保存 LoRA 权重,需要独立部署时再合并回基座模型:

model.save_pretrained("./lora-out")          # 只存小矩阵,体积很小

merged = model.merge_and_unload() # 合并成完整模型
merged.save_pretrained("./merged-model")

步骤七:推理测试

from peft import PeftModel

base = AutoModelForCausalLM.from_pretrained(model_name)
infer = PeftModel.from_pretrained(base, "./lora-out")
# 用微调后的模型生成,观察语气是否已对齐你的数据

完整微调流程

常见问题

  • 显存不足:减小 batch_size、降低 r,或改用 4bit 量化(QLoRA)
  • 学不到东西:检查学习率(2e-4 常用)、数据格式是否正确
  • 过拟合:数据太少时减少 epoch,或增大 dropout
  • 灾难性遗忘:LoRA 天然比全量微调更不易丢失通用能力

小结

LoRA 让”微调大模型”从大厂专属变成个人可玩:冻结主干、只训小矩阵,显存和成本都大幅下降。记住流程——准备数据、注入 LoRA、训练、合并推理,再根据业务反馈迭代数据,就能逐步打磨出贴合场景的专属模型。