Blog · October 29, 2026
One H100, 213 tokens a second: faster than every GPU provider on OpenRouter
We raced Qwen3.8-27B on a single Nebius H100 against the fastest providers on OpenRouter. Same prompts, one request at a time. The recipe, the method, the raw numbers and the caveats.
Also on YouTube.
This morning we recorded our first end-to-end demo: Qwen3.8-27B on one H100 in a Nebius account, deployed by denv, called with the OpenAI client. It answered at 50.8 tokens a second.
So we opened OpenRouter, looked at who serves the same model fastest, and set out to beat them on that same kind of GPU. By the evening the H100 was doing 213 tokens a second, faster than every GPU provider we raced.
The result
Qwen3.8-27B, 24 requests per target, one request at a time, measured back to back on October 29, 2026.
| Provider | Hardware | Output speed, median | 10th percentile | First token, median | 90th percentile |
|---|---|---|---|---|---|
| Cerebras | wafer-scale chip | 1,092 tok/s | 781 tok/s | 227 ms | 689 ms |
| denv | 1× H100, FP8 + DFlash2 | 213 tok/s | 139 tok/s | 221 ms | 234 ms |
| ModelRun (Modular) | GPU, fp4 | 191 tok/s | 84 tok/s | 393 ms | 1,103 ms |
| Modal | GPU | 125 tok/s | 89 tok/s | 394 ms | 653 ms |
| Parasail | GPU, fp8 | 73 tok/s | 43 tok/s | 509 ms | 1,589 ms |
Cerebras is in a different class: a wafer-scale chip, not a GPU. Among GPU providers, one H100 running denv's recipe was the fastest at the median. Its first token was also the quickest we measured, and the steadiest: 234 ms at the 90th percentile (the providers' figures include one extra network hop; see below).
Where we started
OpenRouter lists 21 providers for Qwen3.8-27B and publishes each one's speed on live traffic. When we looked, the leaders were Cerebras (532 tok/s), ModelRun (142) and Modal (125). Our demo's 50.8 tok/s put us around twelfth.
The reason is simple arithmetic. With one request in flight, every new token reads all of the model's weights from GPU memory once. Qwen3.8-27B in bf16 is 55.6 GB, and an H100 reads about 3.35 TB/s, so the ceiling is roughly 60 tokens a second. We were already at 82% of it. Going faster meant changing what each step reads, or how many tokens each step produces.
Four recipes, one GPU type
Each line is a denv recipe deployed to a 1× H100 on Nebius and raced with the same script.
| Recipe | Output speed, median | What changed |
|---|---|---|
| bf16, no speculation | 50.8 tok/s | this morning's demo (one call) |
| FP8 + MTP, 3 draft tokens | 164 tok/s | Qwen's official FP8 checkpoint halves the bytes; the model's own multi-token-prediction head drafts 3 tokens a step |
| INT4 + MTP, 3 draft tokens | 179 tok/s | a 4-bit weight build reads less again, at some cost in quality |
| FP8 + DFlash2, 7 draft tokens | 213 tok/s | an external block-diffusion drafter proposes 7 tokens a step; more of them are accepted |
The winner is not the 4-bit build. Speculative decoding verifies every drafted token against the target model, so the output is the FP8 model's own output: the drafter changes the speed, not the answer.
The recipe
Any team can create the same recipe and deploy it to their own cloud:
denv recipe create qwen3.8-27b/fp8-dflash2 \
--model Qwen/Qwen3.8-27B-FP8 --engine vllm --max-model-len 32768 \
--arg --max-num-seqs=256 \
--arg '--speculative-config={"method":"dflash","model":"incoai/Qwen3.8-27B-DFlash2","revision":"015e795645c74b1a0eeef3b570031fb62e769bc5","num_speculative_tokens":7}'
denv pins it at creation: the weights to commit 017b9c7, the drafter to its revision, and vLLM 0.32.0 to its image digest. A deploy is accepted on a GPU type only after the recipe has come up healthy there.
On a fresh machine the first start took 12 minutes 46 seconds (image 3m43s, weights 3m56s, engine 5m07s). With the weights already on the machine, a restart took 99 seconds.
How we measured
- The same six prompts (code, writing, a summary, a comparison, an email), four rounds: 24 requests per target.
- One request at a time, up to 512 tokens, thinking off, temperature 0.7 and top-p 0.8 for everyone.
- Each provider pinned through OpenRouter's provider routing, with fallbacks off.
- Output speed is the completion tokens after the first, divided by the time from the first token to the last. Time to first token is measured at the client.
- Everything ran from one laptop in one session, back to back.
The script is about a hundred lines of Python with the OpenAI client: race.py. The results it wrote are in race-final.json. Run it against any endpoint you like.
What this does not show
- Concurrency. We sent one request at a time to a GPU that served only us. The providers were serving other customers at the same time. Per-request speed on a dedicated GPU drops as you add concurrent requests; we did not measure that here.
- Price per token. At one request at a time, a $4.50/hour H100 producing 213 tok/s costs about $5.87 per million output tokens, more than ModelRun's $2.50. A dedicated GPU pays for itself with steady traffic, or when the data has to stay in your own account.
- The network. Providers were reached through OpenRouter, which adds a hop to their time to first token but not to their output speed. Our endpoint was called directly.
- Precision differs. ModelRun serves fp4, Parasail fp8, Cerebras fp16; Modal does not say. We served FP8.
- One day, one place, 24 requests each. Speculative decoding is faster on predictable text such as code than on open-ended prose, so other prompts will move the numbers.
Try it
denv deploys any open model, on any engine, to GPUs in your own cloud account, and you pay your cloud directly. If you want this recipe on your GPUs, book a call or start at denv.ai.