跳到主要内容

LoRA 与 QLoRA

要解决的问题

后训练(SFT、DPO)若 全参更新 7B/70B 模型,常需多卡与高带宽存储。LoRA(Low-Rank Adaptation) 用低秩矩阵近似权重增量;QLoRA 将基座 4-bit 量化 加载、LoRA 在 FP16/BF16 训练,使单卡 24–48GB 可微调 7B–13B,成为开源对齐的事实标准。

核心概念

对线性层 W0Rd×kW_0 \in \mathbb{R}^{d \times k},LoRA 注入:

W=W0+ΔW,ΔW=BA,  BRd×r,  ARr×k,  rmin(d,k)W = W_0 + \Delta W, \quad \Delta W = B A,\; B \in \mathbb{R}^{d \times r},\; A \in \mathbb{R}^{r \times k},\; r \ll \min(d,k)

前向:

h=W0x+BAxh = W_0 x + B A x

训练时 W0W_0 冻结,只更新 A,BA,B。缩放常乘 α/r\alpha/r

超参典型范围影响
rank rr8–128越大容量越高、显存略增
α\alpha16–64有效学习率缩放
target modulesq_proj,v_proj 或全部线性全覆盖通常更好
dropout0–0.1小数据防过拟合

QLoRAW0W_0 以 NF4 存储;用 双量化分页优化器 降峰值显存;LoRA 适配器保持高精度。

方法 / 训练与合并

  1. 选 rank 与 target modules(LLaMA-Factory 一键配置)。
  2. SFT 或 DPOtrl + peft 传入 LoraConfig
  3. 合并merge_and_unload() 得到单文件 HF 权重便于 vLLM 部署;或 分开 存 adapter 便于多租户。
  4. DPO 注意πref\pi_{\text{ref}} 可用 同一 LoRA 基座无 adapter 或冻结 adapter 的 ref 副本。

工程实践

场景建议
7B SFTQLoRA rank 64,bf16,seq 4k
13B 单卡 24GQLoRA + grad checkpoint
70B多卡 QLoRA 或 FSDP+LoRA
推理合并后 latency 与全参无异;未合并需 PEFT 加载

工具:peftbitsandbytesAxolotlunsloth(加速 kernel)。

灾难性遗忘:LoRA 通常减轻通用能力跌幅,但 强对齐数据 仍可能改变风格。

代表工作

  • Hu et al., 2021 — LoRA: Low-Rank Adaptation of Large Language Models.
  • Dettmers et al., 2023 — QLoRA: Efficient Finetuning of Quantized LLMs.

局限与注意点

  • 极低 rank 对 复杂偏好对齐 可能欠拟合;可增 rr 或扩 target modules。
  • 量化基座 数值误差 偶发影响训练稳定性;优先 bf16 compute。
  • 合并权重后 无法再拆 adapter;备份 adapter checkpoint。
  • RM+PPO 全链路 LoRA 较少文档化,调试难度高于 DPO+QLoRA。

rank 与 target 模块经验

模型规模起步 ranktarget
7B SFT32–64q_proj,v_proj,o_proj,gate_proj,up_proj,down_proj
13B QLoRA64同上
70B16–32 或 DoRA常仅 attention + FFN 部分层

对齐数据 复杂度高 时可先增 rank 再增数据量。

故障排查

  • loss NaN:降 LR;检查 4bit 与 compute dtype;关闭异常样本。
  • 生成乱码:合并权重后 tokenizer 未同步;或 adapter 未加载。
  • DPO 不收敛:确认 ref logprob 用 无 adapter 基座 计算一致。

相关章节