fix(lora): honor fallback RS-LoRA scaling - #170
Conversation
|
补充说明一下当前 CI 的失败情况: 我对比了本 PR 的 CI run
这些失败在本 PR 创建前已经存在,并且可以追溯到 #165 合入后的 main CI run @isLinXu 这组回归看起来与 #165 合入的 optimization delivery 改动有关,麻烦您有空时帮忙确认一下。 为了保持当前 PR 的修改范围单一,我暂时不把这组 main 回归的修复混入本 PR;待 main 修复后再同步最新基线。 |
|
补充说明:独立复核发现,当前 fallback alpha warmup 虽然可以更新 online model 的 为避免把尚未闭合的 warmup/EMA 生命周期行为带入 main,我已将本 PR 重新转为 Draft,并把范围收窄为 fallback RS-LoRA scaling、有效模式记录和 legacy adapter 兼容。 Alpha warmup coverage、online/EMA scaling 同步、checkpoint/validation 和 resume 行为将放到后续独立的 test-first PR 中处理。本 PR 收窄并重新验证后再转回 Ready。 |
|
补充说明:现已将分支同步到最新 |
There was a problem hiding this comment.
Pull request overview
This PR fixes the fallback LoRA backend so it actually honors LoRAConfig.use_rslora (RS-LoRA vs standard LoRA scaling), and makes the chosen scaling mode persist across fallback adapter save/load/merge to keep behavior consistent.
Changes:
- Add
_fallback_lora_scaling()and threaduse_rslorathroughManualLoRAConv/FewShotLoRAConvto applyalpha / sqrt(r)when RS-LoRA is enabled. - Record
use_rslorain fallback runtime metadata and per-module adapter configs, and recomputescalingon load for forward/merge consistency. - Add tests covering RS-LoRA vs standard scaling, adapter round-trip behavior, and legacy adapter compatibility when
use_rslorais missing.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| ultralytics/utils/lora/fallback.py | Apply and persist effective RS-LoRA scaling in the fallback backend (wrappers, runtime metadata, adapter save/load). |
| tests/test_lora_fallback_effective_config.py | Add regression tests for fallback RS-LoRA scaling, round-trip persistence, and legacy-compat loading. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
补充一组下游受控验证,主要确认这个修复改变的是实际训练行为,而不只是配置记录。 在固定 released YOLOE、VisDrone、seed 和 7-epoch 预算下,我做了 fresh、Unmerged-Only 的四条件对照。四组使用相同初始化、数据顺序、训练配置和 final-only evaluator:
两个背景下 RS-LoRA 的方向一致,说明 fallback 这只是单 seed、固定 7 epochs 的 exploratory observation,不代表跨 seed 稳定提升。Alpha warmup 与 EMA 生命周期修复仍保持为后续独立改动,不混入本 PR。 |
…ffective-config # Conflicts: # ultralytics/utils/lora/fallback.py
|
已同步最新 冲突来自 #175 对 同步后验证:
GitHub 当前已重新显示为可合并,新一轮 CI 正在运行。 |
|
LGTM |
背景
fallback LoRA 路径目前没有真正应用
LoRAConfig.use_rslora:ManualLoRAConv和FewShotLoRAConv始终使用alpha / r。这会导致配置记录为 RS-LoRA,但实际 scaling 仍是普通 LoRA。此外,fallback adapter 的保存格式没有记录实际 scaling 模式,加载时也无法区分 RS-LoRA 与普通 LoRA。
修改
use_rslora显式传入 fallback wrapper:alpha / sqrt(r);alpha / r。use_rslora字段,继续按历史的alpha / r处理,避免旧 checkpoint 的行为发生静默变化。测试
3 passed。150 passed, 29 skipped。py_compile、新增测试的 Ruff 检查及git diff --check通过。重点覆盖:
范围说明
独立复核发现,fallback alpha warmup 还涉及 online model 与 EMA model 的 scaling 同步,以及 validation、checkpoint 和 resume 的完整生命周期。仅增加 bare-Parameter coverage 不能闭合这条链路,因此本 PR 不再包含 alpha warmup 改动。
Alpha warmup 将作为后续独立的 test-first 修复处理,避免把两个不同风险边界混在同一个 PR 中。