Prhub

#31837 Fix MiniMax-M3 crash on ROCm by making its override fields resolvable

原始 PR 作者 zijiexia 合并时间 2026-07-21 07:14 文件变更 2 提交数 1 评论 1 代码增减 +10 / -2

执行摘要

修复 MiniMax-M3 在 ROCm 上因字段不可解析导致的启动崩溃

在 ROCm (MI355X) 上启动 MiniMax-M3 时,如果未传递 --enable-aiter-allreduce-fusion,启动器会在引擎启动前崩溃,报错 'disable_custom_all_reduce not model-oververidable'。该问题源于 _minimax_m3_overrides 声明的字段未被标记为 resolvable=True,导致 validate_declarations 拒绝。此外,即使传递该标志规避默认路径崩溃,标准 EP 路径仍会因 enable_aiter_allreduce_fusion 声明而崩溃。详见 PR body。

推荐快速合并。这是一个针对特定硬件(ROCm)和模型(MiniMax-M3)的启动崩溃修复,变更量小、风险低、已验证。开发者在为模型添加覆盖声明时,应注意检查所声明的字段是否已标记 resolvable=True。

讨论亮点

该 PR 审核人为 ch-wan,审核状态为 APPROVED,无评论和 Review 评论。

实现拆解

  1. 修改 server_args.py 中 disable_custom_all_reduce 字段定义:将简单的 bool 描述改为 Arg(help="...", resolvable=True) 包装,使该字段可在模型覆盖中合法声明。
  2. 修改 server_args.py 中 enable_aiter_allreduce_fusion 字段定义:添加 Arg(help="...", resolvable=True) 包装,同样使其可被模型覆盖声明。
  3. 更新测试白名单:在 test/registered/unit/test_model_overrides.pytest_server_args_whitelist_is_exactly_the_migrated_fields 测试中,向白名单集合添加 "disable_custom_all_reduce""enable_aiter_allreduce_fusion",确保覆盖字段与白名单一致。
  4. 验证:在 MI355X 上以 tp8 mxfp8 配置启动,无需 --enable-aiter-allreduce-fusion 即可正常启动并提供服务。
文件 模块 状态 重要度
python/sglang/srt/server_args.py 启动参数 modified 5.57
test/registered/unit/test_model_overrides.py 覆盖注册 modified 3.77

关键源码片段

python/sglang/srt/server_args.py core-logic

核心修复文件:为 disable_custom_all_reduce 和 enable_aiter_allreduce_fusion 两个字段的 Arg 添加 resolvable=True,使其可在模型覆盖中合法声明。

# 修改前(base)
disable_custom_all_reduce: A[
    bool,
    "Disable the custom all-reduce kernel and fall back to NCCL.",
] = False# 修改后(head):使用 Arg 包装并设置 resolvable=True
# 这样模型覆盖(如 _minimax_m3_overrides)可以合法声明此字段
disable_custom_all_reduce: A[
    bool,
    Arg(
        help="Disable the custom all-reduce kernel and fall back to NCCL.",
        resolvable=True, # 允许模型覆盖声明此字段
    ),
] = False# 类似地,enable_aiter_allreduce_fusion 也添加了 resolvable=True
enable_aiter_allreduce_fusion: A[
    bool,
    Arg(help="Enable Aiter AllReduce Fusion.", resolvable=True),
] = False
test/registered/unit/test_model_overrides.py test-coverage

测试配套:将新增的可解析字段加入白名单集合,确保与 server_args.py 变更一致,避免 CI 失败。

# 在 frozenset 白名单末尾添加两个新字段
frozenset(
    {
        ...
        "flashinfer_allreduce_fusion_backend",
        "fp8_gemm_runner_backend",
        "disable_custom_all_reduce", # 新增
        "enable_aiter_allreduce_fusion", # 新增
    }
),

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险低。仅修改了两个字段的元数据(添加 resolvable=True)和测试白名单,未改变默认值或逻辑行为。潜在风险:若其他模型覆盖也依赖这两个字段但尚未添加 resolvable,理论上均会触发类似崩溃,但本次修复已覆盖最常见场景。测试白名单同步更新,确保 CI 检测通过。

影响范围小。仅影响 ROCm 平台 MiniMax-M3 模型的启动流程。修复后,用户无需传递 --enable-aiter-allreduce-fusion 即可正常启动,包括标准 EP 路径。对其他模型或平台无影响。

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论