Prhub

#47180 [CI] Add TORCH_NIGHTLY=1 build mode (run full suite on torch nightly)

原始 PR 作者 atalman 合并时间 2026-07-10 16:38 文件变更 5 提交数 2 评论 6 代码增减 +82 / -14

执行摘要

新增 TORCH_NIGHTLY=1 模式支持 PyTorch nightly 全量 CI

来自 PR body: 'Add an opt-in path to build and run the existing vLLM CI suite against the latest PyTorch nightly wheels, to produce a continuous "vLLM vs torch nightly" signal (e.g. a daily Buildkite scheduled build).'

本 PR 设计清晰,采用图像交换避免管道复制,值得 CI 维护者阅读。同时可作为一个如何实现 CI 变体配置的参考案例。

讨论亮点

两个主要讨论线程:

  • prepare-torch-nightly.sh 未被使用:khluu 指出该文件未在任何地方被调用;atalman 回应称该文件在图像交换方法中已冗余,并已将其删除(在提交中移除)。
  • trigger-ci-build.sh 的使用频率:khluu 对该脚本的实际用途提出疑问;atalman 承认该脚本主要用于 Simon 的手动触发,本次仅添加 --torch-nightly 标志作为便利,生产路径是标签和调度构建。

实现拆解

  1. 在 image_build.sh 中新增 TORCH_NIGHTLY=1 检测,条件满足时委托给专用的 nightly 构建脚本 image_build_torch_nightly.sh,将镜像标记为常规标签,从而复用整个 CI 管道。
  2. 在 trigger-ci-build.sh 中添加 --torch-nightly 标志,设置 TORCH_NIGHTLY=1 并强制 RUN_ALL=1,便于手动触发 nightly 构建。
  3. 在 check-ray-compatibility.sh 中根据 TORCH_NIGHTLY 标志选择 nightly 或 stable 的 PyTorch 索引 URL,避免兼容性检查失败。
  4. 修改 CMakeLists.txt 在 TORCH_NIGHTLY=1 时跳过 torch 版本不匹配警告,因为 nightly 构建的版本并非预期的稳定版本。
  5. 更新 docs/contributing/ci/update_pytorch_version.md 文档,描述如何使用 TORCH_NIGHTLY=1 标志进行 nightly 测试。
文件 模块 状态 重要度
.buildkite/scripts/trigger-ci-build.sh CI 脚本 modified 4.35
.buildkite/image_build/image_build.sh 构建脚本 modified 3.65
.buildkite/scripts/check-ray-compatibility.sh CI 脚本 modified 3.29
CMakeLists.txt 构建系统 modified 2.71
docs/contributing/ci/update_pytorch_version.md 文档 modified 2.72

关键源码片段

.buildkite/scripts/trigger-ci-build.sh core-logic

核心入口脚本,新增 --torch-nightly 标签和环境变量数组构建逻辑

# 默认不启用 torch nightly
TORCH_NIGHTLY=false# 选项解析循环
while [[ $# -gt 0 ]]; do
    case $1 in
        --torch-nightly)
            # 启用 torch nightly 构建模式
            TORCH_NIGHTLY=true
            shift
            ;;
        # ... 其他选项 ...
    esac
done# 构建环境变量数组,用于传递给 Buildkite 构建
BUILD_ENV=("RUN_ALL=1" "NIGHTLY=1")
if [[ "$TORCH_NIGHTLY" == true ]]; then
    # 添加 TORCH_NIGHTLY=1 以触发夜间构建
    BUILD_ENV+=("TORCH_NIGHTLY=1")
fi# 组装 Buildkite 命令
CMD=(bk build create --commit "${COMMIT}" --branch "${BRANCH}" --message "${MESSAGE}")
for env_var in "${BUILD_ENV[@]}"; do
    CMD+=(--env "${env_var}")
done
.buildkite/image_build/image_build.sh core-logic

构建镜像的核心脚本,新增 TORCH_NIGHTLY 检测并委托给 nightly 构建脚本

# 检测 TORCH_NIGHTLY=1 以构建基于 PyTorch nightly 的 CI 镜像
if [[ "${TORCH_NIGHTLY:-0}" == "1" ]]; then
    echo "--- :warning: TORCH_NIGHTLY=1 -- building base image on PyTorch nightly"
    SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
    # 委托给专门的 nightly 构建脚本,并传递所有参数
    exec "${SCRIPT_DIR}/image_build_torch_nightly.sh" \
        "${REGISTRY}" "${REPO}" "${BUILDKITE_COMMIT}" "${BRANCH}" "${IMAGE_TAG}"
fi

评论区精华

prepare-torch-nightly.sh 未被调用 question

khluu 指出 .buildkite/scripts/prepare-torch-nightly.sh 文件未在任何地方被调用。

结论:atalman 确认该文件因图像交换方法已冗余,已在提交中移除。 · 已解决

trigger-ci-build.sh 的使用频率 question

khluu 询问 trigger-ci-build.sh 是否还有其他用途,认为除 Simon 手动触发外可能不再使用。

结论:atalman 同意该脚本主要用于手动触发,本次仅添加 --torch-nightly 标志作为便利,生产路径是准备标签和调度构建。 · 已解决

风险与影响

风险较低。主要风险包括:nightly 镜像可能因依赖冲突或 torch bug 导致构建失败;check-ray-compatibility.sh 中索引 URL 选择逻辑需确保 TORCH_NIGHTLY 未设置时行为正确;CMakeLists.txt 跳过警告可能掩盖非 nightly 构建的版本不匹配,但由于仅在明确设置 TORCH_NIGHTLY=1 时跳过,风险可控。

对用户无直接影响。对 CI 团队提供了新的测试维度,有助于提前发现 PyTorch 兼容性问题。对系统增加一个可选的构建模式,由环境变量或标签控制,不影响现有流程。

新增可选 CI 变体 nightly 构建不稳定风险

关联 Issue

#382 Add TORCH_NIGHTLY flag for full CI run against torch nightly
#46510 [Core] Update requirements to use PyTorch nightly wheels

完整报告

参与讨论