Skip to content

[Build][NVIDIA] Update public Rubin dependencies and MSA compatibility - #56545

Merged
ywang96 merged 6 commits into
vllm-project:mainfrom
CentML:wangshangsam/rubin-public-dependencies-msa-compat
Sep 15, 2026
Merged

ywang96 merged 6 commits into
vllm-project:mainfrom
CentML:wangshangsam/rubin-public-dependencies-msa-compat

Conversation

@wangshangsam

@wangshangsam wangshangsam commented Sep 12, 2026 •

Copy link
Copy Markdown
Collaborator

Purpose

Update public Rubin dependencies and the MSA revision for Quack/CuTe DSL compatibility.

  • Pin CUDA Python/bindings to 13.4.1, Quack to 0.6.5, FlashInfer Python/cubin to 0.6.18.post1, its CUDA 13.4 JIT cache to 0.6.18.post1+cu134, and NIXL to 1.4.1. Add the official FlashInfer indexes.
  • Advance the official MSA revision to f355c37eb4e1413f21ee2ad8bbad25079e6bef9d, incorporating MSA#12.
  • Handle Quack alongside the existing Rubin exclusions from standard CUDA wheel metadata, keeping its Rubin pin in rubin-prerelease.txt. This is the only Dockerfile change; standard CUDA requirements also now pin Quack 0.6.5 after the upstream merge.
  • Advance to the newest compatible CUDA 13.4 Torch/Torchvision/Torchaudio nightlies available when checked on September 12, 2026 UTC:
Package aarch64 x86_64
torch 2.15.0.dev20260908+cu134 2.15.0.dev20260909+cu134
torchvision 0.30.0.dev20260909+cu134 0.30.0.dev20260909+cu134
torchaudio 2.11.0.dev20260911+cu134 2.11.0.dev20260911+cu134

Torch September 11 is available, but no published CUDA 13.4 Torchvision wheel pairs with it. The latest Torchvision wheels require Torch September 8 on aarch64 and September 9 on x86_64. Torchaudio September 11 uses cp310-abi3 wheels compatible with Python 3.12 and requires torch>=2.11.

Keep CUTLASS DSL 4.8.0.dev0 and remove the requirements-file --pre option that uv ignores. The selected Torch wheels still require Triton 3.8.0+gitc01b6774.

Related work

Duplicate searches covered open Rubin dependency PRs and #49735. #55953 includes Torch wheel-pairing work as part of Rubin nightly publishing; this PR adds no release pipeline changes. #54927 merged the standard CUDA dependency updates, #54355 concerns optional KV connectors, and #56489 is a broader dependency update. This PR combines the Rubin-specific dependency set with the MSA compatibility revision.

Validation

The aarch64 CUDA 13.4 image built successfully from current PR commit 89c93256fafe9541aadafa63b7a202d9fdc0f7df. Both model tests use this same image; no production source patches or package metadata overrides were applied during validation.

  • git diff --check and targeted pre-commit passed.
  • Public wheel metadata and bounded Python 3.12 resolver controls passed for both aarch64 and x86_64. GPU runtime validation covers aarch64 only.
  • Installed pins and exact MSA source were verified. CPU/CUDA Torchvision NMS, Torchaudio import and CPU resampling, all-four-GPU numerical Triton kernels, fresh torch.compile, and shared-library linkage checks passed.
  • Direct MSA numerical tests on one GPU passed sparse indexer/top-k selection, sparse decode including graph replay, and sparse prefill against independent references.
Model Configuration Exact final-answer checks Fixed GSM8K smoke
Qwen/Qwen3.6-35B-A3B-FP8 TP4 20/20 15/16, invalid 0
nvidia/MiniMax-M3-NVFP4 TP4, FP8 KV, CUTLASS MSA decode 20/20 15/16, invalid 0

Frozen model revisions are 95a723d08a9490559dae23d0cff1d9466213d989 for Qwen and 901464083161bf8612a29ff7ad29914cd4ab4a85 for MiniMax. Exact-answer checks cover short requests, long-context retrieval and 16 batched arithmetic completions. GSM8K uses the first 16 questions, five-shot chat, temperature 0, seed 42 and a 1024-token output limit. These are smoke tests, not full accuracy or performance benchmarks.

Qwen returned complete, readable responses. Its missed GSM8K question confused the break-even year with the first profitable year; three batched explanations contain arithmetic inconsistencies despite correct final answers. MiniMax also returned complete, readable responses and missed the same GSM8K question. One batch explanation mislabels a digit position, and another GSM8K explanation confuses cleaners remaining with cleaners sold despite a correct final answer. Independent raw CUDA trace review confirmed MSA indexer/top-k, CuTe sparse prefill and native CUTLASS sparse decode on all four workers during the controlled requests, including nontrivial long-context selection and actual batch-16 generation.

