Skip to content

fix(vllm-cpp): map the CUDA 12 capabilities at the CPU build - #11388

Closed
localai-bot wants to merge 2 commits into
masterfrom
fix/vllm-cpp-l4t-cuda12-fallback
Closed

fix(vllm-cpp): map the CUDA 12 capabilities at the CPU build#11388
localai-bot wants to merge 2 commits into
masterfrom
fix/vllm-cpp-l4t-cuda12-fallback

Conversation

@localai-bot

Copy link
Copy Markdown
Collaborator

What

backend/index.yaml declares nvidia, nvidia-cuda-13, nvidia-l4t and
nvidia-l4t-cuda-13 for vllm-cpp, but nothing for CUDA 12. A Jetson AGX Orin
(sm_87, JetPack 6) therefore falls through SystemState.Capability's default
catch-all and installs cpu-vllm-cpp.

That is the correct build for that host - vllm.cpp's CUDA kernels need the CUDA 13
toolchain, since 12.x nvcc lacks compute_121a and its ptxas rejects the sm_120a
NVFP4 MMA kernels, so no CUDA 12 variant is shipped at all. The problem is that
the right answer arrived by accident: it was indistinguishable from an oversight
both to someone reading the index and to a user wondering why their GPU box pulled
a CPU backend.

Map nvidia-cuda-12 and nvidia-l4t-cuda-12 explicitly, state the Blackwell-only
constraint in the gallery description and the backend README, and pin the routing
with specs. No behaviour change: these hosts already resolved to the CPU build
through the catch-all.

The image-tag trap

The README now also records a second, separate way to end up on the CPU build,
which produces the same "why is my GPU idle" symptom on a supported host:

/run/localai/capability is baked into the image at build time. A DGX Spark
running the CUDA 12 -nvidia-l4t-arm64 image reports nvidia-l4t-cuda-12 and so
gets the CPU build. The fix is the -nvidia-l4t-arm64-cuda-13 image, or
LOCALAI_FORCE_META_BACKEND_CAPABILITY=nvidia-l4t-cuda-13.

Tests

core/gallery/backend_index_capabilities_test.go is new. Besides the vllm-cpp
routing table it adds a repo-wide integrity check - every capability reference in
backend/index.yaml, for every backend, must resolve to an entry that actually
exists in the index. That catches a typo'd or deleted meta-backend target across
the whole file, not just here.

Note on the branch

The commit is from 2026-07-27 and was never proposed. It has been merged up to
master with two conflicts resolved: master rewrote the vllm-cpp gallery
description in #11363 (kept, with this branch's hardware paragraph re-appended),
and master gained the ABI pin/mirror note in #11386 (kept alongside the new
hardware-coverage section).

Verified after the merge: make lint LINT_NEW_FROM=origin/master reports 0 issues,
core/gallery and core/gallery/importers are green, and backend/index.yaml
still parses with only the two #amd: comment-spacing warnings that master already
carries.

mudler added 2 commits July 27, 2026 20:59
vllm.cpp's CUDA kernels need the CUDA 13 toolchain: 12.x nvcc lacks
compute_121a and its ptxas rejects the sm_120a NVFP4 MMA kernels, so
backend/go/vllm-cpp/Makefile ships no CUDA 12 variant and the arm64 CUDA
build targets sm_121a (GB10 / DGX Spark) only.

backend/index.yaml declared nvidia-l4t and nvidia-l4t-cuda-13 but no
nvidia-l4t-cuda-12, so a Jetson AGX Orin (sm_87, JetPack 6) fell through
SystemState.Capability's "default" catch-all and silently installed
cpu-vllm-cpp. That is the right build for that host, but it was
indistinguishable from an oversight both to a reader of the index and to
a user wondering why their GPU box pulled a CPU backend.

Map nvidia-cuda-12 and nvidia-l4t-cuda-12 explicitly at the CPU build,
state the Blackwell-only constraint in the gallery description and the
backend README, and add specs that pin the routing. No behaviour change:
these hosts already resolved to the CPU build via the catch-all.

The README also records the image-tag trap behind the same symptom on a
supported host: /run/localai/capability is baked in at image build time,
so a DGX Spark on the CUDA 12 -nvidia-l4t-arm64 image reports
nvidia-l4t-cuda-12 and gets the CPU build; -nvidia-l4t-arm64-cuda-13 (or
LOCALAI_FORCE_META_BACKEND_CAPABILITY) gets the GPU one.

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
Assisted-by: Claude Code:claude-opus-5 [Read] [Edit] [Bash]
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
…da12-fallback

Two conflicts, both from master moving under a stale branch:

- backend/index.yaml: master rewrote the vllm-cpp gallery description
  (#11363). Keep that rewrite and re-append this branch's paragraph on the
  CUDA 13 / Blackwell-only constraint and the CPU fallback for CUDA 12 hosts.
- backend/go/vllm-cpp/README.md: master gained the ABI pin/mirror note from
  #11386. Keep both sections; they cover different things.

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
@mudler mudler closed this Aug 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants