大模型微调入门:LoRA 原理与实践
什么是 LoRA
LoRA (Low-Rank Adaptation) 是一种高效的模型微调方法,可以用极少的参数实现模型定制。
LoRA 原理
核心原理
传统微调 vs LoRA
| 方式 | 训练参数量 | 显存占用 | 训练时间 |
|---|---|---|---|
| 全量微调 | 100% | 很高 | 很长 |
| LoRA | 0.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()
参数调优指南
| 参数 | 推荐值 | 说明 |
|---|---|---|
| r | 4-64 | 越大表达能力越强 |
| alpha | 16-64 | 通常设为 2*r |
| dropout | 0.05-0.1 | 防止过拟合 |
常见问题
❓ 训练效果不好怎么办?
- 增大 r 值
- 检查数据质量
- 调整学习率
❓ 如何合并权重?
merged_model = model.merge_and_unload()
merged_model.save_pretrained("./merged-model")
总结
LoRA 是入门大模型微调的最佳选择,低成本、易上手、效果好。
评论 (0)
登录后即可参与评论互动