LoRA实现

LoRA微调的代码实现指南

Hugging Face PEFT

PEFT(Parameter-Efficient Fine-Tuning)是Hugging Face提供的参数高效微调库, 内置LoRA支持,是目前最主流的LoRA实现方案。

# 安装
pip install peft transformers accelerate

基础使用

# 加载模型并应用LoRA
from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-2-7b-hf",
torch_dtype="auto"
)
lora_config = LoraConfig(
r=8, # LoRA秩
lora_alpha=16, # 缩放因子
target_modules=["q_proj", "v_proj"], # 应用位置
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
model = get_peft_model(model, lora_config)

关键参数说明

参数说明推荐值
rLoRA秩,决定低秩矩阵维度8-64
lora_alpha缩放因子,实际缩放=alpha/r16-32
target_modules应用LoRA的模块q_proj, v_proj
lora_dropoutDropout比例0.05-0.1

训练代码示例

from transformers import Trainer, TrainingArguments
training_args = TrainingArguments(
output_dir="./lora-output",
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()

保存与加载

# 只保存LoRA权重(几MB)
model.save_pretrained("./lora-weights")
# 加载LoRA权重
from peft import PeftModel
model = AutoModelForCausalLM.from_pretrained("base-model")
model = PeftModel.from_pretrained(model, "./lora-weights")
# 合并权重用于部署
merged_model = model.merge_and_unload()
----