LLM 微调完全入门指南(第1篇)
一、引言
大语言模型(LLM)的微调(Fine-tuning)是指在预训练模型的基础上,使用特定领域或任务的数据进行额外训练,使模型适配特定应用场景。本文是 LLM 微调入门系列的第一篇,介绍微调的基本概念、常见方法(LoRA、QLoRA、Full Fine-tuning)、以及如何在消费级 GPU 上进行实战微调。
二、基础语法
2.1 什么是微调
# 预训练模型:在大规模通用语料上训练(如 7B 参数)
微调:在特定任务数据上进一步训练,使模型适配特定任务
典型微调场景
- 医疗问答:使用医疗文献数据微调
- 代码生成:使用 GitHub 代码数据微调
- 客服对话:使用历史对话记录微调</code></pre>
2.2 微调方法对比
# Full Fine-tuning(全量微调)
优点:效果最好
缺点:需要多卡 GPU,显存占用大(7B模型约 28GB)
LoRA(Low-Rank Adaptation)
优点:只需训练少量参数,单卡可行
缺点:效果略低于全量微调
QLoRA(Quantized LoRA)
优点:4-bit 量化,单卡 24GB 可训练 65B 模型
缺点:训练速度较慢</code></pre>
三、完整代码示例
# 安装依赖
pip install transformers peft datasets accelerate bitsandbytes
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training
from datasets import load_dataset
import torch
model_name = "bigscience/bloom-560m"
加载模型(8-bit 量化)
model = AutoModelForCausalLM.from_pretrained(
model_name,
load_in_8bit=True,
device_map="auto"
)
model = prepare_model_for_kbit_training(model)
配置 LoRA
lora_config = LoraConfig(
r=8,
lora_alpha=16,
target_modules=["query_key_value"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
应用 LoRA
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
输出:trainable params: 81,920 || all params: 559,214,592 || trainable%: 0.015%
准备数据集(以对话数据为例)
dataset = load_dataset("json", data_files="conversation_data.jsonl")
train_dataset = dataset["train"].map(
lambda x: tokenizer(x["text"], truncation=True, padding="max_length"),
batched=True
)
开始训练
from transformers import Trainer, TrainingArguments
training_args = TrainingArguments(
output_dir="./output",
num_train_epochs=3,
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
learning_rate=2e-4,
logging_steps=10,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
)
trainer.train()
四、运行效果
运行上述代码后,Bloom-560M 模型会通过 LoRA 技术进行微调,仅训练约 0.015% 的参数(8万个参数),在单张消费级 GPU 上即可完成训练。LoRA 通过在注意力层注入低秩矩阵,大幅降低训练成本,同时保持较好的任务适配效果。
五、常见问题
Q1:微调需要多少数据?
答:通常至少需要几千条高质量任务相关数据,数据量越大效果越好,但过多可能导致过拟合。
Q2:如何评估微调效果?
答:使用 perplexity、在验证集上的准确率或 loss 监控,或通过人工评估生成质量。
Q3:LoRA 和 QLoRA 如何选择?
答:显存足够(大于等于24GB)用 LoRA;显存有限用 QLoRA,牺牲一定速度换取更低显存占用。
六、延伸阅读
- LoRA 论文:LoRA: Low-Rank Adaptation of Large Language Models
- QLoRA 论文:QLoRA: Efficient Finetuning of Quantized LLMs
- 本系列文章:LLM 微调完全入门指南(第2篇)、LLM 推理优化完全指南