Prhub

#39233 [NVIDIA] Add sm_110 (Jetson Thor) to CUDA 13.0 build targets

原始 PR 作者 johnnynunez 合并时间 2026-04-24 03:42 文件变更 4 提交数 30 评论 9 代码增减 +5 / -5

执行摘要

新增 sm_110 (Jetson Thor) 到 CUDA 13.0 构建目标

在 PR body 中明确指出:官方 vllm/vllm-openai:v0.19.0-cu130 镜像未包含 sm_110 内核,导致 Jetson Thor(GB10)上 Marlin(GPTQ-INT4)、CUTLASS(cutlass_scaled_mm、FP8)和 flash-attn(BF16)均报 CUDA error: no kernel image is available for execution on the device。因此需要将 11.0 加入 CUDA 13.0+ 的构建架构列表,以使镜像能在 Jetson Thor 上直接运行。

此 PR 变更简单明确,解决了 Jetson Thor 用户无法使用 vLLM 官方镜像的关键问题。建议快速合并,并注意保持配置文件间的架构列表一致性。如果未来有其他架构加入,应同步更新此处。

讨论亮点

Review 中主要讨论了以下几点:

  • 关于移除 FlashInfer TRTLLM BMM headers 预下载块:gemini-code-assist[bot] 指出该移除可能导致 air-gapped 环境回归,因为之前该块用于在构建时缓存 headers,避免运行时从 edge.urm.nvidia.com 下载。但最终提交未包含该移除(相关 commits 已被 revert),离线部署不受影响。
  • 关于 docker-bake.hcl 缺少 sm_120 (12.0):gemini-code-assist[bot] 指出 Docker Bake 的默认架构列表缺少 12.0,与 Dockerfile 不一致。最终提交已添加 12.0,问题已解决。
  • 关于错误添加 sm_70 (7.0) 和移除 sm_86 (8.6):mgoin 评论“We don't support 7.0”和“Why did you add 7.0 and remove 8.6?”,指出不应添加 7.0 且不应移除 8.6。最终提交已纠正,仅添加 11.0,保留 7.5、8.0、8.6 等。

实现拆解

变更涉及 4 个配置文件,分为三步:

  1. Dockerfiledocker/Dockerfile):在构建基础镜像和 KV connectors 两个构建阶段中,将 torch_cuda_arch_list 默认值由 '7.5 8.0 8.6 8.9 9.0 10.0 12.0+PTX' 修改为 '7.5 8.0 8.6 8.9 9.0 10.0 11.0 12.0+PTX',新增 11.0
  2. Docker Bake 和版本配置
    • docker/docker-bake.hcl:将 TORCH_CUDA_ARCH_LIST 默认值从 "8.0 8.9 9.0 10.0" 更新为 "8.0 8.9 9.0 10.0 11.0 12.0",同时补充了此前缺失的 12.0(Blackwell)。
    • docker/versions.json:同步更新默认架构列表,添加 11.0
  3. FlashInfer 构建脚本tools/flashinfer-build.sh):在 CUDA 13.0+ 分支的 FI_TORCH_CUDA_ARCH_LIST 中添加 11.0,并将 12.0 修正为 12.0f(包含 PTX),确保 FlashInfer AOT 编译为 Jetson Thor 生成内核。

所有变更均仅针对 CUDA ≥13.0 的构建环境;对于 CUDA 12.x 环境,CMake 中的 cuda_archs_loose_intersection() 会自动过滤掉 11.0,因此对旧版本构建无影响。

文件 模块 状态 重要度
docker/Dockerfile Docker 构建 modified 3.99
docker/docker-bake.hcl Docker 构建 modified 3.75
docker/versions.json Docker 构建 modified 3.35
tools/flashinfer-build.sh 构建工具 modified 3.51

关键源码片段

docker/Dockerfile infrastructure

在构建基础镜像和 KV connectors 两个阶段中,向 `torch_cuda_arch_list` 添加 `11.0`,是确保 Jetson Thor 内核编译的核心变更。

# 构建基础镜像时指定 CUDA 架构列表,添加 sm_110 (11.0) 以支持 Jetson Thor
ARG torch_cuda_arch_list='7.5 8.0 8.6 8.9 9.0 10.0 11.0 12.0+PTX'
ENV TORCH_CUDA_ARCH_LIST=${torch_cuda_arch_list}# 安装 KV connectors 的构建阶段同样添加 sm_110
ARG torch_cuda_arch_list='7.5 8.0 8.6 8.9 9.0 10.0 11.0 12.0+PTX'
ENV TORCH_CUDA_ARCH_LIST=${torch_cuda_arch_list}

评论区精华

移除 FlashInfer TRTLLM BMM headers 预下载可能导致离线部署失败 question

gemini-code-assist[bot] 指出,Dockerfile 中移除了 FlashInfer TRTLLM BMM headers 预下载块,该块原本用于在构建时缓存 headers 以避免运行时从 `edge.urm.nvidia.com` 下载,移除后 air-gapped 环境可能出错。

结论:最终提交已 revert 了该移除(相关 commit 撤销),预下载块得以保留,离线部署不受影响。 · 已解决

docker-bake.hcl 缺少 sm_120 (12.0) 架构 正确性

gemini-code-assist[bot] 指出 `docker-bake.hcl` 中的 `TORCH_CUDA_ARCH_LIST` 默认值缺少 `12.0`(Blackwell),与 Dockerfile 和 versions.json 不一致,会导致使用 Bake 构建的镜像缺失 Blackwell 内核。

结论:最终提交已将默认值更新为 `8.0 8.9 9.0 10.0 11.0 12.0`,补充了 12.0,问题已解决。 · 已解决

错误添加 sm_70 (7.0) 和移除 sm_86 (8.6) 正确性

mgoin 在 review 中指出,diff 中曾错误地添加了 sm_70 (7.0) 并移除了 sm_86 (8.6),并评论“We don't support 7.0”和“Why did you add 7.0 and remove 8.6?”,要求纠正。

结论:最终提交修正了这两处错误,仅添加 11.0,保留原有架构列表(7.5、8.0、8.6、8.9、9.0、10.0、12.0+PTX),问题已解决。 · 已解决

风险与影响

主要风险包括:

  • 构建时间增加:新增 sm_110 架构会导致 CUDA 内核编译时间延长,但只影响 CUDA 13.0+ 的 Docker 构建,且增量有限。
  • 离线部署兼容性:虽然 review 中提及的 FlashInfer headers 预下载移除已 revert,但若后续合并其他变更导致回归,可能影响离线部署。目前无此风险。
  • 旧版本不影响:由于 CMake 的 cuda_archs_loose_intersection 会在 CUDA <13.0 时自动过滤 11.0,因此现有 CUDA 12.x 构建完全不受影响,兼容性风险极低。
  • 用户影响:Jetson Thor 用户现在可以直接使用官方 CUDA 13.0 Docker 镜像,无需自行编译内核,开箱即用。对普通用户透明,无破坏性变更。
  • 系统影响:Docker 镜像体积略增(因包含更多架构内核),构建时间稍长。
  • 团队维护:维护成本低,后续只需在新增架构时同步更新这些配置文件的列表即可。
构建时间增加 兼容性风险低 离线部署潜在风险 ( 已解决 )

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论