低秩自适应
LoRA (Low-Rank Adaptation)
LoRA(Low-Rank Adaptation,低秩自适应)是一种参数高效微调技术,通过冻结原模型权重、仅训练低秩分解矩阵,实现以极低显存/成本完成大模型微调。
详细解释
LoRA(Low-Rank Adaptation)由 Microsoft 在 2021 年论文《LoRA: Low-Rank Adaptation of Large Language Models》中提出。其核心洞察是:
模型微调时,权重变化量 ΔW 的「内在秩」远低于 W 本身。
也就是说,要让一个 4096×4096 的矩阵变化,不必更新 1670 万个参数,只要学习两个小矩阵 A(4096×r)和 B(r×4096)相乘即可,其中秩 r 通常取 8/16/64。
数学原理
原始线性层:y = Wx,其中 W ∈ R^(d×k)
LoRA 改造后:
y = Wx + (α / r) · B · A · x
其中 A ∈ R^(r×k),B ∈ R^(d×r),α 是缩放系数。
训练时只更新 A 和 B,推理时可合并回 W(零额外延迟)。
LoRA 的优势
| 指标 | 全量微调 | LoRA | QLoRA |
|---|---|---|---|
| 训练参数量 | 100% | 0.1%-1% | 0.05%-0.5% |
| 7B 模型显存 | 60GB+ | 16GB | 6GB |
| Checkpoint 大小 | 14GB | 30-100MB | 30-100MB |
| 推理延迟 | 基准 | 基准(可合并) | 略增 |
| 多任务支持 | 需切换全量 | 多 LoRA 热插拔 | 多 LoRA 热插拔 |
实战代码
from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-7B")
config = LoraConfig(
r=16, # 秩
lora_alpha=32, # 缩放系数
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
model = get_peft_model(model, config)
# 可训练参数:约 0.5%
常见问题
LoRA r 取多大合适?
经验值:4-32 覆盖 90% 任务。任务简单取 8,复杂任务(代码生成、多语言)取 32-64。r 越大,可训练参数越多,逼近全量微调。
唯元智创支持 LoRA 训练吗?
支持。控制台「模型微调」入口可上传数据集一键训练 LoRA,¥0.5/千训练 token,30 分钟出第一个 Checkpoint。