Prhub

#55453 [CI] Restore clean GPU state before OAI Triton MoE tests

原始 PR 作者 khluu 合并时间 2026-09-08 16:15 文件变更 1 提交数 1 评论 3 代码增减 +1 / -0

执行摘要

将 `test_modular_oai_triton_moe.py` 加入 GPU 内存清理白名单,修复 H100 CI 测试隔离失败。

H100 FP8 MoE 测试车道在 13 次主分支告警中失败。具体表现为 test_modular_oai_triton_moe.py 的 14 个测试用例在等待 GPU 使用率低于 10% 时失败,而内存使用率稳定在 14.40 GiB(79.65 GiB GPU)。PR#54954 在为 MoE 测试添加清理白名单时,遗漏了此文件。本 PR 旨在恢复该文件的清理入口,修复此 CI 回归。

这是一个简单、明确且必要的 CI 修复。由于其直接解决了影响多天的 CI 失败问题,且变更微小、风险极低,建议快速合入。该 PR 适合作为代码规范或测试最佳实践(如如何维护测试清理白名单)的参考案例。

讨论亮点

PR body 详细说明了问题背景(H100 FP8 MoE 车道失败)、根本原因(PR#54954 遗漏)和验证方法(本地 H200 测试复现与修复)。评论区主要为 CI 触发和自动化机器人消息,未出现关于设计或实现的争议性讨论。

实现拆解

  1. 变更入口:修改 tests/kernels/moe/conftest.py 文件。
  2. 核心逻辑:在 NEEDS_CLEAN_ENTRY frozenset 中添加字符串 "test_modular_oai_triton_moe.py"。此集合是 pytest conftest 中的一个配置,用于标识哪些测试文件在开始执行前需要进行全局 GPU 内存和分布式环境的清理。
  3. 变更原因:PR#54954 引入了清理白名单机制,但遗漏了 test_modular_oai_triton_moe.py。该文件中的测试函数显式调用了 wait_for_gpu_memory_to_clear,其正确性依赖于从干净的 GPU 状态开始。将其加入白名单,可以恢复该文件测试前的清理行为。
  4. 影响:此变更仅影响 CI 测试的执行流程,不涉及任何生产代码逻辑。它确保了该测试文件在 CI 环境中的稳定性和正确性。
文件 模块 状态 重要度
tests/kernels/moe/conftest.py 测试配置 modified 3.11

关键源码片段

tests/kernels/moe/conftest.py test-coverage

这是本次变更的唯一文件。其中定义的 `NEEDS_CLEAN_ENTRY` 集合控制着 MoE 测试目录下各测试文件的 GPU 内存清理行为。将 `test_modular_oai_triton_moe.py` 加入此集合是修复 CI 回归的核心动作。

# 测试配置文件,控制哪些 MoE 测试文件在开始前需要执行全局 GPU 内存清理。
# PR#54954 引入此白名单,但遗漏了 test_modular_oai_triton_moe.py,
# 导致其在 H100 CI 上因内存未释放而失败。
NEEDS_CLEAN_ENTRY = frozenset(
    {
        # Fail unless they start from a clean distributed and memory state,
        # which they used to get only as a side effect of the preceding test
        # cleaning up after itself.
        "test_moe_layer.py",
        # 本次修复:将遗漏的文件加入白名单,恢复其测试前的清理行为。
        "test_modular_oai_triton_moe.py",
        "test_ocp_mx_moe.py",
        "test_zero_expert_moe.py",
        # Execute no test on ROCm, where this was measured, so nothing is known
        # about how they behave without the per-test cleanup. Cleaned on entry
        # as a precaution; drop once they have been seen green without it.
        "test_batched_deepgemm.py",
        "test_deepep_deepgemm_moe.py",
        "test_deepep_moe.py",
        "test_deepep_v2_moe.py",
        "test_deepgemm.py",
        "test_grouped_topk.py",
        "test_mxfp4_moe.py",
        "test_shared_fused_moe_routed_transform.py",
        "test_silu_mul_per_token_group_quant_fp8_colmajor.py",
        "test_situ_mul_fp8_quant.py",
    }
)

评论区精华

CI 测试失败修复与验证 测试

PR body 详细描述了 H100 FP8 MoE 测试车道的持续失败(13 次告警),并指出 PR#54954 在禁用全局清理时遗漏了 `test_modular_oai_triton_moe.py`。作者提供了本地 H200 GPU 上的复现和修复验证结果。

结论:通过将目标文件加入 `NEEDS_CLEAN_ENTRY` 白名单恢复清理,本地验证成功,等待 H100 CI 车道确认。 · 已解决

风险与影响

风险极低。变更仅在测试配置文件中添加一个字符串到白名单集合。不改变任何测试逻辑、断言或生产代码。最坏情况是 CI 清理流程运行不必要的清理(但这是预期行为),不会导致功能回归或性能下降。

用户影响:无直接影响。这是纯 CI 修复,确保 MoE 测试在 H100 GPU 上稳定运行,从而间接保障了 FP8 MoE 内核的质量。
系统影响:修复了 CI 流水线中的测试隔离问题,提升了构建可靠性和开发体验。
团队影响:解决了持续 13 次的 CI 失败告警,减少了团队排查 CI 问题的负担。

CI 测试隔离

关联 Issue

#54202 [MoE] Re-enable TRITON_UNFUSED in the gpt-oss MXFP4 dispatch list

完整报告

参与讨论