微调实战:LoRA 上手
全量微调大模型成本高昂。LoRA(Low-Rank Adaptation)冻结预训练权重,只在 Transformer 的权重旁注入可训练的低秩矩阵,把可训练参数量降低几个数量级,让单卡也能微调大模型。
为什么用 LoRA
全量微调需要更新全部参数,显存与存储开销巨大。LoRA 只训练新增的小矩阵,原权重保持不变,多个任务可共享一份底座、各自挂载不同适配器,切换与部署都很灵活。
原理简述
对某个权重矩阵 W,LoRA 不改动 W,而是学习分解后的低秩增量:W + BA,其中 B 与 A 是窄矩阵。反向传播只更新 B、A,参数量从 d×d 降到 d×r 级别(r 远小于 d)。
from peft import LoraConfig, get_peft_model
config = LoraConfig(
r=8,
lora_alpha=16,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05,
)
model = get_peft_model(base_model, config)
model.print_trainable_parameters()
实操要点
- 选对目标模块:通常从注意力层的 q、v 投影入手。
- 控制秩 r:小任务用 8 到 16 足够,过大反而易过拟合。
- 学习率略高于全量微调即可,配合常规优化器。
小结
LoRA 用低秩适配在几乎不碰原模型的前提下完成微调,显存友好、可多任务复用。它是资源有限时让大模型适配专属场景的首选方案。
参考与延伸阅读
- LoRA 原论文(Hu 等, 2021)。已核验。https://arxiv.org/abs/2106.09685
- Hugging Face PEFT 文档。已核验。https://huggingface.co/docs/peft
- PyTorch 官方教程。已核验。https://pytorch.org/tutorials/
本文累计阅读 — 次