· 14 min read

We recently started offering servers with 2× NVIDIA RTX PRO 6000 Blackwell Server Edition GPUs. 96 GB of GDDR7 per GPU, 192 GB in total, in an ordinary air-cooled rack server with no need for liquid cooling. Before you put one in production (or in your closet), you probably want to know what it can actually do with modern LLMs.
We tested 12 model families, from 9B to 122B parameters, across more than 85 configurations and 435 benchmark runs. That covered dense and mixture-of-experts (MoE) models, BF16, FP8, NVFP4 and INT4 quantizations, tensor-parallel, data-parallel and expert-parallel deployments, with and without speculative decoding, all through a standardized vLLM benchmark suite. Every run used the same server hardware configuration that’s available from us.
This post summarizes what we learned. The headline numbers, the surprises, the traps… and what any of it means if you're deciding to run it yourself.
We wanted to compare single- and dual-GPU performance and understand the economics of self-hosting.
In order to make an informed economic decision, you should have at least a rough idea of the following numbers:
You should also have an idea of how they relate to each other when selecting suitable hardware. The model we choose to run on this hardware needs to process / generate enough tokens per month to bring the per-token cost down.
The challenge of achieving high token throughput, as you will see in the benchmarks, is concurrency:
All this to say a suitable model that can be operated at reasonable per-token cost will require more hardware than you might expect. It might even be a model that fits on your gaming GPU at home, but now scalable.
To make matters even worse, prompt processing and token generation steps have very different performance profiles and interrupt each other - GPU can process only so many tokens in a batch, and prompts, processed in parallel, take most or all of the batch as compared to token-by-token generation across multiple sequences. This manifests as a “choppy” experience to the users - each user’s new prompt or agent’s file read interrupts everybody else’s token generation, bringing overall throughput numbers down.
The “solution” to this problem is to deploy the thing twice - P/D disaggregation and is outside of the scope of this article. Please note however, it is the only way to get close to the reported synthetic benchmark numbers for general (mixed) workloads, such as coding agents.
If your use case is skewed, let’s say “prompt-heavy” – for example, throwing an email at the LLM asking “Is this spam?” with “yes” or “no” answers – you will mostly care about prompt processing speeds.
The benchmarks used the vLLM’s own bench sweep tooling random-token prompts (See vLLM benchmarking docs) with following configurations, that allow us to grasp the performance under distinct regimes:
The environment:
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.126.20 Driver Version: 580.126.20 CUDA Version: 13.0 |
|-----------------------------------------+------------------------+----------------------+
| 0 NVIDIA RTX PRO 6000 Blac... On | 00000000:01:00.0 Off | 0 |
| N/A 46C P0 161W / 600W | 92351MiB / 97887MiB | 100% |
+-----------------------------------------+------------------------+----------------------+
| 1 NVIDIA RTX PRO 6000 Blac... On | 00000000:E1:00.0 Off | 0 |
| N/A 45C P0 160W / 600W | 92365MiB / 97887MiB | 100% |
+-----------------------------------------+------------------------+----------------------+The cross-model picture, feat. every model in its best-performing configuration:



*The model does not know much, but is smart enough to go find out and not lie about it.*
The reasoning is not raw throughput, but rather what you get per unit of capability: a dense Qwen3.8-27B is a very capable model for its size, and this node serves it at ~4,000 tok/s aggregate decode, ~15,700 tok/s prefill, 180 tok/s single-stream with MTP, 2.3 M tokens of KV cache.
If you're picking one general-purpose model on one or two RTX PRO 6000s, this is the way.

TP2+NVFP4 is the default recipe. The 2nd GPU doubles aggregate decode from 1,490 → 3,210 tok/s and triples KV capacity. NVFP4 wins outright every column: prefill +46% over BF16, concurrent decode +23%, single-stream +80%. It also leaves the most room for cache. As with the MoE models, there’s no throughput case for BF16 here.
MTP is the interactive switch. Three speculative tokens take single-stream decode from 45 → 112 tok/s in BF16 and from 81 → 180 tok/s in NVFP4 at a ~25% aggregate-throughput cost.
DFlash2 turns the 27B into a coding buddy. With a dedicated draft model and 7 speculative tokens, single-stream hits 243 tok/s in BF16 and 360 tok/s in NVFP4. Aggregate decode roughly halves. Recommended for lower-concurrency deployments.
One GPU is a legitimate deployment. A single RTX PRO 6000 runs the NVFP4 27B at 2,710 tok/s of aggregate decode with 0.96 M tokens of cache, and, amusingly, at higher prefill throughput than TP2 (17,100 vs. 15,700 tok/s), since two-GPU prefill pays the PCIe all-reduce tax. So TP2 wins where it matters for a shared endpoint: decode and capacity.
A next-generation Qwen model with various architecture improvements:
It ships FP8-quantized, keeps the 256K context window.

