低秩自适应

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 的优势

指标全量微调LoRAQLoRA
训练参数量100%0.1%-1%0.05%-0.5%
7B 模型显存60GB+16GB6GB
Checkpoint 大小14GB30-100MB30-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。