ESC
输入关键词搜索文章标题、摘要和内容
图灵派对 图灵派对
-- -- --
← 返回首页

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

全参数微调一个 7B 模型需要 ~56GB 显存,这对大多数人来说不现实。LoRA 和 QLoRA 让你用一张消费级显卡就能微调大模型。

LoRA 原理

LoRA(Low-Rank Adaptation)的核心思想:冻结原模型参数,只训练一组低秩分解矩阵。

对于原始权重矩阵 W,LoRA 添加一个低秩更新:

W' = W + α × (B × A)
# W: 原始权重 (d × d)
# A: 降维矩阵 (d × r),r << d
# B: 升维矩阵 (r × d)
# α: 缩放因子

当 rank r = 16 时,可训练参数只有原来的 0.1% 左右。

QLoRA:更进一步

QLoRA 在 LoRA 基础上增加了:

  • 4-bit 量化:将基础模型量化到 4-bit NormalFloat
  • 双重量化:对量化常数进行二次量化
  • 分页优化器:自动管理 GPU 内存

这使得在单张 24GB GPU 上微调 70B 模型成为可能。

实战代码

from transformers import AutoModelForCausalLM, BitsAndBytesConfig
from peft import LoraConfig, get_peft_model

# 4-bit 量化配置
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype="float16",
)

# 加载模型
model = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen2.5-7B",
    quantization_config=bnb_config,
    device_map="auto"
)

# LoRA 配置
lora_config = LoraConfig(
    r=16,
    lora_alpha=32,
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.05,
    task_type="CAUSAL_LM"
)

model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# trainable params: 6.5M || all params: 7.6B || 0.086%

总结

LoRA / QLoRA 极大降低了微调大模型的门槛。选好数据集、设好超参、跑起来,你的专属模型就诞生了。