Prhub

#23125 [CI] Fix mxfp8 TrtllmGenMoe test

原始 PR 作者 zianglih 合并时间 2026-04-24 17:02 文件变更 1 提交数 2 评论 9 代码增减 +2 / -4

执行摘要

修复 MXFP8 MoE 测试由于回归导致的不稳定

PR#21667 导致 MXFP8 测试回归(参见 PR#22136),在线量化路径不稳定使测试频繁失败。作者意图通过使用离线量化检查点和更换 GEMM 后端来恢复 CI 稳定性。

该 PR 应被合并以快速恢复 CI,但建议创建后续 Issue 跟踪:

1) 将离线检查点迁移至 SGLang 官方 HF 组织;
2) 修复 flashinfer_trtllm 后端的 padding 不稳定问题,使其能重新成为默认测试后端。

讨论亮点

gemini-code-assist[bot] 指出:将模型换为个人仓库存在长期可用性和安全性风险,建议迁移至官方组织仓库。
同一 reviewer 还指出:改为 flashinfer_cutlass 后,名为 flashinfer_trtllm 的测试不再充分覆盖目标后端,建议根本修复 padding 问题而不是绕过。
维护者 b8zhong 最终批准并触发 CI 重跑,表明当前修复为临时解决方案。

实现拆解

  1. 替换模型为离线量化检查点:将 FlashinferTrtllmGenMoeBackendMXFP8Base.setUpClass 中的模型路径从官方仓库 Qwen/Qwen3-30B-A3B-Instruct-2507 改为个人仓库 zianglih/Qwen3-30B-A3B-Instruct-2507-MXFP8,该检查点已预先量化,避免 CI 执行时在线量化路径的波动。
  2. 切换 --fp8-gemm-backendflashinfer_cutlass:移除原来使用的 flashinfer_trtllm(需额外 padding 修复才能稳定),改用 flashinfer_cutlass 作为 FP8 GEMM 后端。同时去掉了不再需要的 --quantization mxfp8 参数(因为模型本身已经是量化格式)。
  3. 仅修改测试配置:无需改动任何源码或数据流,仅在测试类 setUpClass 中调整了启动参数两行。
文件 模块 状态 重要度
test/registered/backends/test_flashinfer_trtllm_gen_moe_backend.py 测试配置 modified 4.51

关键源码片段

test/registered/backends/test_flashinfer_trtllm_gen_moe_backend.py test-coverage

唯一的变更文件,修复了 MXFP8 测试配置,包含模型替换和 GEMM 后端切换

# test/registered/backends/test_flashinfer_trtllm_gen_moe_backend.py
# FlashinferTrtllmGenMoeBackendMXFP8Base 类的 setUpClass 方法@classmethod
def setUpClass(cls):
    # 使用预量化检查点,避免在线量化 CI 波动
    cls.model = "zianglih/Qwen3-30B-A3B-Instruct-2507-MXFP8"
    cls.base_url = DEFAULT_URL_FOR_TEST
    cls.process = popen_launch_server(
        cls.model,
        cls.base_url,
        timeout=DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH,
        env={**os.environ, "SGLANG_ENABLE_JIT_DEEPGEMM": "False"},
        other_args=[
            # 切换 gemm 后端到 cutlass 以规避 trtllm 后端缺失 padding 修复的问题
            "--fp8-gemm-backend",
            "flashinfer_cutlass",
            "--moe-runner-backend",
            cls.backend,
            "--tp-size",
            "4",
            "--ep-size",
            "4",
            "--mem-fraction-static",
            "0.7",
        ],
    )

评论区精华

使用个人仓库模型的安全性 安全

gemini-code-assist[bot] 指出将模型换为个人仓库 `zianglih/Qwen3-30B-A3B-Instruct-2507-MXFP8` 存在长期可用性和安全风险,建议迁移至官方组织仓库

结论:未解决,但 PR 已合并;需要后续跟踪 · unresolved

切换 GEMM 后端降低测试覆盖 测试

gemini-code-assist[bot] 指出将 `--fp8-gemm-backend` 从 `flashinfer_trtllm` 改为 `flashinfer_cutlass` 导致 `test_flashinfer_trtllm_gen_moe_backend.py` 不再覆盖目标后端,建议修复 padding 问题而非绕过

结论:未解决,但 PR 已合并;需要后续根本修复 · unresolved

风险与影响

  1. 测试覆盖度降低flashinfer_trtllm 后端在 MXFP8 场景下不再被该测试覆盖,可能导致该回路的回归漏测。
  2. 模型来源非官方zianglih/Qwen3-30B-A3B-Instruct-2507-MXFP8 是个人仓库的离线检查点,若该仓库被删除或变更,CI 将再次失败。
  3. 无回归性能或安全风险,因为仅涉及测试配置变更。

正面:恢复 CI 中 MXFP8 测试的稳定性,避免阻塞其他 PR 的合并流程。
负面:长期来看需要修复 flashinfer_trtllm 后端的 padding 问题并换回官方模型,否则该测试的价值被削弱。
影响范围限于单个测试文件,团队成本低。

模型来源非官方 测试覆盖度降低 临时绕过未根本修复

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论