什么是 LoRA 秩(LoRA Rank)?
LoRA 秩(LoRA Rank)是表示 LoRA 权重更新的两个可训练矩阵所使用的内部维度 r。它限制更新矩阵的秩并控制参数容量,但不能直接预测任务质量,也不存在适用于所有任务的默认值。
快速了解
| 规范文档 | 官方规范 |
|---|
工作原理
从每个目标矩阵形状计算 Rank 成本
A 的形状为 r × d_in,B 的形状为 d_out × r,因此忽略 Bias 和 modules_to_save 时,单个目标增加 r(d_in + d_out) 个可训练权重。应对所有命中的 Layer 求和,不能用全模型参数量乘一个百分比。[LoRA 论文](https://arxiv.org/html/2106.09685)在实验更新中观察到低秩结构,但其有效 Rank 和资源降幅不是通用默认值。
把 Rank、Scaling 与放置位置联合设计
Rank 决定容量,Alpha 与 Scaling Rule 决定更新幅度,Target Module 则决定容量放在哪里。当前 [PEFT LoRA 文档](https://huggingface.co/docs/peft/main/en/package_reference/lora)支持逐层 rank_pattern、alpha_pattern、多种初始化和直接 Expert Parameter 目标;这些能力依赖具体实现,无法匹配的模块表达式还可能让计划预算静默失效。
选择通过门禁的最小候选
使用不可变 Base、数据切分、Tokenizer、Template、目标集合、初始化、Optimizer、Step Budget 与 Seed 做有界 Rank Sweep。按切片比较任务质量、回归、方差、设备与主机峰值内存、Wall Time、Adapter 字节和服务延迟。[AdaLoRA](https://arxiv.org/html/2303.10512)说明均匀 Rank 未必最优,但其收益仍受模型与实验协议限制。
主要特点
- 定义每个选定权重的 A、B 更新矩阵所共享的内部维度
- 每个目标权重增加 r ×(输入维度 + 输出维度)个参数
- 会改变容量与资源使用,但不会单调决定留出集质量
- 与目标模块、alpha 缩放、初始化、优化器、数据和训练预算相互作用
- 影响 Adapter 制品大小,以及部分服务运行时的 Rank 上限或缓存容量
- 必须在不可变 Train、Validation 和 Test Revision 上通过受控试验选择
常见用途
- 为版本化的指令遵循或分类任务比较 Adapter 容量
- 规划可训练参数、优化器状态、制品存储与服务缓存
- 比较扩大目标模块覆盖与提高 rank 哪一种更有价值
- 为受治理的多 Adapter 服务定义最大支持 rank
- 先排除 Label、Loss Mask、数据泄漏与质量问题,再诊断容量限制
示例
Loading code...常见问题
LoRA 应该使用多大的 rank?
不存在通用 rank。选择符合资源包络的有界候选集,固定基座、目标模块、数据、缩放策略、优化器和评测,再在留出的任务与回归切片上比较多次运行。应选择满足发布门槛的最小 rank,而不是复制流行数值。
rank 越高质量一定越好吗?
不一定。更高 rank 会扩大更新参数化,但优化过程、数据质量、目标模块和评测决定新增容量是否有用。它可能没有可测收益,也可能增加方差、过拟合、显存、存储和服务缓存消耗。
LoRA rank 会增加多少参数?
对输入维度为 d_in、输出维度为 d_out 的单个目标权重,rank r 为 A 和 B 增加 r ×(d_in + d_out)个参数。应对所有选定权重和层求和,再加入训练的 Bias、Embedding、Head 或 modules_to_save 参数。
LoRA rank 如何影响部署?
rank 会改变 Adapter 字节数,还可能改变运行时计算、缓存分配、最大并发 Adapter 数和引擎兼容性。服务系统可能限制最大 rank,或按最大值预留缓存,因此训练配置必须与服务容量共同规划。
LoRA 质量不好时应该先增加 rank 吗?
不应该。先检查 Label、Completion 或 Assistant Loss Mask、截断、Chat Template、重复数据泄漏、目标模块名称和未修改基座表现。只有排除这些问题后,才把增加 rank 作为受控实验;真正问题也可能是数据或训练目标不合适。