Prhub

#50304 [CI][ROCm] Fix AMD nightly distributed regressions

原始 PR 作者 AndreasKaratzas 合并时间 2026-07-30 06:02 文件变更 2 提交数 2 评论 0 代码增减 +9 / -117

执行摘要

修复 AMD 夜间分布式测试回归:回滚过早的 AG/RS 测试并稳定 shutdown 内存检查

PR body 指出两个 CI 构建失败:自定义 all-reduce 测试因缺少 custom_all_gather 接口全部失败(见 Buildkite 链接),以及进程内 shutdown 测试在 MI300 上达到 2.01 GiB 但超出 2 GiB 阈值导致超时。这些失败阻碍了 AMD nightly CI 的通过。

建议立即合并。该 PR 无争议、风险低,且为保持 CI 稳定性所必需。值得关注的是,进程内 shutdown 测试的平台差异化处理可作为未来类似平台适配的参考模式。

讨论亮点

无 review 讨论。PR 由 mgoin 直接批准,claude[bot] 自动评论因 fork 而跳过审查。

实现拆解

  1. 回滚过早的自定义 AG/RS 测试:在 tests/distributed/test_custom_all_reduce.py 中删除两个测试函数 test_sp16_dispatches_only_to_mnnvl_lamporttest_custom_collectives_world_size_four,它们由 PR#50089 引入但依赖尚未合入的 Python 自定义 all-gather/reduce-scatter API。同时移除相关导入(SimpleNamespaceMockcustom_all_reduce 等)。保留现有的 all-reduce 测试(graph_allreduceeager_allreduce 和参数化 test_custom_allreduce),这些已在之前的 nightly 中通过。

  2. 稳定进程内 shutdown 测试:在 tests/v1/shutdown/test_delete.pytest_llm_delete_inprocess 中,为 ROCm 平台添加 wait_for_gpu_memory_to_clearthreshold_ratio=0.01(利用已有的 ROCm 4 GiB 空闲内存下限)和 timeout_s=SHUTDOWN_TEST_TIMEOUT_SEC // 2(内部超时,确保失败在子进程超时前报告)。CUDA 平台保持不变。

文件 模块 状态 重要度
tests/distributed/test_custom_all_reduce.py 自定义规约 modified 6.77
tests/v1/shutdown/test_delete.py 关闭流程 modified 4.68

关键符号

test_llm_delete_inprocess test_sp16_dispatches_only_to_mnnvl_lamport (deleted) test_custom_collectives_world_size_four (deleted)

关键源码片段

tests/v1/shutdown/test_delete.py test-coverage

为 ROCm 平台增加内存检查阈值和内部超时,修复 MI300 上进程内 shutdown 测试的超时失败。

# tests/v1/shutdown/test_delete.py ( 部分 )@create_new_process_for_each_test("fork" if current_platform.is_cuda() else "spawn")
@pytest.mark.timeout(SHUTDOWN_TEST_TIMEOUT_SEC)
@pytest.mark.parametrize("model", MODELS)
@pytest.mark.parametrize("send_one_request", [False, True])
def test_llm_delete_inprocess(
    monkeypatch,
    model: str,
    send_one_request: bool,
) -> None:
    """Test that VllmRunner frees GPU memory in in-process (no MP) mode."""
    with monkeypatch.context() as m:
        m.setenv("VLLM_ENABLE_V1_MULTIPROCESSING", "0")
​
        with VllmRunner(model) as vllm_model:
            if send_one_request:
                vllm_model.generate(
                    ["Hello my name is"],
                    SamplingParams(max_tokens=1),
                )
​
        wait_for_gpu_memory_to_clear(
            devices=[0],
            threshold_bytes=SHUTDOWN_TEST_THRESHOLD_BYTES,
            # 激活 helper 的 ROCm 空闲运行时下限。VllmRunner 在退出上下文时
            # 已执行稳定内存等待。
            threshold_ratio=0.01 if current_platform.is_rocm() else None,
            # 在外部 pytest 超时之前让子进程内失败。
            timeout_s=(
                SHUTDOWN_TEST_TIMEOUT_SEC // 2
                if current_platform.is_rocm()
                else SHUTDOWN_TEST_TIMEOUT_SEC
            ),
        )

评论区精华

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

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

风险与影响

风险极低。变更仅涉及测试文件:删除未就绪的测试用例和调整平台特定的内存检查参数。不触及生产代码、内核或配置。唯一潜在风险是若未来自定义 AG/RS API 合入后,删除的测试无法自动回归,但开发人员需在后续 PR 中重新添加。

影响范围:仅影响 ROCm CI 的 distirbuted 测试套件。CI 从 7/7 失败变为预期通过(对于该部分测试)。CUDA 测试不受影响。团队可立即恢复 nightly 构建的绿色状态。

仅测试变更 平台特定路径

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论