执行摘要
- 一句话:为 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 平台上的正确性。
实现拆解
- 主配置添加新 job:在
.buildkite/test-amd.yaml 中新增 Speculators Correctness 和 Extract Hidden States Integration 两个测试组,均设定为 optional: true,并详细指定源文件依赖,确保只有在相关模块变更时才会触发。
- 测试区域添加 AMD mirror:在
.buildkite/test_areas/ 下的多个 YAML 文件中,为 attention、engine、entrypoints、spec_decode、models_multimodal、lm_eval、models_language、kernels 等测试组增加 mirror 配置,指定 AMD 设备(MI300 或 MI325)和超时时间。
- 调整 CI 运行脚本:在
.buildkite/scripts/hardware_ci/run-amd-test.sh 中,设置 Hugging Face 下载超时为 300 秒、ETAG 超时为 60 秒,统一容器内 Python 路径为 /vllm-workspace,并定义容器级缓存目录(torchinductor、triton、VLLM 等),以解决冷缓存超时问题。
- Dockerfile 更新:在
docker/Dockerfile.rocm 中增加了必要的依赖安装,确保镜像构建时包含所需工具(如 torchcodec)。
- 集成测试:这些配置变更不直接修改应用代码,而是通过 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 中先行验证,两者共享测试配置
参与讨论