什么是 LoRA?

LoRA(Low-Rank Adaptation,低秩适应)是一种参数高效适配方法:保持选定的预训练权重矩阵冻结,通过更小的低秩矩阵学习加性更新。它缩小了可训练更新范围,但不保证固定的显存节省、硬件适配、训练速度或相对全参数微调的质量。

快速了解

全称低秩适应(Low-Rank Adaptation)
创建时间2021 年由微软研究院提出
规范文档官方规范

工作原理

显式计算低秩更新

对输入维度为 d_in、输出维度为 d_out 的冻结矩阵 W,选择 Rank r,训练形状为 r × d_in 的 A 和 d_out × r 的 B;原始缩放规则下,Layer 计算 W x + (alpha / r) B A x。忽略 Bias 与额外模块时,该矩阵新增 r(d_in + d_out) 个参数。[LoRA 原论文](https://arxiv.org/html/2106.09685)用低内在秩解释这种参数化,但其中 GPT-3 的参数与显存降幅只属于论文测试条件。

把 Rank 与目标模块作为耦合变量

先检查准确的模型 Module Graph,确认每个 Target Module 都解析到预期线性层。随后在固定数据和 Seed 上,对有限 Rank、Scaling Policy 与目标模块组合做实验,并测量任务质量、严重错误、训练稳定性、峰值显存、Wall Time 与 Adapter 大小。更高 Rank 会增加容量与训练状态,但不一定改善留出集质量。当前 [NeMo RL LoRA 文档](https://docs.nvidia.com/nemo/rl/nightly/guides/lora.html)也显示,不同实现的命名、初始化和 Backend 约束并不相同。

分别验证 Adapter 与合并部署

未合并 Adapter 便于受控切换,但会增加 Runtime 兼容、Cache、授权和并发问题;受支持配置下的合并制品可移除独立 LoRA 分支,却会失去 Adapter 专属操作并产生新的完整 Checkpoint。两种形态都要绑定基座、Tokenizer、Template、方法配置和评测身份。当前 [NVIDIA NIM PEFT 指南](https://docs.nvidia.com/nim/large-language-models/1.11.0/peft.html)要求 Adapter 与服务基座匹配;动态多 Adapter 是产品能力,不是 LoRA 的通用属性。

主要特点

  • 把选定权重的更新表示为带缩放的低秩乘积,同时保持对应基座权重冻结
  • Adapter 容量和大小取决于 rank、目标模块、层形状、dtype、偏置与 modules_to_save
  • rank、alpha、初始化、学习率、数据和目标模块构成耦合实验,而不是彼此独立的默认值
  • 训练峰值显存包含冻结基座、激活值、可训练状态、临时 Buffer 和框架开销
  • Adapter 可以独立用于受控多 Adapter 服务,也可以合并为兼容的基座制品
  • 每个 Adapter 都需要不可变的基座、Tokenizer、Chat Template、配置、数据集和评测身份

常见用途

  1. 使用版本化监督数据集适配语言模型的行为或输出格式
  2. 在同一兼容基座上维护按租户、领域、语言或任务分别评测的 Adapter
  3. 在考虑更广泛参数更新前,对 rank 和目标模块进行受控对比实验
  4. 在实现支持对应模块布局时适配扩散、视觉、语音或多模态模型的线性层
  5. 交付受治理的 Adapter 包,或带明确回滚制品的已验证合并模型

示例

loading...
Loading code...

常见问题

LoRA 是如何工作的?

LoRA 保持选定的基座权重 W 冻结,学习两个更小的矩阵 A 和 B,前向计算使用 W 加上带缩放的 BA。只有 Adapter 和显式选择的额外模块接收梯度更新。该方法对更新施加低秩约束,但不能证明每个任务的有效更新都一定是低秩。

LoRA 的 rank 和 alpha 应该如何选择?

应把 rank 和 alpha 与目标模块、初始化、学习率和数据顺序作为耦合变量。在固定训练集和验证集 Revision 上做有界试验,再比较任务质量、安全切片、峰值显存、吞吐和 Adapter 大小。更大的 rank 会增加容量和成本,但不会自动带来更高质量。

LoRA 一定能达到全参数微调的质量吗?

不能。原始论文只证明了特定模型、任务、基线和预算下的竞争性结果,不能直接外推到其他工作负载。发布前应在留出的任务、安全、稳健性和回归切片上比较未修改基座、LoRA 候选和合适替代方案,再根据业务门槛决定是否上线。

LoRA 和 QLoRA 有什么区别?

LoRA 描述低秩可训练更新;QLoRA 在此基础上把冻结基座以 4-bit 量化形式存储,并以更高精度执行 Adapter 计算。QLoRA 可以降低基座权重显存,但总峰值显存和质量仍取决于量化器、序列长度、Batch、激活值、算子、优化器和设备。

部署 LoRA 时应该合并还是保留独立 Adapter?

当服务运行时需要独立模型,且能够验证合并后的精度、Tokenizer、生成行为、延迟和回滚路径时,可以合并。需要受治理的任务切换或多 Adapter 服务时保留独立制品。两种路径都必须固定基座与 Adapter Revision;动态加载端点只能开放给可信运维主体。

相关术语

相关文章