Prhub

#23382 [AMD] skip deterministic inference for MLA FP8 test

原始 PR 作者 bingxche 合并时间 2026-04-23 15:43 文件变更 1 提交数 4 评论 3 代码增减 +17 / -13

执行摘要

为 AMD CI 跳过 MLA FP8 测试中的确定性推理标志,修复 CI 失败。

PR #23303添加的--enable-deterministic-inference标志在NVIDIA上工作正常,但在AMD CI分区(stage-b-test-1-gpu-small-amd)上导致服务器启动失败,错误为:'ValueError: Currently only ['flashinfer', 'fa3', 'triton'] attention backends are supported for deterministic inference, but you explicitly specified 'aiter'.'。根本原因是ROCm后端存在三个叠加的bug:

1) 默认注意力后端aiter不在确定性推理允许列表中;
2) 绕过此问题设置--attention-backend triton会触发FUSED_ROPE_ROCM问题;
3) 进一步禁用该功能后遇到CUDA图捕获时的GPU内存访问错误。因此,暂时在AMD CI上跳过该标志,恢复非确定性基线,直到上游ROCm问题解决。

该PR值得快速浏览,以了解如何优雅处理跨平台CI测试中的后端差异。重点关注条件逻辑的设计,它展示了在存在上游bug时如何临时绕过问题而不破坏现有功能。对于涉及多后端支持的团队,这是一个实用的模式。

讨论亮点

Reviewer HaiShaw在批准前要求作者创建一个issue,以记录未来需要在AMD ROCm上为该测试添加fp8_e4m3 kv-cache-dtype--enable-deterministic-inference支持。作者已创建issue #23536并链接到本PR,确保有跟踪机制解决上游ROCm问题。讨论焦点在于长期修复的规划,而非当前变更的技术争议。

实现拆解

  1. 导入依赖调整:在test/registered/mla/test_mla_fp8.py中,从sglang.test.test_utils导入is_in_amd_ci函数,用于检测当前是否在AMD CI环境中。
  2. 重构服务器启动参数:将setUpClass方法中的other_args列表从内联定义改为变量,并移除--enable-deterministic-inference标志的硬编码。
  3. 条件添加标志:添加条件判断if not is_in_amd_ci():,仅在非AMD CI环境下将--enable-deterministic-inference标志追加到other_args中,从而在AMD CI上跳过该标志。
  4. 测试配套:此变更仅影响测试逻辑,不修改生产代码;确保NVIDIA路径保持原有行为(添加标志以稳定MGSM分数),AMD路径回退到非确定性推理以避免CI失败。
文件 模块 状态 重要度
test/registered/mla/test_mla_fp8.py MLA 测试 modified 5.2

关键符号

TestMLA.setUpClass is_in_amd_ci

关键源码片段

test/registered/mla/test_mla_fp8.py test-coverage

这是唯一变更的文件,包含测试逻辑的核心调整,通过条件判断跳过 AMD CI 上的确定性推理标志,直接解决 CI 失败问题。

class TestMLA(CustomTestCase, MGSMEnMixin):
    mgsm_en_score_threshold = 0.8
​
    @classmethod
    def setUpClass(cls):
        cls.model = DEFAULT_MLA_FP8_MODEL_NAME_FOR_TEST
        cls.base_url = DEFAULT_URL_FOR_TEST
        # 重构参数列表为变量,便于条件添加
        other_args = [
            "--trust-remote-code",
            "--kv-cache-dtype",
            "fp8_e5m2",
            # 注释说明确定性推理的作用:固定 MoE 专家调度和内核归约顺序,减少 MGSM 分数波动
        ]
        # 关键条件判断:仅在非 AMD CI 环境下添加确定性推理标志
        if not is_in_amd_ci():
            # 在 AMD 上,默认注意力后端(aiter)不在确定性推理允许列表中,导致服务器启动失败,因此跳过此标志
            other_args.append("--enable-deterministic-inference")
        # 使用条件构建后的参数启动服务器
        cls.process = popen_launch_server(
            cls.model,
            cls.base_url,
            timeout=DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH,
            other_args=other_args,
        )

评论区精华

AMD ROCm 兼容性跟踪 other

Reviewer HaiShaw 要求作者创建一个 issue,以记录未来需要在 AMD ROCm 上为该测试添加 fp8_e4m3 kv-cache-dtype 和 --enable-deterministic-inference 支持。

结论:作者创建了 issue #23536 并链接到 PR,确保有长期修复计划。 · 已解决

风险与影响

技术风险

  • 回归风险:低。变更仅影响测试逻辑,NVIDIA路径保持不变,AMD路径回退到已知可工作的非确定性基线,不会引入新bug。
  • 兼容性风险:无。不涉及生产代码或API变更。
  • 性能影响:无。测试中AMD路径禁用确定性推理可能略微增加MGSM分数的波动性,但这是预期内的临时措施。
    具体风险点:依赖is_in_amd_ci()函数的准确性;如果该函数误判环境,可能导致标志错误添加或跳过,但函数来自项目内部工具,风险可控。

对用户的影响:无直接影响,因为这是内部CI测试调整。
对系统的影响:修复了AMD CI分区上的测试失败,确保CI流水线稳定运行。
对团队的影响:减少了CI阻塞,提高了开发效率;同时通过关联issue #23536明确了未来修复ROCm兼容性的任务,有助于长期维护。

平台差异处理 临时绕过上游 bug

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论