# PR #42793 完整报告

- 仓库：`vllm-project/vllm`
- 标题：[ROCm][CI] Stage C mirrors
- 合并时间：2026-06-08 14:00
- 原文链接：http://prhub.com.cn/vllm-project/vllm/pull/42793

---

# 执行摘要

- 一句话：为 ROCm CI 新增 Stage C 镜像测试组
- 推荐动作：建议合并本 PR（已合并），但后续应跟进 review 中关于父步依赖缺失的问题，将 `vllm/platforms/rocm.py` 等文件添加到对应测试区域的 `source_file_dependencies` 中，确保 ROCm 代码变更能够正确触发镜像测试。本 PR 可以作为 CI 镜像模式的参考实现。

# 功能与动机

为了提升 ROCm 平台的测试覆盖和门控质量，需要将更多 CI 测试组镜像到 AMD GPU 硬件上运行。PR body 列出了所有镜像的测试组，并指定了 agent 数量（6 x mi300_1, 2 x mi325_1），确保关键功能在 AMD 平台上的正确性。

# 实现拆解

1. **主配置添加新 job**：在 `.buildkite/test-amd.yaml` 中新增 `Speculators Correctness` 和 `Extract Hidden States Integration` 两个测试组，均设定为 `optional: true`，并详细指定源文件依赖，确保只有在相关模块变更时才会触发。
2. **测试区域添加 AMD mirror**：在 `.buildkite/test_areas/` 下的多个 YAML 文件中，为 `attention`、`engine`、`entrypoints`、`spec_decode`、`models_multimodal`、`lm_eval`、`models_language`、`kernels` 等测试组增加 `mirror` 配置，指定 AMD 设备（MI300 或 MI325）和超时时间。
3. **调整 CI 运行脚本**：在 `.buildkite/scripts/hardware_ci/run-amd-test.sh` 中，设置 Hugging Face 下载超时为 300 秒、ETAG 超时为 60 秒，统一容器内 Python 路径为 `/vllm-workspace`，并定义容器级缓存目录（torchinductor、triton、VLLM 等），以解决冷缓存超时问题。
4. **Dockerfile 更新**：在 `docker/Dockerfile.rocm` 中增加了必要的依赖安装，确保镜像构建时包含所需工具（如 torchcodec）。
5. **集成测试**：这些配置变更不直接修改应用代码，而是通过 CI 流水线在每次 PR 时自动运行 AMD 镜像测试，验证 ROCm 平台的兼容性。

关键文件：
- `.buildkite/test-amd.yaml`（模块 构建配置；类别 config；类型 configuration）: 主 CI 配置文件，新增了 Speculators Correctness 和 Extract Hidden States Integration 两个测试 job，并调整了现有测试组配置。
- `.buildkite/test_areas/spec_decode.yaml`（模块 测试区域；类别 config；类型 configuration）: 为 Spec Decode 多个测试组（Speculators+MTP、Ngram+Suffix、Draft Model）添加了 AMD mirror 配置，指定 MI300 设备和超时。
- `.buildkite/scripts/hardware_ci/run-amd-test.sh`（模块 CI 脚本；类别 infra；类型 infrastructure）: CI 在 AMD 硬件上的执行脚本，进行了多项关键调整：增加 Hugging Face 下载超时、统一容器内 Python 路径、定义容器缓存目录等，以解决冷缓存超时问题。
- `.buildkite/test_areas/entrypoints.yaml`（模块 测试区域；类别 config；类型 configuration）: 为 Entrypoints Integration（API Server）和 OpenAI 正确性测试添加了 AMD mirror，并调整了设备分配（从 mi325_1 改为 mi300_1）。
- `.buildkite/test_areas/models_multimodal.yaml`（模块 测试区域；类别 config；类型 configuration）: 为 Multi-Modal Models 标准测试组（qwen2、qwen3+gemma、llava 等）和 Extended Pooling 添加了 AMD mirror，设备从 mi325_1 改为 mi300_1。
- `.buildkite/test_areas/attention.yaml`（模块 测试区域；类别 config；类型 configuration）: 为 V1 attention 测试添加了 AMD mirror，指定 MI300 设备和 70 分钟超时，并扩展了源文件依赖列表。
- `.buildkite/test_areas/engine.yaml`（模块 测试区域；类别 config；类型 configuration）: 为 Engine 测试组添加了 AMD mirror，确保引擎核心逻辑在 ROCm 上得到验证。
- `.buildkite/test_areas/lm_eval.yaml`（模块 测试区域；类别 config；类型 configuration）: 为 LM Eval Small Models 测试组添加了 AMD mirror，支持 ROCm 上的模型正确性评估。
- `.buildkite/test_areas/models_language.yaml`（模块 测试区域；类别 config；类型 configuration）: 为 Language Models 测试组添加了 AMD mirror，扩展语言模型测试覆盖。
- `.buildkite/test_areas/kernels.yaml`（模块 测试区域；类别 config；类型 configuration）: 为 Kernel 测试组添加了 AMD mirror，确保 ROCm 上 kernel 测试覆盖。
- `docker/Dockerfile.rocm`（模块 容器镜像；类别 infra；类型 infrastructure）: 更新 Dockerfile 以安装 torchcodec 等依赖，支持 AMD 测试的构建环境。

关键符号：未识别


# 评论区精华

在 review 中，gemini-code-assist[bot] 提出了多个建议：
1) 建议将 `Extract Hidden States Integration` 标记为 optional，以避免 CI 瓶颈——已采纳并设置 `optional: true`。
2) 指出 `attention`、`entrypoints`、`spec_decode` 等测试区域的父 step 中未包含 `vllm/platforms/rocm.py` 等 ROCm 特定依赖，可能导致修改这些文件时不触发镜像测试——该问题未在 PR 中修正，后续可以继续改进。

- Extract Hidden States Integration 的可选性 (design): 已采纳，该 job 在 test-amd.yaml 中已设置 optional: true
- 父 step source_file_dependencies 缺少 ROCm 文件 (correctness): 未在 PR 中修正，需后续改进

# 风险与影响

- 风险：
 1) 父 step 依赖缺失可能导致测试盲区，例如修改 `vllm/platforms/rocm.py` 不会触发 attention 等测试的 AMD 镜像，影响回归检测能力。
 2) 新增的 `Speculators Correctness` 和 `Extract Hidden States Integration` 测试超时均为 180 分钟，虽然标记为 optional，但仍会消耗 CI 资源，若频繁失败可能影响开发体验。
 3) 脚本中的路径和缓存配置变更（如 `PYTHONPATH`、`CONTAINER_TMPDIR`）可能与其他 CI 步骤产生冲突，需观察日志。
 4) 配置重复较多，维护成本上升。
 - 影响：正面：显著提升 AMD GPU 上的测试覆盖，使得 V1 attention、LLM Engine、Spec Decode 等核心功能在 ROCm 平台上获得门控级验证，有助于提前发现兼容性问题。负面影响：CI 执行总时间增加，需要更多 AMD agent 资源（6×mi300_1 + 2×mi325_1），配置复杂度提升。团队需要投入精力维护这些镜像配置与主步骤同步。
 - 风险标记：测试覆盖盲区（依赖缺失）, CI 时间延长风险 , 配置复杂度增加

# 关联脉络

- PR #44255 待定（lm-eval 相关）: Issue 评论中提及 lm-eval 相关变更将在此 PR 中先行验证，两者共享测试配置