Can you self-host Reflection's Beam on RTX PRO 6000 cards instead of B200s, and what do you actually get? I set it up on 4 GPUs and measured quality, speed, DFlash2, context and cost. I also built a 4-bit version of the community REAP model that runs on just 2 GPUs.
Reflection's vLLM recipe lists B200/B300 or 8× H100 for the NVFP4 checkpoint. Many teams that want to self-host for privacy or cost have RTX PRO 6000 cards (Blackwell workstation chip, SM120, 96 GB, PCIe, no NVLink) instead. Nobody had published whether Beam runs there, which flags it needs, or how fast and how good it is. So I measured it:
| Hardware | 8× NVIDIA RTX PRO 6000 Blackwell, 96 GB each (Nebius VM). Official model on 4 GPUs, 2-GPU build on 2. |
|---|---|
| Software | vllm/vllm-openai:reflection-beam (vLLM 0.1.dev23042+g8e0922e88). Beam support isn't in a pip release yet. |
| Models | reflection/Beam-1.0-501B-A23B-NVFP4 (official), mrfakename/Beam-1.0-REAP-255B-A23B (BF16, community pruning), my NVFP4A16 build of it. |
| Sampling | temperature 0.7, top_p 0.99 (Reflection's eval settings), up to 32k generated tokens incl. thinking, seed 42, one run each. |
--moe-backend marlin
In this image the FP4 experts run weight-only on SM120 (BF16 activations) through the Marlin kernel. With that flag the official checkpoint loads at TP4 and leaves 957k tokens of FP8 KV cache.
The recipe's "attention_backend":"FLASH_ATTN" errors because FP8 KV cache needs FA3 (SM90) or FA4 (SM100). Leaving it on auto fails DFlash2's own check (only FLASH_ATTN or FLASHINFER are allowed). FLASHINFER works, but only with adaptive verification turned off.
Kernel autotuning takes a while; set VLLM_ENGINE_READY_TIMEOUT_S=3600 so the API server doesn't give up.
humaneval_instruct scores 0
That task prefills the start of the answer, which doesn't work with Beam's thinking template, so every answer comes back empty. I used a plain chat-based HumanEval runner instead (humaneval_chat.py in the dataset).
docker run -d --name beam --gpus '"device=0,1,2,3"' --ipc=host -p 8000:8000 \
-v ~/.cache/huggingface:/root/.cache/huggingface \
-e VLLM_ENGINE_READY_TIMEOUT_S=3600 \
--entrypoint vllm vllm/vllm-openai:reflection-beam \
serve reflection/Beam-1.0-501B-A23B-NVFP4 \
--tensor-parallel-size 4 --max-model-len 65536 \
--kv-cache-dtype fp8 --moe-backend marlin \
--reasoning-parser beam --enable-auto-tool-choice --tool-call-parser beam \
--speculative-config '{"method":"dflash","model":"reflection/Beam-1.0-501B-A23B-DFlash2",
"num_speculative_tokens":7,"attention_backend":"FLASHINFER",
"enable_adaptive_verification":false}'
Three models, same harness: the official NVFP4 on 4 GPUs, mrfakename's REAP version (half the experts removed) in BF16 on 8 GPUs, and my 4-bit build of that REAP model on 2 GPUs. MMLU-Pro uses 30 questions per subject (420 total); IFEval and HumanEval are complete.
| MMLU-Pro | IFEval strict | HumanEval | Empty answers | |
|---|---|---|---|---|
| Official NVFP4 · 4 GPUs | 0.843 ± 0.017 | 0.939 ± 0.010 | 0.963 (158/164) | 1 / 2 |
| REAP BF16 · 8 GPUs | 0.721 ± 0.021 | 0.913 ± 0.012 | 0.951 (156/164) | 3 / 2 |
| REAP NVFP4A16 · 2 GPUs | 0.702 ± 0.022 | 0.896 ± 0.013 | 0.951 (156/164) | 1 / 4 |
Empty answers = MMLU-Pro / IFEval prompts where the model was still thinking at the 32k-token limit. Under 1% everywhere.
The official NVFP4 checkpoint works on RTX PRO 6000: 0.843 on MMLU-Pro, 0.939 on IFEval, 158/164 on HumanEval. No sign of broken output from the Marlin weight-only path on SM120: 1 empty answer in 420 MMLU-Pro questions, 2 in 541 IFEval prompts.
The 4-bit step is within noise; the pruning step is not. Comparing answers question by question:
| Paired comparison (same questions) | MMLU-Pro | IFEval | HumanEval |
|---|---|---|---|
| Official → REAP BF16 (pruning) | 70 lost / 19 gained p < 0.001 | 27 / 13 p = 0.04 | 2 / 0 p = 0.5 |
| REAP BF16 → NVFP4A16 (4-bit) | 27 / 19 p = 0.30 | 29 / 20 p = 0.25 | 3 / 3 p = 1.0 |
Exact two-sided McNemar test on discordant pairs. One sampled run each, so part of each difference is sampling noise.
Where the pruning hurts: REAP picked its experts on code and agent text. Math, physics and computer science stay within a few questions of the official model. Health, law, economics and philosophy each lose 7 to 9 questions out of 30. Coding (HumanEval) is 156 vs 158.
vllm bench serve, 1024 tokens in / 512 out, random prompts| Users | Official · 4 GPUs | Time/token | First token | REAP NVFP4 · 2 GPUs | Time/token | First token |
|---|---|---|---|---|---|---|
| 1 | 97.8 tok/s | 9.9 ms | 0.17 s | 80.4 tok/s | 12.1 ms | 0.19 s |
| 16 | 599.5 | 25.0 ms | 0.85 s | 428.3 | 35.3 ms | 1.08 s |
| 64 | 1,173.8 | 50.8 ms | 1.94 s | 988.8 | 60.1 ms | 2.40 s |
DFlash2 makes a single user 1.67× faster (100.5 → 167.7 tok/s), most on code (194.7 tok/s) where the draft model guesses well. The drafter's mean acceptance length was about 3.2–3.8 tokens, and 70–79% of first guesses were accepted. I didn't measure DFlash2 under many concurrent users, where speculative decoding usually helps less.
Context: with FP8 KV cache the 4-GPU server holds 957,317 tokens of KV cache (with DFlash2 loaded), 14.6 full 64k conversations at once. The 2-GPU build holds 553,601 (8.4×). Beam's sliding-window attention (44 of 52 layers use a 512-token window) keeps the cache small.
Default: Nebius on-demand list price for RTX PRO 6000, $1.80/GPU-hour (computeprices.com, Oct 2026). Change it to your own price.
At full load the official model costs about $1.70 per million output tokens on rented RTX PRO 6000s. A single user alone on the box costs about 12× more per token, so self-hosting only pays when the server is shared. Per GPU, the 2-GPU build serves 1.7× more tokens, but only for work where its knowledge gap doesn't matter.
mrfakename's REAP model removes 128 of each layer's 256 experts, keeping the 16 most-used per routing group on ~925k tokens of code/agent text. It was released with a perplexity check only. In BF16 it still needs 8 GPUs.
I quantized its experts to NVFP4 weights (BF16 activations) with llm-compressor's data-free model_free_ptq, same split as Reflection's official NVFP4:
experts in 4-bit, attention, router, dense layers, embeddings and LM head in BF16. Result: 145 GiB (155 GB), fits on 2× RTX PRO 6000,
80 tok/s for one user, 989 tok/s at 64 users.
Use it when you only have 2 GPUs and the work is mostly code. For anything knowledge-heavy, the official model on 4 GPUs is clearly better (0.84 vs 0.70 MMLU-Pro). All pruning credit goes to mrfakename; Beam is Reflection's.
docker run -d --name beam-reap --gpus '"device=0,1"' --ipc=host -p 8000:8000 \
-v ~/.cache/huggingface:/root/.cache/huggingface \
-e VLLM_ENGINE_READY_TIMEOUT_S=3600 \
--entrypoint vllm vllm/vllm-openai:reflection-beam \
serve peterhdd/Beam-1.0-REAP-255B-A23B-NVFP4A16 \
--tensor-parallel-size 2 --max-model-len 65536 \
--kv-cache-dtype fp8 --moe-backend marlin \
--reasoning-parser beam --enable-auto-tool-choice --tool-call-parser beam
Every script, raw lm-eval sample file, HumanEval answer and benchmark log is in the dataset
peterhdd/beam-rtx-pro-6000-runs:
serve.sh, quick_eval.sh (MMLU-Pro + IFEval), humaneval_chat.py, speed.sh, real_speed.py, quantize_reap.py.