LoRA微调实战:基于Jupyter Notebook的训练流程
在大语言模型微调实践中,LoRA(Low-Rank Adaptation)作为一种高效且资源友好的方法,正被广泛采用。本文将通过Jupyter Notebook展示完整的LoRA微调流程。
环境准备
!pip install transformers datasets accelerate peft
数据加载与预处理
from datasets import load_dataset
from transformers import AutoTokenizer
# 加载数据集
train_dataset = load_dataset("csv", data_files="train.csv")
# 加载tokenizer
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
def tokenize_function(examples):
return tokenizer(examples["text"], truncation=True, padding="max_length", max_length=128)
train_dataset = train_dataset.map(tokenize_function, batched=True)
模型与LoRA配置
from transformers import AutoModelForSequenceClassification
from peft import get_peft_model, LoraConfig, TaskType
# 加载基础模型
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)
# 配置LoRA参数
lora_config = LoraConfig(
r=8,
lora_alpha=32,
target_modules=["query", "value"],
lora_dropout=0.1,
bias="none",
task_type=TaskType.SEQ_CLS
)
# 应用LoRA适配器
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
训练设置与执行
from transformers import TrainingArguments, Trainer
training_args = TrainingArguments(
output_dir="./lora_finetuned",
num_train_epochs=3,
per_device_train_batch_size=16,
per_device_eval_batch_size=16,
warmup_steps=500,
weight_decay=0.01,
logging_dir="./logs",
save_strategy="epoch"
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset["train"],
eval_dataset=train_dataset["test"]
)
trainer.train()
模型保存与加载
# 保存微调后的模型
model.save_pretrained("./final_lora_model")
tokenizer.save_pretrained("./final_lora_model")
# 加载微调模型
from peft import PeftModel
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)
model = PeftModel.from_pretrained(model, "./final_lora_model")
通过上述步骤,即可完成基于LoRA的高效微调流程。该方案显著降低了训练资源需求,同时保持了良好的性能表现。

讨论