Skip to content

feat: add CUDA 13 runtime and CI coverage#656

Open
binaryaaron wants to merge 2 commits into
binaryaaron/cuda13/dependency-manifestfrom
binaryaaron/cuda13/runtime-support
Open

feat: add CUDA 13 runtime and CI coverage#656
binaryaaron wants to merge 2 commits into
binaryaaron/cuda13/dependency-manifestfrom
binaryaaron/cuda13/runtime-support

Conversation

@binaryaaron

@binaryaaron binaryaaron commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Add the cu130 runtime variant to the generated dependency manifest.
  • Extend CUDA container and CI coverage to exercise the supported runtime matrix.

Validation

  • Generated-manifest checks
  • Targeted container and CI coverage

Second PR in the CUDA 13 stack; depends on #655.

@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

🗂️ Base branches to auto review (1)
  • main

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: d3c04037-7bff-4f5e-98e3-8480cedd47be

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch binaryaaron/cuda13/runtime-support

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-apps Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR adds CUDA 13.0 (cu130) as a new supported runtime variant, following the same pattern established by cu129. It introduces a new nvidia_index field in CudaVariant so NVIDIA library packages that ship without a CUDA-version suffix can be routed to pypi.nvidia.com instead of the PyTorch index, and updates the nvidia-cublas name template in cuda_runtime_deps to use nvidia_package_suffix (which evaluates to empty for cu130) rather than the hardcoded cuda_package_suffix.

  • Dependency manifest: cuda_deps.toml gains a [variants.cu130] section; pyproject.toml is regenerated with a cu130 extra, updated conflicts, source routing, and new unsuffixed nvidia-* entries all pointing to nvidia-pypi-public.
  • CI coverage: Both gpu-smoke-test and gpu-e2e-test gain a cu130 matrix row with required: false and continue-on-error: true, intentionally soft-failing during the validation window.
  • Generator logic: A new nvidia_index fallback is inserted between the per-library explicit index and the default PyTorch index, and the unit test fixture is updated to cover that path through the cu132 proxy variant.

Confidence Score: 5/5

Safe to merge; all generated artifacts are consistent with the source-of-truth TOML, and the CI rollout correctly gates on the cu130 rows as non-required.

The changes are mechanical manifest additions following an already-proven pattern. The nvidia_index fallback is simple and validated end-to-end by the generator's own source-index validation step. The cu130 NVIDIA library packages ship without a CUDA-version suffix (intentional, documented), and uv source routing is correct throughout. No breaking changes to cu129 or cpu extras.

No files require special attention. The vllm wheel situation for cu130 is documented and was already reviewed in a prior thread.

Important Files Changed

Filename Overview
tools/gen_cuda_deps.py Adds nvidia_index field to CudaVariant and inserts the corresponding fallback in nvidia_source_index() between the per-library override and the pytorch-index default. Logic is correct and well-documented.
cuda_deps.toml Renames the cublas dependency template to nvidia-cublas{nvidia_package_suffix} (backwards-compatible for cu129) and adds the [variants.cu130] block with correct suffix, index, and flashinfer overrides. The no-pinned-wheel vllm situation is documented and already flagged in a previous review thread.
pyproject.toml Generated cu130 extra, conflict entry, and unsuffixed nvidia-* source entries are all consistent with the cuda_deps.toml configuration. The nvidia-pypi-public index was already declared; no new unresolved index references.
.github/workflows/gpu-tests.yml Both smoke and e2e jobs gain a cu130 matrix row with required: false and continue-on-error. The gpu-ci-status gate is unaffected for the required cu129 path; cu130 failures are intentionally soft during rollout.
tests/test_gen_cuda_deps.py Adds nvidia_index = nvidia-pypi-public to the cu132 test fixture to exercise the new fallback path; updates the nvidia-nvtx source assertion accordingly. Coverage is adequate via the cu132 proxy.
.mise/tasks/bootstrap-nss Adds cu130 to USAGE choices and the case statement; error message updated. Straightforward and correct.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[NvidiaCudaLibraryEntry] --> B{Has explicit index field?}
    B -- Yes --> C[Use per-library index]
    B -- No --> D{variant.nvidia_index set?}
    D -- Yes --> E[Use variant-level nvidia_index]
    D -- No --> F[Fall back to variant pytorch index]

    subgraph cu129
        G[cublas → nvidia-cublas-cu12] --> F2[pytorch-cu129]
    end

    subgraph cu130
        H[cublas → nvidia-cublas] --> E2[nvidia-pypi-public]
    end
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A[NvidiaCudaLibraryEntry] --> B{Has explicit index field?}
    B -- Yes --> C[Use per-library index]
    B -- No --> D{variant.nvidia_index set?}
    D -- Yes --> E[Use variant-level nvidia_index]
    D -- No --> F[Fall back to variant pytorch index]

    subgraph cu129
        G[cublas → nvidia-cublas-cu12] --> F2[pytorch-cu129]
    end

    subgraph cu130
        H[cublas → nvidia-cublas] --> E2[nvidia-pypi-public]
    end
