Prhub

#52108 [XPU][CI/Release][3/N] Add xpu wheel release to release pipeline

原始 PR 作者 jikunshang 合并时间 2026-08-14 14:00 文件变更 6 提交数 3 评论 3 代码增减 +99 / -29

执行摘要

为 XPU 新增预构建 wheel 的发布与安装支持

XPU 后端此前没有官方预构建 wheel,用户安装需要源码编译,且每次安装都需要手动卸载 NVIDIA 的 triton 包并安装 triton-xpu;部分依赖(如 xgrammar)还强制要求一个名为 triton 的发行版,直接安装会拉入 NVIDIA 专用包导致 XPU 上行为异常。PR body 明确目标为“Adds XPU wheel building and publishing support to the Buildkite release pipeline, enabling pre-built XPU wheels to be distributed via wheels.vllm.ai”。本次通过 triton==3.7.2+xpu shim 和发布流水线解决以上安装痛点。

推荐精读,面向发布基础设施维护者和 XPU 支持相关开发者。值得关注的设计决策:

  1. 用多阶段 target vllm-build 分离 wheel 构建与 runtime 镜像,避免把编译工具链带进最终镜像;
  2. triton==3.7.2+xpu 同发行版 shim 解决依赖命名冲突,比 uninstall/install 更可维护;
  3. 索引过滤刻意收窄到 vllm-*triton-*+xpu-*,防御性写法值得在其他平台复用。

对一般用户而言,主要是安装文档变化,可作为 XPU 安装路径参考。

讨论亮点

本 PR 没有实质性的开放讨论。唯一人工审批来自 bigPYJ1151 的 APPROVED,bot 评论仅为 Claude Code 手动审查提示。验证信息集中在 PR body:作者触发 release-v2 build 5120,并给出安装命令 uv pip install vllm --pre --extra-index-url=https://wheels.vllm.ai/9b7e36805bf42c0a23a58971fd72ba598fc1e984/xpu/ --extra-index-url=https://download.pytorch.org/whl/xpu --index-strategy unsafe-best-match 作为产物验收。标题中的 [3/N] 暗示这是一个系列变更,但本次评论中没有展开前序 PR 的设计权衡。

实现拆解

