Prhub

#22125 throw ValueError for DoRA adapters

原始 PR 作者 glenliu21 合并时间 2026-05-02 22:54 文件变更 2 提交数 7 评论 20 代码增减 +7 / -8

执行摘要

为 DoRA 适配器抛出 ValueError

在落地DoRA适配器支持(关联 #22124)之前,应提供明确的错误提示告知用户该特性尚未支持。「Until we land DoRA adapter support (see #22124), we should throw a descriptive error if we get a DoRA adapter.」

值得精读,展示了在大型项目中逐步添加功能预检并小范围重构异常处理模式的设计思路。

讨论亮点
  • 【gemini-code-assist[bot]】指出更新后的 added_tokens 错误消息在 validate_new_adapter 中是 unreachable,因为 LoRAConfig.__init__ 已先抛出。建议集中验证。
  • 【glenliu21】确认「应将配置检查集中到 lora_manager.py::validate_new_adapter()
  • 【yushengsu-thu】同意并提到未来需重构 LoRA 模块。

实现拆解

  1. 添加 use_dora 属性:在 lora_config.pyLoRAConfig.__init__ 中新增 self.use_dora,从配置中读取 use_dora 字段,默认 False
  2. 移除冗余检查:从 LoRAConfig.__init__ 中移除原先生成的 lora_added_tokens_size > 0ValueError,将该验证逻辑移至调用方。
  3. 集中验证:在 lora_manager.pyLoRAManager.validate_new_adapter 方法中添加对 use_dora 的检查,并更新 added_tokens 的错误信息以包含适配器名称,提高诊断性。
文件 模块 状态 重要度
python/sglang/srt/lora/lora_config.py LoRA 配置 modified 6.01
python/sglang/srt/lora/lora_manager.py LoRA 管理 modified 5.4

关键符号

LoRAConfig.__init__ LoRAManager.validate_new_adapter

关键源码片段

python/sglang/srt/lora/lora_config.py core-logic

核心 LoRA 配置类,新增 use_dora 属性,移除 added_tokens 检查,重构验证逻辑的开始。

# python/sglang/srt/lora/lora_config.py
class LoRAConfig:
    def __init__(self, path=None, config_dict=None, ...):
        self.path = path
        if config_dict is not None:
            self.hf_config = config_dict
        else:
            self.hf_config = self.get_lora_config()
        self.target_modules = self.hf_config['target_modules']
        self.r = self.hf_config['r']
        self.lora_alpha = self.hf_config['lora_alpha']
        # 读取 DoRA 标记,默认为 False
        self.use_dora = self.hf_config.get('use_dora', False)
​
        # 过滤伪造的 added tokens(已移至 manager 中验证)
        # 原 added_tokens_size > 0 的检查已删除
python/sglang/srt/lora/lora_manager.py core-logic

LoRA 适配器生命周期管理,新增 validate_new_adapter 中的 DoRA 检查,集中所有适配器验证逻辑。

# python/sglang/srt/lora/lora_manager.py
def validate_new_adapter(self, lora_config: LoRAConfig, lora_ref: LoRARef):
    """Validate if an adapter can be loaded into the current LoRA memory pool."""
    if lora_config.lora_added_tokens_size > 0:
        raise ValueError(
            f'Failed to load {lora_ref.lora_name} because LoRA serving currently does not support adapters that add tokens to the vocabulary'
        )
​
    # 新增 DoRA 检查
    if lora_config.use_dora:
        raise ValueError(
            f'Failed to load {lora_ref.lora_name} because LoRA serving currently does not support DoRA adapters'
        )
​
    # 其余原有验证(去重、内存池兼容性、pinned 检查)保持不变

评论区精华

集中验证逻辑的位置 设计

gemini-code-assist[bot] 指出更新后的 added_tokens 错误消息在 validate_new_adapter 中不可达,因为 LoRAConfig.__init__ 已先抛出。建议移除构造函数中的检查,集中到 validate_new_adapter。

结论:glenliu21 和 yushengsu-thu 同意,最终代码从 __init__ 移除了 added_tokens 检查,统一在 manager 中处理。 · 已解决

风险与影响

变更非常有限,仅影响 LoRA 适配器加载路径。采用 .get("use_dora", False) 避免 KeyError。原 added_tokens 检查从构造函数移至 manager 后,行为等价(错误消息不同),风险极低。

用户尝试加载 DoRA 适配器时将收到明确错误提示,而非静默失败或深层错误。影响范围限于 LoRA 适配器加载阶段,对系统其他功能无影响。

新增配置键依赖 重构导致错误消息变化

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论