执行摘要
- 一句话:传递 merge-base 到 ROCm 容器,修复预编译 wheel 元数据解析
- 推荐动作:值得精读。该 PR 展示了在 CI 流水线中处理 artifact 镜像缺乏 git 元数据的典型解法:在 agent 点计算必要信息并通过环境变量传递,同时保留 fallback 机制以兼容不同环境。对设计跨环境 CI 脚本有参考价值。
功能与动机
在 ROCm CI 中,python_only_compile.sh 脚本依赖 git merge-base 来获取 wheels.vllm.ai 上对应提交的预编译 wheel 元数据。然而,当 /vllm-workspace 是 artifact 打包布局时,没有 .git 目录,导致 git merge-base 执行失败,测试无法进行。PR body 指出需要将 merge-base 传入容器(作为环境变量),同时保留脚本中的 git fallback 以兼容仍有 .git 的场景。
实现拆解
-
Agent 端计算 merge-base:在 .buildkite/scripts/hardware_ci/run-amd-test.sh 中,利用 agent 上完整的 git checkout 计算 merge-base HEAD origin/main,若计算失败则回退到 BUILDKITE_COMMIT。随后通过 -e VLLM_STANDALONE_MERGE_BASE 将该值传入 Docker 容器。同时检测命令中是否包含 python_only_compile.sh,若是则禁用 artifact 镜像(VLLM_CI_USE_ARTIFACTS=0)。
-
脚本优先使用环境变量:修改 tests/standalone_tests/python_only_compile.sh,使 merge_base_commit 优先读取 VLLM_STANDALONE_MERGE_BASE,其次尝试在 /vllm-workspace 和当前目录执行 git merge-base,同时增加目录结构检查(确保 src/vllm 或 vllm 存在)。此外,根据 VLLM_TARGET_DEVICE 是否为 rocm 来决定使用 setup.py develop 还是 pip install -e。
-
配置 AMD CI 镜像:在 .buildkite/test_areas/misc.yaml 的 Python-only Installation 步骤下添加 mirror 块,指定 AMD 设备 mi325_1,依赖 image-build-amd,并将 vllm/platforms/rocm.py 加入源文件依赖,确保 ROCm 专用文件变更会触发该测试。
关键文件:
tests/standalone_tests/python_only_compile.sh(模块 安装测试;类别 test;类型 test-coverage): 核心测试脚本,实现了 merge-base 的 fallback 链(环境变量 → git)并为 ROCm 环境适配 setup.py develop 安装方式。
.buildkite/scripts/hardware_ci/run-amd-test.sh(模块 CI 脚本;类别 infra;类型 infrastructure): CI 基础设施脚本,主要改动:在 agent 上计算 merge-base 并通过环境变量传入容器;同时检测 python_only_compile 场景禁用 artifact 镜像。
.buildkite/test_areas/misc.yaml(模块 CI 配置;类别 config;类型 configuration): CI 配置,为 python-only 安装测试添加 AMD 镜像 mirror 配置,使其可以在 ROCm CI 上运行。
关键符号:未识别
关键源码片段
tests/standalone_tests/python_only_compile.sh
核心测试脚本,实现了 merge-base 的 fallback 链(环境变量 → git)并为 ROCm 环境适配 setup.py develop 安装方式。
# 优先使用环境变量传递的 merge-base (来自 agent 完整 git 仓库)
# 如果不可用,尝试在 /vllm-workspace 内执行 git,再回退到当前目录 git
merge_base_commit=""
if [[ -n "${VLLM_STANDALONE_MERGE_BASE:-}" ]]; then
merge_base_commit="${VLLM_STANDALONE_MERGE_BASE}"
elif merge_base_commit="$(git -C /vllm-workspace merge-base HEAD origin/main 2>/dev/null)"; then
:
elif merge_base_commit="$(git merge-base HEAD origin/main 2>/dev/null)"; then
:
else
echo "ERROR: need a git checkout or VLLM_STANDALONE_MERGE_BASE" >&2
exit 1
fi
# 使用 merge_base_commit 拼接 metadata URL 并下载验证
meta_json_url="https://wheels.vllm.ai/$merge_base_commit/vllm/metadata.json"
echo "INFO: will use metadata.json from $meta_json_url"
评论区精华
评审人员 AndreasKaratzas 和 tjtanaa 均直接批准,未产生实质性技术讨论。
风险与影响
- 风险:新增环境变量依赖 agent 具备完整 git 仓库;回退到 BUILDKITE_COMMIT 可能不准确(但脚本内仍有 git 回退作为兜底,且测试本身是 optional);仅影响 ROCm CI。
- 影响:影响范围局限于 ROCm CI 的 python-only 安装测试步骤,提升其稳定性,减少因缺失 merge-base 导致的失败。对用户无直接影响。团队内减少人工干预和重试。
- 风险标记:依赖 agent git 环境, 新环境变量影响回退路径
关联脉络
参与讨论