实现按 5 步推进:

  1. 发布流水线新增 XPU wheel 构建步骤(.buildkite/release-pipeline.yaml):在 CUDA/CPU 构建步骤之后新增 Build wheel - x86_64 - XPU,使用 docker build --target vllm-build -f docker/Dockerfile.xpu 产出 dist/*.whl,再用 upload-nightly-wheels.sh 上传到 s3://vllm-wheels/$BUILDKITE_COMMIT/,与既有平台构建/上传模式保持一致。

  2. Dockerfile.xpu 引入 vllm-build 多阶段目标:新增 FROM vllm-base AS vllm-build 阶段,安装 grpcio-toolsprotobufnanobind 与 xpu 依赖,把 rust-build 阶段产出的 vllm-rs_rust_*.so 复制进源码树,最后以 VLLM_TARGET_DEVICE=xpu python3 setup.py bdist_wheel --dist-dir=dist --py-limited-api=cp38 生成 wheel。同时从 runtime 阶段删除 uninstall triton triton-xpu && install triton-xpu==3.7.2 的手动交换,改由依赖解析自动获取 triton==3.7.2+xpu shim。

  3. Triton shim 发布脚本增强(.buildkite/scripts/xpu/publish-triton-shim.sh):新增非 dry-run 时的 BUILDKITE_COMMIT 为 40 位 commit hash 的校验;修正 --wheel-dir--output-dir 路径(改为 $work_dir/$PREFIX$work_dir);发布完成后额外执行 aws s3 cp 把 shim wheel 复制到 s3://$BUCKET/$COMMIT/ 下,使 nightly 索引能同时发现 vLLM wheel 与 shim。

  4. 索引生成适配(.buildkite/scripts/generate-nightly-index.py 与 .buildkite/scripts/generate-and-upload-nightly-index.sh):在 parse_from_filename() 的变体识别中加入 xpugenerate_index_and_metadata() 的非 nightly 过滤逻辑把 triton-*+xpu-* 也纳入;generate-and-upload-nightly-index.sh 从 commit 目录检测版本时改为只匹配 vllm-* 开头的 wheel,避免把 Triton shim wheel 当成版本来源。

  5. 文档更新(docs/getting_started/installation/gpu.xpu.inc.md):将“无预构建 XPU wheel”改为 nightly 与按 commit 安装的 uv pip install 命令(同时指向 PyTorch XPU index),说明 triton==3.7.2+xpu shim 的存在原因,并删除手动 uninstall/install Triton 的步骤。

测试与部署配套:本次没有新增自动化测试文件,验证主要依赖作者触发的 Buildkite release pipeline(build 5120)与 CI #83845,产物可在 https://wheels.vllm.ai/9b7e36805bf42c0a23a58971fd72ba598fc1e984/xpu 安装确认。

文件 模块 状态 重要度
.buildkite/scripts/generate-nightly-index.py 索引生成 modified 5.57
docker/Dockerfile.xpu 构建镜像 modified 4.61
.buildkite/release-pipeline.yaml 发布流水线 modified 4.12
.buildkite/scripts/xpu/publish-triton-shim.sh 发布脚本 modified 3.73
.buildkite/scripts/generate-and-upload-nightly-index.sh 索引脚本 modified 3.37
docs/getting_started/installation/gpu.xpu.inc.md 安装文档 modified 3.16

关键符号

parse_from_filename generate_index_and_metadata

关键源码片段

.buildkite/scripts/generate-nightly-index.py core-logic

核心索引脚本:负责解析 wheel 文件名变体并生成发布 /nightly 索引;本次加入 xpu 变体识别,并让非 nightly 索引同时收录 Triton shim wheel,是所有平台索引一致性的关键。

# 变体 (variant) 提取逻辑:从 wheel 版本号中识别平台后缀。
# 例:vllm-0.10.2rc2+cu129-... => variant='+cu129';
# dev 版本则取 dev 后一段作为 variant(如 .xpu)。
variant = None
if 'dev' in version:
    ver_after_dev = version.split('dev')[-1]
    if '.' in ver_after_dev:
        variant = ver_after_dev.split('.')[-1]
        version = version.removesuffix('.' + variant)
else:
    if '+' in version:
        version_part, suffix = version.split('+', 1)
        # 只把已知模式当作变体(rocmXXX、cuXXX、cpu、xpu);
        # git hash 等其他后缀不是变体,需要保留完整 version。
        if suffix.startswith(('rocm', 'cu', 'cpu', 'xpu')):
            variant = suffix
            version = version_part
docker/Dockerfile.xpu infrastructure

新增 vllm-build 多阶段目标,为 CI/ 发布流水线产出独立 wheel 产物,并移除 runtime 阶段的手动 triton 交换;这是 XPU wheel 构建链路的基础。

FROM vllm-base AS vllm-buildARG GIT_REPO_CHECK=0# 使用 uv 安装构建期依赖;cache 与 bind mount 让依赖层可复用
RUN --mount=type=cache,target=/root/.cache/uv \
    --mount=type=bind,src=requirements/common.txt,target=/workspace/vllm/requirements/common.txt \
    --mount=type=bind,src=requirements/xpu.txt,target=/workspace/vllm/requirements/xpu.txt \
    uv pip install grpcio-tools protobuf nanobind && \
    uv pip install -r /workspace/vllm/requirements/xpu.txt
​
# 把源码和已编译好的 Rust 产物放进来;setup.py 会直接使用预编译产物,
# 跳过本地 Rust 构建,缩短 CI 时间
COPY . .
COPY --from=rust-build /workspace/vllm/vllm-rs vllm/vllm-rs
COPY --from=rust-build /workspace/vllm/_rust_*.so vllm/
​
# 需要时执行仓库一致性检查
RUN --mount=type=bind,source=.git,target=.git \
    if [ "$GIT_REPO_CHECK" != 0 ]; then bash tools/check_repo.sh; fi# 以 XPU 为目标设备构建 wheel,产出 dist/*.whl 供流水线上传
RUN --mount=type=cache,target=/root/.cache/uv \
    --mount=type=bind,source=.git,target=.git \
    VLLM_TARGET_DEVICE=xpu python3 setup.py bdist_wheel --dist-dir=dist --py-limited-api=cp38

评论区精华

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

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

风险与影响

核心风险集中在发布链路和索引一致性:

  • 全局索引过滤变更:generate-nightly-index.py 的过滤器影响所有平台(不仅 XPU)。新增的 triton-*+xpu-* 匹配只针对 Triton shim,目前命名足够狭窄,但未来若出现其他 +xpu- 包则可能误纳入。
  • 版本检测收紧:generate-and-upload-nightly-index.sh 只从 vllm-* wheel 判断版本,若某次发布只有 Triton shim 而缺少 vLLM wheel,脚本会直接报错退出;这比误识别更安全,但发布部分失败时索引将不再生成。
  • Triton shim 可用性:Dockerfile.xpu 移除 uninstall 操作后,runtime 与 wheel 安装都依赖 triton==3.7.2+xpu 在 wheels.vllm.ai/xpu 上可用;shim 发布环节若失败,安装链路会立即失败。
  • 缺少自动化测试:没有对应单测或集成测试覆盖新的索引逻辑,回归只能依赖手工触发 release pipeline。
  • 发布流水线配置风险:pipeline YAML 或环境变量问题可能阻塞后续所有平台的正式发布,本 PR 通过 build 5120 做了人工演练验证。

这些风险均不触及模型推理代码,影响控制在构建与发布域内。

影响范围:

  • 用户侧:Intel XPU 用户首次获得官方预构建 wheel,安装命令从源码编译变为 uv pip install vllm 加双 index URL;安装文档同步更新,降低 XPU 入门门槛。
  • 系统侧:Buildkite 发布流水线新增一个 XPU wheel 构建步骤和 Triton shim stage;S3 wheel 目录出现 triton-*+xpu-*vllm-* 混排,索引生成逻辑必须兼容。
  • 团队侧:XPU 发布流程从人工/临时脚本变为标准化流水线;发布维护者需要掌握 vllm-build target、shim stage 与索引过滤约定。变更不涉及运行时、推理路径或公开 API,对 CUDA/CPU/ROCm 既有发布流程影响极小。
发布流水线变更 缺少自动化测试 全局索引过滤逻辑变更 依赖 Triton shim 可用性

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论