Prhub

#39878 [Build] Switch default CUDA to 13.0, update CUDA architecture lists, clean up stale build-args

原始 PR 作者 Harry-Chen 合并时间 2026-04-23 15:51 文件变更 10 提交数 5 评论 26 代码增减 +98 / -92

执行摘要

默认 CUDA 版本 12.9 → 13.0,重构架构列表

PyTorch 2.11 发布后默认 CUDA 版本升级至 13.0,vLLM 需要对齐以保持默认构建一致性。同时需更新 CUDA 架构列表以反映 PyTorch 上游变化,并清理遗留的构建参数引用。

建议仔细阅读架构列表调整部分,特别是关于 SM86 和 SM89 纳入的决策理由。同时关注 Volta 用户迁移路径的文档说明是否充分。

讨论亮点
  • Volta 支持移除争议:gemini-code-assist bot 指出移除 SM70(V100)可能导致用户回归。Harry-Chen 回应 PyTorch 已从 12.8 起放弃 Volta 支持,vLLM 跟随上游决定。
  • aarch64 架构完整性:dmitry-tokarev-nv 建议为 aarch64 添加 SM86(8.6)和 SM103(10.3)以覆盖更多 GPU。Harry-Chen 解释 aarch64 此前未包含 8.6,且 10.3 可通过 CUDA 13 的 family specifier 10.0f 被覆盖,无需显式添加。
  • CMakeLists.txt 版本条件:dmitry-tokarev-nv 指出 CUDA 12.8 不支持 11.0 和 12.1 架构,Harry-Chen 确认实际仅使用 CUDA 12.9,风险可控。

实现拆解

  1. 切换默认 CUDA 版本:在 vllm/envs.py 中将 VLLM_MAIN_CUDA_VERSION 默认值从 12.9 改为 13.0,运行时环境变量默认值同步变更。

  2. 更新 CUDA 架构列表:遵循 PyTorch RELEASE.md 重新定义架构列表。默认(CUDA 13.0)x86_64 为 7.5 8.0 8.6 8.9 9.0 10.0 12.0+PTX,aarch64 新增 11.0(Thor)并移除 12.1。CUDA 12.9 变体使用无 +PTX 的对应列表。列表在 release-pipeline.yaml 中定义为顶层环境变量 CUDA_ARCH_X86 等,所有构建步骤通过 ${...} 引用,消除硬编码重复。

  3. 清理 FLASHINFER_AOT_COMPILE:在 docker/docker-bake.hcl 和构建命令中移除该残留参数,该参数早在 PR #32627 中已从 Dockerfile 删除。

  4. 调整发布脚本:更新 annotate-release.sh 中的默认 wheel 名、镜像标签和下载提示,使 CUDA 13.0 成为无后缀默认版本。同时为 aarch64 CUDA 12.9 构建显式添加 manylinux_2_31 参数保证一致。

  5. 同步 CMakeLists.txt 架构检查:更新 CUDA 编译器版本 >= 13.0 时支持的架构列表,移除 Volta(7.0/7.5 中的 7.0),新增 10.0 和 12.0。同时更新版本声明以匹配实际使用的 CUDA 12.9+。

文件 模块 状态 重要度
.buildkite/release-pipeline.yaml CI 流水线 modified 6.13
vllm/envs.py 环境配置 modified 5.75
docker/Dockerfile Docker 构建 modified 3.79

关键源码片段

vllm/envs.py core-logic

定义运行时 CUDA 版本默认值,直接影响 `pip install vllm` 的变体选择。

# vllm/envs.pyclass EnvironmentVariables:
    # ...
    # 默认 CUDA 版本,用于运行时 PCI ID 匹配和变体选择
    VLLM_MAIN_CUDA_VERSION: str = "13.0" # 原来为 "12.9"
    # ...# 运行时环境变量定义部分
environment_variables: dict[str, Callable[[], Any]] = {
    # ...
    "VLLM_MAIN_CUDA_VERSION": lambda: (
        os.getenv("VLLM_MAIN_CUDA_VERSION", "").lower() or "13.0"
        # 原来默认值为 "12.9"
    ),
    # ...
}
docker/Dockerfile infrastructure

Torch CUDA 架构列表默认值更新,影响所有 Docker 构建。

# docker/Dockerfile# 构建阶段:编译 torch 扩展所需的架构列表
ARG torch_cuda_arch_list='7.5 8.0 8.6 8.9 9.0 10.0 12.0+PTX'
# 原来为 '7.0 7.5 8.0 8.9 9.0 10.0 12.0'
# 变更:移除 7.0(Volta),新增 8.6(Ampere GA106/107),添加 +PTX 前向兼容
ENV TORCH_CUDA_ARCH_LIST=${torch_cuda_arch_list}

评论区精华

Volta (SM70) 支持移除 设计

gemini-code-assist bot 建议保留 SM70(V100)和 SM121(DGX Spark)以维持硬件兼容性。Harry-Chen 引用 PyTorch 从 12.8 起放弃 Volta 支持,vLLM 跟随上游决定。

结论:接受移除,因为上游 PyTorch 已放弃,且 Volta 用户可通过 CUDA 12.9 变体获得支持。 · 已解决

aarch64 架构列表完整性 正确性

dmitry-tokarev-nv 建议为 aarch64 添加 SM86(8.6)和 SM103(10.3)以覆盖更多 GPU。Harry-Chen 回应:aarch64 此前未包含 8.6 但可通过 SM80 兼容;10.3 在 CUDA 13 中使用 family specifier 10.0f 可被覆盖,无需显式添加。

结论:未添加 8.6 和 10.3,但确认了架构兼容性理由。 · 已解决

CMakeLists.txt 版本条件准确性 正确性

dmitry-tokarev-nv 指出 CUDA 12.8 不支持 CC 11.0 和 12.1,但 CMakeLists.txt 中 CUDA 12.8 分支包含了这些架构。Harry-Chen 确认实际仅使用 CUDA 12.9,且注释已说明版本条件。

结论:理解存在偏差,但实际风险低,因为只使用 CUDA 12.9+。 · 已解决

aarch64 CUDA 12.9 缺少 manylinux 参数 正确性

gemini-code-assist bot 指出 aarch64 CUDA 12.9 构建步骤缺少显式 manylinux_2_31 参数。Harry-Chen 承认应添加以保持一致性。

结论:已添加 manylinux_2_31 参数。 · 已解决

风险与影响

  • Volta 用户兼容性:移除 SM70 意味着 Tesla V100 等 GPU 无法在默认 CUDA 13.0 构建下运行。用户必须切换到 CUDA 12.9 变体,可能造成部署中断。
  • 架构列表偏离上游:部分架构(如 SM86、SM89)超出 PyTorch 默认列表,虽便于覆盖更多 GPU,但可能引入未充分测试的代码路径。
  • CMakeLists.txt 条件偏移:CUDA 13.0 分支的架构列表包含 11.0(Thor),但 CUDA 12.9 版本分支未包含 11.0,可能导致用户在使用 CUDA 12.9 构建时缺少 Thor 支持。
  • 用户:从 pip install vllm 默认获得 CUDA 13.0 构建;Volta 用户需改用 vllm+cu129 变体。
  • 构建团队:发布流程需同步调整,确保两套变体正确生成。
  • 系统兼容性:需要 NVIDIA 驱动程序支持 CUDA 13.0(R570+)。
默认 CUDA 版本升级 Volta 支持移除 架构列表偏离上游

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论