Issues running on an RTX Pro 6000
Trying to run this with vllm v0.25.1 on a single rtx pro 6000.
vllm serve poolside/Laguna-S-2.1-NVFP4 --trust-remote-code --tensor-parallel-size 1 --enable-auto-tool-choice --tool-call-parser poolside_v1 --reasoning-parser poolside_v1 --gpu-memory-utilization 0.95
It is complaining about:
['aligned_alloc' at /workspace/include/flashinfer/allocator.h:49: Buffer overflow when allocating memory for batch_prefill_tmp_v with size 471269376 and alignment 16, but only 413138944 bytes available in AlignedAllocator. Increase the workspace buffer size.](RuntimeError: Error in function 'aligned_alloc' at /workspace/include/flashinfer/allocator.h:49: Buffer overflow when allocating memory for batch_prefill_tmp_v with size 471269376
and alignment 16, but only 413138944 bytes available in AlignedAllocator. Increase the workspace buffer size.)
Any ideas?
Hi there!
We actually fixed this in vLLM last week or so: https://github.com/vllm-project/vllm/pull/48428.
I think the right solution here is to either backport that patch, or to switch to a different kernel backend.
Can you let me know if that takes away the issue?
Just got it working on the rtx 6000 pro blackwell 96gb.
(Claude's writeup)
Laguna S 2.1 NVFP4 + DFlash on a single RTX PRO 6000 Blackwell Workstation (96 GB, SM120)
Working recipe for poolside/Laguna-S-2.1-NVFP4 with DFlash speculative decoding on a
workstation Blackwell card. The model card covers the DGX Spark (GB10/sm_121); this is
the x86_64 + SM120 equivalent, with measured throughput at context depths up to 200K.
Environment
| Component | Version |
|---|---|
| GPU | RTX PRO 6000 Blackwell Workstation Edition, 96 GB (SM120) |
| Driver | 610.43.03 |
| CPU / RAM | Threadripper PRO 5955WX / 256 GB |
| OS | Arch Linux, kernel 7.1.3 |
| Python | 3.12 (uv-managed venv) |
| vLLM | 0.25.1 (required: ≥ 0.25.0 for the laguna arch, dflash method, and poolside_v1 parsers) |
| torch | 2.11.0+cu130 |
| flashinfer | 0.6.13 (python + cubin + jit-cache) |
| CUDA toolkit (JIT) | 13.3 |
Install
uv venv ~/venvs/vllm-laguna -p 3.12
uv pip install -p ~/venvs/vllm-laguna/bin/python vllm==0.25.1 --torch-backend=cu130
# vLLM 0.25.1 pins flashinfer 0.6.13; the jit-cache wheel (off-PyPI) skips most first-start JIT
uv pip install -p ~/venvs/vllm-laguna/bin/python \
"flashinfer-python==0.6.13" "flashinfer-cubin==0.6.13" \
"flashinfer-jit-cache==0.6.13" --extra-index-url https://flashinfer.ai/whl/cu130/
hf download poolside/Laguna-S-2.1-NVFP4
hf download poolside/Laguna-S-2.1-DFlash-NVFP4 # ~2.2 GB draft model
Notes vs the Spark recipe on the model card:
- No
CUTE_DSL_ARCHneeded — that env var is for GB10 (sm_121a); SM120 auto-detects. - If nvcc rejects your host compiler during flashinfer JIT (Arch + gcc 16):
export NVCC_CCBIN=/usr/bin/g++-15. - Multi-GPU box:
export CUDA_DEVICE_ORDER=PCI_BUS_IDand pinCUDA_VISIBLE_DEVICES.
Serve
python -m vllm.entrypoints.openai.api_server \
--model poolside/Laguna-S-2.1-NVFP4 \
--max-model-len 262144 \
--max-num-seqs 8 \
--gpu-memory-utilization 0.90 \
--enable-prefix-caching \
--async-scheduling \
--enable-auto-tool-choice \
--tool-call-parser poolside_v1 \
--reasoning-parser poolside_v1 \
--default-chat-template-kwargs '{"enable_thinking": true}' \
--speculative-config '{"model": "poolside/Laguna-S-2.1-DFlash-NVFP4", "num_speculative_tokens": 15, "method": "dflash"}' \
--override-generation-config '{"temperature": 0.7, "top_p": 0.95}' \
--port 8000
Flag rationale (things that bit us or that the card only implies):
--gpu-memory-utilization 0.90— at 0.85 the engine refuses to start at 256K
context: it measures 8.27 GiB free for KV but needs 9.6 GiB for one 262144-token
request (weights are ~67 GiB on disk, ~90.6 GiB total VRAM in use at 0.90).
Drop--max-model-leninstead if you want more headroom.--max-num-seqs≤ 32 is mandatory with DFlash (per the card, vLLM crashes at the
default 256). 8 is plenty for single-user use and keeps cuda-graph capture cheap.- No
--quantizationflag, no--kv-cache-dtype— both auto-detect from the
checkpoint'squantization_config(nvfp4-pack-quantized weights, FP8 KV scheme). - No
--trust-remote-code— vLLM 0.25 has native Laguna support. - Keep
--override-generation-config, and do not addmin_p: vLLM rejectsmin_p/logit_biasunder speculative decoding → HTTP 400 on every sampled request. - Reasoning comes back in the
reasoningfield of the response message (vLLM
renamedreasoning_content→reasoningin 0.23+). Toggle per request withchat_template_kwargs: {"enable_thinking": false}.
Measured throughput (this box)
Streaming /v1/completions, 256 generated tokens/request, unique prompts (prefix cache
defeated). Filler-text prompts are a worst case for DFlash acceptance — real code/prose
decodes faster (a code-gen smoke test hit 104 tok/s single-stream).
| prompt depth | concurrency | TTFT | prefill tok/s | decode tok/s per stream | aggregate tok/s |
|---|---|---|---|---|---|
| 1K | 1 | 0.12 s | 8,900 | 142 | 134 |
| 1K | 8 | 0.44 s | 2,462 | 83 | 383 |
| 8K | 1 | 0.52 s | 15,867 | 82 | 70 |
| 8K | 8 | 2.65 s | 6,407 | 53 | 233 |
| 32K | 1 | 2.2 s | 14,678 | 126 | 60 |
| 32K | 8 | 10.7 s | 10,472 | 32 | 94 |
| 96K | 1 | 10.3 s | 9,590 | 120 | 21 |
| 96K | 4 | 26.6 s | 8,796 | 51 | 23 |
| 200K | 1 | 32.0 s | 6,255 | 159 | 7.6 |
Takeaways:
- Single-stream decode holds 120–159 tok/s even at 96K–200K context — no depth cliff.
(For scale: the card reports 22–24 tok/s on the DGX Spark.) - Concurrency trades per-stream speed for aggregate: 8 streams ≈ 383 tok/s aggregate at 1K.
- DFlash acceptance is front-loaded (~62% at draft position 0, near zero past position 6),
and drops further under concurrency.num_speculative_tokens: 15(the card's value) is
likely over-drafting for batch>1 workloads — 7 (the BF16 card's value) may bench better
if you serve concurrent users. - First start is slow (weight load + JIT + cuda-graph capture); subsequent starts are much
faster once~/.cache/flashinferand the torch compile cache are warm.
Doing the same command but switching to the nightly vllm build (nightly-f25953cc59f9b4ba9b04b16228d2b86dcfbcbdb1) and adding --max-model-len auto just for good measure seems to have fixed it. Thanks!