Benchmarks & Comparisons7 min read

B200 vs H200 on a 27B Model: Faster for One User, Slower at 128

We put an NVIDIA B200 on the same test as our H200, RTX PRO 6000 and five other cards. For one request it is the fastest card we have measured, 201 to 231 tok/s. At 32 to 128 concurrent requests it falls 12 to 14% behind the H200. We tested two suspects and ruled both out; here is what is left, and where the B200 is clearly ahead: a 252k-token prompt prefilled in 41 seconds, and 15 full-context requests in cache at once.

201–231 tok/s
one request, the fastest card we have measured
2,867 tok/s
in total at 128 concurrent requests, 14% under the H200
40.9 s
to the first token on a 252k-token prompt
15
full 262k-token requests in the KV cache at once
NVIDIA B200 against H200 NVL on Qwen3.8-27B: tokens per second at 1 and 128 concurrent requests

On 22 October a machine with one NVIDIA B200 joined our network. We ran it through the test every card here gets: the same 27B model, the same vLLM and the same arguments as the H200 and the five-card comparison.

We expected it to win everywhere. It did not. For one user it is the fastest card we have measured. With 32 or more requests at once, the older H200 serves more tokens per second. This post is the numbers, the two explanations we tested and had to drop, and the one that is left.

The setup

GPUone NVIDIA B200, 183,359 MB, compute capability 10.0, 1,000 W limit, PCIe Gen 5 x16, no NVLink
HostUbuntu 26.04.1, kernel 7.0, AMD EPYC 9575F, 30 threads, 167 GB RAM, driver 580.178.04, CUDA 13.0
Verified before listing5,972 GB/s of memory bandwidth (78% of the 7.7 TB/s spec), 66.6 TFLOPS FP32
EnginevLLM 0.31.0
ModelQwen3.8-27B W4A16 (4-bit GPTQ), 19.0 GiB loaded
KV cacheFP8, 139.45 GiB, 3,935,088 tokens by vLLM's figure
Context window262,144
Also onMTP speculative decoding with three draft tokens, CUDA graphs, prefix caching, --max-num-seqs 128, reasoning effort low

The B200 is a cloud VM we rented on Verda in Helsinki. It joined the network with the same docker run command a provider uses, and the model started from our recipe without a single change: the argument set for cards of 64 GB and more.

Method, unchanged from the earlier posts:

  • Every answer is exactly 256 tokens (min_tokens plus ignore_eos).
  • Requests go through our own proxy, straight to the worker.
  • Two runs per point, after a warm-up burst.

Throughput

concurrentB200, run 1B200, run 2per request
1231 tok/s201 tok/s201 to 231
81,182 tok/s1,221 tok/s156
322,218 tok/s2,209 tok/s74
642,627 tok/s2,642 tok/s44
1282,841 tok/s2,893 tok/s24

Next to the cards measured the same way:

concurrentB200H200 NVLRTX PRO 6000
1201 to 231163 to 176106
81,2011,034636
322,2132,5271,342
642,6353,067—
1282,8673,342—

For one request the B200 is about 30% ahead of the H200. Decoding one stream is limited by how fast the card reads the model's weights, and the B200 reads memory faster: 5,972 GB/s in our verification against 4,062 on the H200. At eight requests it is still 16% ahead. From 32 on the order flips, and at 128 the H200 delivers 14% more.

The two B200 runs agreed within 2% everywhere except the single request, where one stream depends on how many of the three draft tokens are accepted.

Two suspects, both cleared

The worker's log names two things that are different on this card, and both looked like the answer.

The FP8 KV cache. On startup vLLM says FlashAttention 4's Blackwell kernel for this model's head size does not take an FP8 cache, and the H200 ran with an unquantized cache. So we started the same container again with --kv-cache-dtype auto, nothing else changed.

The attention backend. On the B200 vLLM picks FlashInfer, and with it, it says, the three MTP draft steps cannot be fused. We forced FlashAttention (--attention-backend FLASH_ATTN), which ran Blackwell's own FlashAttention 4 kernel and did fuse the draft steps.

Both runs were on the same machine, one after the other, sending requests straight to vLLM on the card rather than through our proxy:

concurrentas served (FP8 cache, FlashInfer)unquantized cacheunquantized cache, FlashAttention 4
1201 to 231226 to 232212 to 242
81,2011,2551,176
322,2132,2872,165
642,6352,6612,485
1282,8672,8902,694

The unquantized cache gives 1 to 4%, inside what skipping the proxy can explain. FlashAttention 4 is slower than FlashInfer at every point from eight up. Neither closes the gap, so the FP8 cache stays: it holds 3.9 million tokens instead of 2.1 million for the same throughput.

What is left

The model's weights are 4-bit, and vLLM multiplies them with the Marlin kernel on both cards. Marlin was written for Ampere and Hopper. On a B200 it runs, but as code for an older generation, without the new tensor core instructions that make Blackwell fast at large matrix multiplications.

At one request that hardly matters: the time goes into reading weights from memory, and the B200 reads faster. At 128 requests the matrices are large enough for compute to count, and the H200 runs Marlin on the hardware it was written for.

We think this is the cause, but we have not proven it. The test that would is the same model in a format that does not go through Marlin on Blackwell, FP8 or NVFP4, and that is a different model from the one every other card in this series ran. When we run it, it will be its own post.

Long prompts: where the B200 is clearly ahead

Prefill, one prompt at a time, time to the first token:

prompt tokensB200prefill rateH200 NVL
23,5993.3 s7,082 tok/s2.5 s
61,3298.7 s7,033 tok/s7.3 s
92,66313.4 s6,897 tok/s12.1 s
128,12719.1 s6,715 tok/s18.3 s
197,96531.0 s6,392 tok/s32.8 s
251,90740.9 s6,162 tok/s46.2 s (254,470)

The H200 starts faster on short prompts, but its rate falls from 9,456 to 5,503 tokens per second as the prompt grows. The B200's falls only from 7,082 to 6,162. Past about 200k tokens the B200 is ahead, and on a full 250k prompt by five seconds.

The same 197,652-token prompt sent twice:

time to first tokentokens served from cache
first time30.9 s0
second time0.31 s197,600

After that prompt, a single request still decoded at 230 to 246 tokens per second.

The cache is where the 183 GB shows. With an FP8 cache vLLM has room for 3,935,088 tokens, which is 15 requests of the full 262,144 at once. The H200, with an unquantized cache, holds 5.9 and the RTX PRO 6000 seven.

What this means if you are choosing a GPU

  • One user, or a few, on a mid-size model: the B200 gives the fastest answers we have measured, about 30% ahead of an H200.
  • Many short requests on a 4-bit model: the H200 serves more tokens per second from 32 concurrent up, at a lower price.
  • Very long contexts, many of them at once: the B200. It prefills a 250k prompt faster than anything else here and keeps 15 of them in cache.
  • A 4-bit model is not the B200's best case. Its advantage is meant to come from FP8 and FP4 compute. Our test runs the same 4-bit model on every card so the numbers compare, and that leaves part of this card unused.

Run it yourself

Rent a B200 by the minute

From $8.20 an hour, billed for the minutes it runs, on a machine we benchmarked before listing it. No contract.

Keep reading

Related articles