大模型微调入门:LoRA 原理与实践

什么是 LoRA

LoRA (Low-Rank Adaptation) 是一种高效的模型微调方法,可以用极少的参数实现模型定制。

LoRA 原理
LoRA 原理

核心原理

传统微调 vs LoRA

方式训练参数量显存占用训练时间
全量微调100%很高很长
LoRA0.1-1%

数学原理

LoRA 的核心思想是将权重更新分解为低秩矩阵:

W' = W + BA 其中: - W: 原始权重 (d × k) - B: 低秩矩阵 (d × r) - A: 低秩矩阵 (r × k) - r << min(d, k)

矩阵分解示意图
矩阵分解示意图

实战教程

1. 环境准备

pip install transformers peft datasets accelerate

2. 准备数据集

from datasets import Dataset data = [ {"instruction": "翻译成英文", "input": "你好", "output": "Hello"}, {"instruction": "翻译成英文", "input": "谢谢", "output": "Thank you"}, # ... 更多数据 ] dataset = Dataset.from_list(data)

3. 配置 LoRA

from peft import LoraConfig, get_peft_model lora_config = LoraConfig( r=8, # 秩 lora_alpha=32, # 缩放系数 target_modules=["q_proj", "v_proj"], # 目标层 lora_dropout=0.05, bias="none", task_type="CAUSAL_LM" ) model = get_peft_model(base_model, lora_config) print(f"可训练参数: {model.print_trainable_parameters()}") # 输出: 可训练参数: 0.1% (2M / 7B)

4. 开始训练

from transformers import TrainingArguments, Trainer training_args = TrainingArguments( output_dir="./lora-model", num_train_epochs=3, per_device_train_batch_size=4, learning_rate=2e-4, logging_steps=10, save_steps=100 ) trainer = Trainer( model=model, args=training_args, train_dataset=dataset ) trainer.train()

参数调优指南

参数推荐值说明
r4-64越大表达能力越强
alpha16-64通常设为 2*r
dropout0.05-0.1防止过拟合

常见问题

❓ 训练效果不好怎么办?

  1. 增大 r 值
  2. 检查数据质量
  3. 调整学习率

❓ 如何合并权重?

merged_model = model.merge_and_unload() merged_model.save_pretrained("./merged-model")

总结

LoRA 是入门大模型微调的最佳选择,低成本、易上手、效果好。