Prhub

#27163 [AMD] Disable AITER custom all-gather in DeepSeek-R1-MXFP4 8-GPU test

原始 PR 作者 yctseng0211 合并时间 2026-06-04 04:38 文件变更 1 提交数 1 评论 1 代码增减 +8 / -0

执行摘要

禁用在 MI35x TP=8 上导致 crash 的 AITER all-gather

MI35x 8-GPU 上运行 DeepSeek-R1-MXFP4 测试时,decode 阶段出现多 rank 的 "Memory access fault by GPU node-N ... Reason: Unknown" 错误,而权重加载和 CUDA-graph 捕获均正常。二分定位到 PR25093 引入的 AITER 自定义 all-gather 是回归点。

值得关注的是 PR 中对根因的详细分析(AITER CUDA-graph 缓冲区注册偏移问题),这对理解多 GPU 通信与 CUDA-graph 交互有帮助。生产环境下建议跟踪 AITER 的修复,及时恢复自定义 all-gather 以保持性能。

讨论亮点

无实质性讨论。PR 获得 HaiShaw 批准,没有 review 评论。

实现拆解

  1. 定位问题:在 test/registered/amd/test_deepseek_r1_mxfp4_8gpu.py 中,两个测试类 (TestDeepseekR1MXFP4TestDeepseekR1MXFP4MTP) 的 setUpClass 方法中添加 envs.SGLANG_USE_AITER_AG.set(False),禁用 AITER 自定义 all-gather。
  2. 注释说明:为每个改动处添加注释,解释这是临时解决方案,并指向 PR 描述以了解根因。
  3. 验证测试:在禁用该标志后,4 项测试(GSM8K 精度、单 batch 速度、MTP GSM8K 精度、MTP 单 batch 速度)均通过。
文件 模块 状态 重要度
test/registered/amd/test_deepseek_r1_mxfp4_8gpu.py AMD 测试 modified 4.43

关键源码片段

test/registered/amd/test_deepseek_r1_mxfp4_8gpu.py test-coverage

添加 SGLANG_USE_AITER_AG=False 环境变量以绕过 AITER all-gather bug,所有 CI 测试由此通过。

# test/registered/amd/test_deepseek_r1_mxfp4_8gpu.pyclass TestDeepseekR1MXFP4(CustomTestCase):
    @classmethod
    def setUpClass(cls):
        cls.model = DEEPSEEK_R1_MODEL_PATH
        cls.base_url = DEFAULT_URL_FOR_TEST
​
        # Workaround: AITER custom all-gather corrupts CUDA-graph IPC buffer
        # registration and triggers a decode-time "Memory access fault" on
        # MI35x TP=8. Disable until the AITER-side fix lands (see PR body).
        envs.SGLANG_USE_AITER_AG.set(False)
​
        other_args = [
            "--tp", "8",
            "--chunked-prefill-size", "131072",
            "--model-loader-extra-config", '{"enable_multithread_load": true}',
        ]
        cls.process = popen_launch_server(
            cls.model, cls.base_url,
            timeout=SERVER_LAUNCH_TIMEOUT, other_args=other_args,
        )class TestDeepseekR1MXFP4MTP(CustomTestCase):
    @classmethod
    def setUpClass(cls):
        cls.model = DEEPSEEK_R1_MODEL_PATH
        cls.base_url = DEFAULT_URL_FOR_TEST
​
        envs.SGLANG_ENABLE_OVERLAP_PLAN_STREAM.set(True)
        # Same AITER custom all-gather workaround as TestDeepseekR1MXFP4 above.
        envs.SGLANG_USE_AITER_AG.set(False)
​
        other_args = [
            "--tp", "8",
            "--chunked-prefill-size", "131072",
            "--speculative-algorithm", "EAGLE",
            "--speculative-num-steps", "3",
            "--speculative-eagle-topk", "1",
            "--speculative-num-draft-tokens", "4",
            "--model-loader-extra-config", '{"enable_multithread_load": true}',
        ]
        cls.process = popen_launch_server(
            cls.model, cls.base_url,
            timeout=SERVER_LAUNCH_TIMEOUT, other_args=other_args,
        )

评论区精华

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

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

风险与影响

该 PR 本身风险很低,仅修改测试配置。但需注意:

  • 禁用 AITER custom all-gather 后,DeepSeek-R1-MXFP4 在 MI35x 上的 all-gather 性能可能下降,因为 fallback 到原生实现(如 NCCL)。
  • 一旦 AITER 上游修复问题,需要删除此工作区并重新启用标志。

直接影响 SGLang 在 AMD MI35x 平台上的 DeepSeek-R1-MXFP4 测试流程:修复了 8-GPU 配置下 decode 阶段的内存访问故障,使 4 项关键测试(GSM8K 精度、吞吐量、MTP 版精度与吞吐量)恢复正常。对用户无直接影响,因为测试环境变量仅在 CI 中设置。

临时工作区 依赖上游修复

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论