Additional checks retain failures:

  • uv pip check rejects the public cuSPARSELt 0.8.1 wheel's internal manylinux2014_sbsa tag on aarch64. Its library is AArch64 ELF; this is not a claim of a dedicated cuSPARSELt numerical test.
  • Optional nixl_ep import fails because NIXL 1.4.1 lacks its Torch 2.15 extension. Ordinary NIXL import passes. TP4 serving does not establish EP support.

The original runtime aggregate and both serving aggregates retain exit 1. Each serving scanner matched caught optional NIXL-EP warning tracebacks; all functional request/evaluation subprocesses and final server health checks passed. MiniMax also logged repeated multicast/CUDA_ERROR_NOT_PERMITTED workspace warnings and a FlashInfer all-reduce norm fusion initialization error. Serving continued, but this test does not establish availability of that collective optimization.

Build and serve

Commands use generic local paths and names. Both base and final targets were built sequentially to avoid concurrent cold-cache wheel installation contention.

docker buildx create --name rubin-validation --driver docker-container \
  --driver-opt network=host,image=moby/buildkit:v0.20.0
build_args=(
  --builder rubin-validation --progress=plain
  --file docker/Dockerfile --platform linux/arm64
  --build-arg BUILD_BASE_IMAGE=pytorch/manylinuxaarch64-builder:cuda13.4
  --build-arg FINAL_BASE_IMAGE=nvcr.io/nvidia/cuda-dl-base:26.08-cuda13.4-devel-ubuntu24.04
  --build-arg CUDA_VERSION=13.4 --build-arg INSTALL_RUBIN_PRERELEASE=true
  --build-arg TRITON_INSTALL_FROM_SOURCE_REPO=https://github.com/triton-lang/triton.git
  --build-arg TRITON_INSTALL_FROM_SOURCE_REVISION=c01b6774b1865984607d89d89d3a10833de92037
  --build-arg torch_cuda_arch_list=10.0
  --build-arg max_jobs=32 --build-arg nvcc_threads=2
  --build-arg RUN_WHEEL_CHECK=false
)
docker buildx build "${build_args[@]}" --target base .
docker buildx build "${build_args[@]}" --target vllm-openai --load -t vllm-rubin:pr .

Both models run sequentially with separate model/kernel caches. The variables below are generic absolute local paths, populated with the pinned model snapshots before launch. Stop the Qwen container after its tests before launching MiniMax on the same GPUs.

run_model() {
  docker run --detach --name "$NAME" --gpus all --ipc=host --network=host \
    --env NVIDIA_DISABLE_REQUIRE=1 --env VLLM_ENABLE_CUDA_COMPATIBILITY=1 \
    --env VLLM_FLOAT32_MATMUL_PRECISION=high \
    --volume "$MODEL_CACHE:/work/huggingface:ro" \
    --env HF_HOME=/work/huggingface --env HF_HUB_OFFLINE=1 \
    --volume "$KERNEL_CACHE:/work/cache" --volume "$EVIDENCE_DIR:/evidence" \
    --env VLLM_CACHE_ROOT=/work/cache/vllm \
    --env MINFER_FMHA_CACHE_DIR=/work/cache/minfer \
    --env TRITON_CACHE_DIR=/work/cache/triton \
    --env TORCHINDUCTOR_CACHE_DIR=/work/cache/inductor \
    --entrypoint vllm vllm-rubin:pr serve "$@"
}

NAME=rubin-qwen MODEL_CACHE=/path/to/qwen-model-cache \
KERNEL_CACHE=/path/to/qwen-kernel-cache EVIDENCE_DIR=/path/to/qwen-evidence \
run_model Qwen/Qwen3.6-35B-A3B-FP8 \
  --revision 95a723d08a9490559dae23d0cff1d9466213d989 \
  --served-model-name Qwen/Qwen3.6-35B-A3B-FP8 \
  --tensor-parallel-size 4 --max-model-len 4096 --max-num-seqs 16 \
  --max-num-batched-tokens 16384 --gpu-memory-utilization 0.80 \
  --reasoning-parser qwen3 --host 127.0.0.1 --port 8000

# After Qwen's requests and final health check:
docker stop rubin-qwen
docker rm rubin-qwen