Loading

Reviews (3): Last reviewed commit: "fix: stop overclaiming cu130 container/e..." | Re-trigger Greptile

Comment thread cuda_deps.toml
Comment on lines +118 to +120
dependencies = [
"vllm==0.24.0; sys_platform == 'linux'",
]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 vllm for cu130 has no dedicated wheel source

cu129 routes vllm through an explicit wheel server entry ([sources.cu129]vllm-v0-24-0-cu129). For cu130, vllm==0.24.0 has no static source override, so uv will resolve it from the default PyPI index. Standard PyPI vllm wheels are typically CPU-only wrappers; if the PyPI wheel doesn't carry a CUDA 13 runtime, the package will install but any GPU operation will fail (or the wheel may not exist at all for 0.24.0). This is mitigated by required: false in CI, but it may cause confusing failures if someone tries mise run bootstrap-nss cu130 manually.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Comment on lines 155 to +162
}}
timeout-minutes: 210
runs-on: linux-amd64-gpu-a100-latest-1
continue-on-error: ${{ !matrix.required }}
strategy:
fail-fast: false
matrix:
include:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 E2E matrix missing python-version

The gpu-smoke-test matrix explicitly sets python-version: "3.13" on each entry, but the gpu-e2e-test matrix entries contain only cuda-extra and required. If the setup-gpu-test-env action has a required python-version input, the e2e job will silently receive an empty string. The pre-PR e2e job also didn't pass python-version, so the action likely has a working default — but it may be worth aligning the two jobs to make the Python version explicit and avoid future drift.

@binaryaaron
binaryaaron force-pushed the binaryaaron/cuda13/runtime-support branch from 4127e30 to 7b0ff2e Compare July 16, 2026 21:52
binaryaaron and others added 2 commits July 16, 2026 22:13
Signed-off-by: Aaron Gonzales <aagonzales@nvidia.com>
A council review found docs and CI comments in this PR claiming cu130
container images and full CI coverage were "enabled," while
container-build.yml (which builds and publishes release images) was never
touched, and the cu130 GPU e2e matrix leg silently re-bootstraps cu129 via
.mise/tasks/tests.toml before running -- so it exercises cu129 twice, not
cu130 once. Walk those claims back to what this PR actually delivers:
manifest support plus GPU smoke-test coverage. Container build wiring and a
real cu130 e2e path move to the next PR in the stack.

Also documents the nvidia_index field's precedence against its sibling
pytorch_index/flashinfer_index override fields, notes why cu130 has no
dedicated vllm source route yet, and adds a tracking comment to the
required: false matrix entries so the temporary CI exception has a stated
promotion trigger.

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aaron Gonzales <aagonzales@nvidia.com>
@binaryaaron
binaryaaron force-pushed the binaryaaron/cuda13/runtime-support branch from 7b0ff2e to 8629058 Compare July 16, 2026 22:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant