Prhub

#46037 [Bugfix][Model] Fix crash loading Mamba/Mamba2 checkpoints without an `architectures` field

原始 PR 作者 Sunt-ing 合并时间 2026-07-05 20:42 文件变更 1 提交数 4 评论 5 代码增减 +9 / -0

执行摘要

修复 Mamba2 无 architectures 字段加载崩溃

HF 官方 Mamba2 转换权重(如 AntonV/mamba2-130m-hf)的 config.json 省略了 architectures 字段,导致 vLLM 引擎初始化时因 mamba_block_size 为 None 而断言失败。

值得合入,改动小而精准,修复了一个明确的用户可见崩溃。

讨论亮点

审核者 yewentao256 最初建议添加单元测试,但后续认为改动太小无需专门测试。之后询问测试是否已被移除,作者确认 PR 仍需要,测试已被移除。最终审核者批准。

实现拆解

  1. vllm/config/vllm.pytry_verify_and_update_config 方法中,引入 ModelRegistry._normalize_arch 导入。
  2. MODELS_CONFIG_MAP.get(architecture) 返回 None 时,用 ModelRegistry._normalize_arch(architecture, self.model_config) 对架构名归一化(例如将 'Mamba2Model' 转为 'Mamba2ForCausalLM'),然后重新查找。
  3. 若重查找成功,则调用对应的 verify_and_update_config,确保 mamba_block_size 等配置被正确设置。
文件 模块 状态 重要度
vllm/config/vllm.py 配置层 modified 6.07

关键符号

try_verify_and_update_config

关键源码片段

vllm/config/vllm.py core-logic

核心修复文件:在 try_verify_and_update_config 中添加架构名归一化降级逻辑。

# vllm/config/vllm.py - try_verify_and_update_config 方法片段def try_verify_and_update_config(self):
    if self.model_config is None:
        return
​
    # 避免重复执行
    if getattr(self.model_config, "config_updated", False):
        return
    self.model_config.config_updated = True
​
    architecture = self.model_config.architecture
    if architecture is None:
        return
​
    from vllm.model_executor.models import ModelRegistry
    from vllm.model_executor.models.config import (
        MODELS_CONFIG_MAP,
        HybridAttentionMambaModelConfig,
    )
​
    cls = MODELS_CONFIG_MAP.get(architecture, None)
    if cls is None:
        # `architecture` 可能是 HF 基础模型名(如 "Mamba2Model",
        # 当 `architectures` 字段缺失时由 vLLM 注入),需要归一化
        # 为可运行的架构名(如 "Mamba2ForCausalLM"),以避免
        # per-arch 配置钩子被跳过。
        architecture = ModelRegistry._normalize_arch(
            architecture, self.model_config
        )
        cls = MODELS_CONFIG_MAP.get(architecture, None)
    if cls is not None:
        cls.verify_and_update_config(self)
​
    # 后续的混合注意力 / 分类等配置处理不变 ...

评论区精华

是否需要单元测试 测试

审核者 yewentao256 最初建议添加测试,后认为改动太小不需要专门测试,并注意到测试文件已被移除。作者回复确认 PR 仍需要,测试已被移除。

结论:一致认为无需专用测试,现有测试覆盖足够。 · 已解决

风险与影响

变更仅发生在架构名直接查找失败后的降级路径,对已有 architectures 字段的正常 checkpoint 无影响。风险极低,但理论上若 normalize_arch 抛出异常,则加载失败。

影响范围小:仅影响缺少 architectures 字段的 Mamba/Mamba2 checkpoint 用户。修复后这类 checkpoint 可以成功加载为 embedding 模型。

边缘路径安全降级

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论