NAME=rubin-minimax MODEL_CACHE=/path/to/minimax-model-cache \
KERNEL_CACHE=/path/to/minimax-kernel-cache EVIDENCE_DIR=/path/to/minimax-evidence \
run_model nvidia/MiniMax-M3-NVFP4 \
  --revision 901464083161bf8612a29ff7ad29914cd4ab4a85 \
  --served-model-name nvidia/MiniMax-M3-NVFP4 \
  --trust-remote-code --language-model-only --tensor-parallel-size 4 \
  --block-size 128 --kv-cache-dtype fp8 \
  --attention-config '{"minimax_m3_msa_decode_backend":"cutlass"}' \
  --max-model-len 4096 --max-num-seqs 16 --max-num-batched-tokens 16384 \
  --gpu-memory-utilization 0.80 --tool-call-parser minimax_m3 \
  --enable-auto-tool-choice --reasoning-parser minimax_m3 \
  --profiler-config '{"profiler":"torch","torch_profiler_dir":"/evidence/minimax-traces","ignore_frontend":true,"torch_profiler_with_stack":false,"torch_profiler_record_shapes":false,"detailed_trace_annotation":true}' \
  --host 127.0.0.1 --port 8000

The profiler was enabled only around controlled MiniMax request windows after server readiness. The server's Torch/CUDA compatibility flags were used in both deployments.

AI assistance

AI assistance was used to prepare the patch and validation evidence. The PR remains a draft for the human submitter to review every changed line and the relevant test results before marking it ready.

Use the released CUDA Python, FlashInfer, Quack, and NIXL packages for Rubin builds. Advance MSA to the Quack 0.6.5/CuTe DSL 4.8 compatibility fix and omit the standard Quack pin from Rubin wheel metadata.

Match the public Torchvision and Torchaudio wheels to the pinned Torch nightly on each architecture, and remove the requirements-file prerelease option ignored by uv.

Co-authored-by: Codex <noreply@openai.com>
Signed-off-by: Shang Wang <samshang.wang@mail.utoronto.ca>
wangshangsam and others added 3 commits September 11, 2026 23:39
Use the newest published Torchvision wheel with its architecture-specific Torch requirement, and advance Torchaudio to its September 11 ABI3 nightly.

Co-authored-by: Codex <noreply@openai.com>
Signed-off-by: Shang Wang <samshang.wang@mail.utoronto.ca>
@wangshangsam
wangshangsam marked this pull request as ready for review September 12, 2026 19:36

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Claude Code Review

This pull request is from a fork — automated review is disabled. A repository maintainer can comment @claude review to run a one-time review.

@wangshangsam wangshangsam self-assigned this Sep 12, 2026
@github-project-automation github-project-automation Bot moved this to Ready in NVIDIA Sep 14, 2026
@tlrmchlsmth tlrmchlsmth added the ready ONLY add when PR is ready to merge/full CI is needed label Sep 14, 2026
@tlrmchlsmth

Copy link
Copy Markdown
Member

/ci run

@github-actions

Copy link
Copy Markdown

✅ @wangshangsam, CI is now available for this PR.

  • /ci run starts upstream CI; /amd-ci run starts AMD CI only.
  • /ci retry retries failed jobs in the CI build for the current PR head. If the current head has no CI build, it starts a new CI build for the current head containing only jobs that failed in the latest earlier CI build for this PR.
  • /amd-ci retry retries failed jobs in AMD CI for the current PR head. Use /amd-ci run when the current head has no AMD CI build.
  • /ci cancel cancels scheduled or running CI builds for this PR branch; /amd-ci cancel does the same for AMD CI only.

@github-actions

Copy link
Copy Markdown

✅ Triggered Buildkite CI #88914 for commit f50bcdad7f20.

@wangshangsam

Copy link
Copy Markdown
Collaborator Author

/ci run

@github-actions

Copy link
Copy Markdown

✅ Triggered Buildkite CI #88942 for commit e009068e0519.

@wangshangsam

Copy link
Copy Markdown
Collaborator Author

/ci retry

@github-actions

Copy link
Copy Markdown

✅ Queued 5 failed job(s) for retry in Buildkite CI #88942.

@wangshangsam

Copy link
Copy Markdown
Collaborator Author

/ci retry

@github-actions

Copy link
Copy Markdown

✅ Queued 2 failed job(s) for retry in Buildkite CI #88942.

@wangshangsam

Copy link
Copy Markdown
Collaborator Author

/ci retry

@github-actions

Copy link
Copy Markdown

✅ Queued 1 failed job(s) for retry in Buildkite CI #88942.

@ywang96
ywang96 merged commit 031f581 into vllm-project:main Sep 15, 2026
339 of 341 checks passed
@github-project-automation github-project-automation Bot moved this from Ready to Done in NVIDIA Sep 15, 2026
@khluu khluu added this to the v0.30.0 cherry picks milestone Sep 17, 2026
khluu pushed a commit that referenced this pull request Sep 17, 2026
#56545)

Signed-off-by: Shang Wang <samshang.wang@mail.utoronto.ca>
Co-authored-by: Codex <noreply@openai.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci/build nvidia ready ONLY add when PR is ready to merge/full CI is needed

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

5 participants