Flash-Next matches the 27B's prefill and lands ~20% below its concurrent decode. MTP, though, is a poor trade on this architecture: aggregate decode halves (3,130 → 1,540 tok/s) for a modest single-stream gain (94 → 127). Unlike on the 27B, we can't recommend it.
KV capacity per configuration as reported by vLLM:

The formula = monthly cost ÷ (throughput × seconds per month) – at the illustrative $2,800/month:

If we provisioned one of these nodes today: Qwen3.8-27B, TP2, NVFP4 as the shared endpoint; its MTP twin (or a single-GPU deployment, with the second card spared) for interactive work; Flash-Next for long-context and agentic traffic. The 35B MoE remains the answer when tokens-per-second-per-dollar is the only variable.
The tables above are best-case numbers from synthetic, homogeneous load. Real traffic is not homogeneous, and this is where naive capacity planning falls apart.
As mentioned in the beginning of this article, incoming requests (prefills) will interrupt token generation for all users.
The prefill performance really matters for user experience – for example, you can fit DeepSeek V4 Flash with 1M+ context on the two GPUs, with some manoeuvring, but chewing through 1M token request would take about 1m30s, during which every other user wonders why their agent stopped responding mid-sentence.
Here is what that looks like in practice: 16 concurrent coding sessions running against Qwen3.6-35B-A3B BF16 TP2 with MTP over about two hours of real usage.
Note that the real aggregate decode speeds are far from the corresponding multiple of single-request decode speeds we observed in benchmarks.
The same configuration that sustains 6,300+ tok/s under pure concurrent decode and ~350 tok/s on a single request, averages only ~240 tok/s of aggregate generation across these sessions – peaks barely reach 500 tok/s. Prompt processing interruptions on every request (agent step) bring the averages down dramatically.
The industry-standard solution is P/D (prefill/decode) disaggregation: deploy the model at least twice, one instance dedicated to prompt processing and one to token generation, with the KV cache handed off between them. Then tune the P:D ratio to your traffic – prompt-heavy workloads want more P instances, chat and code generation want more D. vLLM has first-class support for this, with transfer layers such as NIXL to move KV cache between instances. With 2× RTX PRO 6000 nodes, disaggregation pushes you toward smaller and/or quantized models – but, as the tables above show, that's a perfectly livable place to be.
Generalizing from our results, self-hosting strategies fall into three buckets:
1. Run the largest, most capable model possible, regardless of token speed. With llama.cpp's CPU+GPU hybrid inference for MoE models, large models like GLM-5.2 or Kimi K2.6 are possible at ~16 tok/s generation, which amounts to ~$100 per 1M output tokens. Prompt processing speeds, however, are horrendous. This is at best, a focused “deep-research” rig.
2. Run a hardware-adequate model for internal needs. Small (<50 B) or medium (100–300 B) parameter models, serving a few workflows or a handful of power users. This is the 2× RTX PRO 6000's comfort zone: one node, one engine, no disaggregation, Qwen3.6-35B-A3B-class models at 150–400 tok/s per session.
3. Run a hardware-adequate model for customer-facing or heavy agentic workloads. This is where time-to-first-token and token generation experience matters. Disaggregation and a lot of available KV capacity is a must. On 2× RTX PRO 6000 nodes this means smaller and/or quantized models per instance. Multiple nodes, each running a P/D pair of, say, NVFP4-quantized 35B-class MoEs, is a genuinely competitive building block.
Raw throughput only matters once you convert it to cost per token. The formula is simple:
# cost per 1M tokens = monthly server cost × 1,000,000 / (tokens per second × 2,592,000)(2,592,000 = seconds in a 30-day month.) Illustratively, at $2,800/month for the 2× RTX PRO 6000 server, at 100% utilization:

Even the least efficient configuration lands in the same ballpark as, or below, typical API pricing for comparable models.
Note that the table shows 100% utilization, which nobody achieves. Real fleets with request gaps, idle periods and prefill/decode interference run at a fraction of synthetic peak – at ~30% effective utilization, so multiply the numbers by ~3.3 (e.g. the flagship NVFP4 setup lands around $0.30 per 1M tokens). Utilization, not hardware price, is the dominant term in self-hosting economics.
If we had to compress all of the above into a few rules of thumb:
There are topics we deliberately didn't cover here, but at this scale, they matter, too:
Founded in 2014, DataPacket is a dedicated server provider operating a global low-latency network. With a footprint of 67 locations across 6 continents, DataPacket helps businesses–including gaming and video streaming companies–to deliver great online experiences.