Executive summary

  • One NVIDIA B300 delivered 285 output tokens/s for a single short request and 972 tokens/s at concurrency eight. More concurrency added almost no throughput and mainly increased queueing.
  • The first response over exactly 800,000 input tokens started after 71.4 seconds. A natural cached follow-up started after 1.59 seconds, although controlled runs varied from 1.62 to 11.15 seconds.
  • The main load suite completed 1,788 requests without an error, preemption, or out-of-memory event. We retained an 8,192-token scheduler batch and a 1,048,576-token context limit for production.

These numbers measure infrastructure performance, not model answer quality.

What we tested

We deployed DeepSeek V4 Flash with vLLM 0.25.0 on one NVIDIA B300 SXM6 with 275,040 MiB of memory. The model used mixed FP4/FP8 weights, an FP8 KV cache, and DSpark speculative decoding with seven draft tokens. The client sent streamed, OpenAI-compatible requests directly on the server, so the results exclude public-network and web-interface latency.

Where useful throughput tops out

For a short workload with 1,024 input and 256 output tokens, concurrency eight gave the best balance between throughput and responsiveness.

ConcurrencyOutput tokens/sTTFT p50 / p95E2E p50
128589 / 90 ms863 ms
4698109 / 286 ms1,398 ms
8972119 / 494 ms1,941 ms
161,0302,051 / 2,436 ms3,769 ms

Moving from eight to sixteen concurrent requests added only 6% throughput, while median time to first token rose from 119 ms to 2.05 seconds. With open-loop arrivals, 2 requests/s was stable and queueing appeared at 3 requests/s. On a decode-heavy workload with 4,096 input and 2,048 output tokens, concurrency eight reached 1,695 output tokens/s.

We measured a typical workflow using a long court decision and a Czech question about the Constitutional Court's reasoning. For the stress test, we repeated the document until the formatted input contained exactly 800,000 tokens. A follow-up then reused the same document and the previous answer.

ScenarioInput tokensPrefix-cache hitTTFTEnd-to-end latency
Initial question800,0000%71.40 s78.42 s
Cached follow-up801,62299.80%1.59 s6.15 s
Same follow-up without cache801,6220%71.56 s79.31 s

In this natural run, caching reduced time to first token by 97.8%. It should not yet be treated as a fixed SLO. Across three cache-isolated repetitions, the hit rate stayed near 99.78%, while TTFT ranged from 1.62 to 11.15 seconds. The request queue remained empty, and the difference occurred inside vLLM's prefill stage.

What we kept

Raising the scheduler batch from 8,192 to 16,384 tokens made cold prefill 2.7% faster, but the complete two-question workflow was 0.8% slower. It also reduced KV-cache capacity by 31.6%. We therefore retained the 8,192-token batch and only raised the context limit to the model's native 1,048,576 tokens.

The model occupied 156.32 GiB and vLLM allocated 81.17 GiB to the KV cache. At least 20.72 GiB remained free during the 800K test. The GPU reached 100% utilization, 1,006 W of its 1,100 W power limit, and 67 °C. There is memory headroom, but a cold prefill leaves effectively no compute headroom on one GPU.

Production recommendations

Follow-ups must reach the same live cache for their conversation or document. Multiple replicas therefore need session-aware routing or a persistent, shared KV cache. The observed cache-latency variance also deserves retesting on newer vLLM releases before defining an SLO.

When the application can avoid resending the entire document, a stateful session or retrieval over stored content is preferable. Genuine 800K requests require a gateway that accepts at least 4 MiB request bodies, streams responses, and allows more than 100 seconds of upstream time.

With a second NVLink-connected B300, our first comparison would be tensor and expert parallelism against two independent replicas with strict session affinity. Separate prefill and decode nodes become more compelling under mixed concurrent traffic. A single long conversation still uses both stages sequentially and requires a large KV-state transfer between GPUs.