Home

Benchmarks

QEngine is my engine for running language models on one NVIDIA GH200 GPU. With one request at a time it was the fastest of five engines on the main test, but it is slower on very long prompts and with many requests at once. Like the others, it uses speculative decoding: a quick draft guesses several tokens (word pieces) ahead, and the full model checks them in one pass.

Results

Tokens per second, one request at a time
325
Relative to mistral.rs, the fastest other engine at one request
1.49×
Relative to vLLM with 32 requests at once (slower)
0.58×

The model is Qwen3.8-27B-FP8, an open 27-billion-parameter model. The main test uses the 64 writing prompts of mistral.rs’s published benchmark. QEngine was tuned on them, which can flatter it, so I also ran code, math and JSON prompts it was never tuned on: there it was 1.49× to 1.65× as fast as mistral.rs.

Tokens per second, one request at a time
EngineTokens per secondSpeedup
QEngineOctober 13 build325Not applicable
mistral.rscommit b6ea3f22141.49×1.46–1.53
vLLMv0.311851.75×1.71–1.79
SGLangv0.5.19.dev991771.82×1.79–1.85
TensorRT-LLMv1.3.0rc291572.07×2.02–2.11

Medians of three runs, with 95% intervals. The mistral.rs and SGLang speedups use their faster earlier speeds (Method).

Relative to mistral.rs, one request at a time
Prompt typeWriting (tuned)1.49×Code1.49×Math1.65×JSON1.51×Prompt length (tuned)~4,000 tokens1.25×~16,000 tokens0.95×~30,000 tokens0.86×01×2×

Grey line: equal speed. Hollow: slower. Error bars: 95% intervals (prompts redrawn at random).

The speedup does not change the answers: every output checked matched a run without speculative decoding.

Writing
64/64
Code
24/24
Math
24/24
JSON
24/24
~4,000 tokens
16/16
~16,000 tokens
16/16
~30,000 tokens
16/16

Writing: all 3 runs, compared with a run from an earlier QEngine build.

Where it is slower

Long prompts

From about 16,000 prompt tokens mistral.rs is faster, because QEngine is slower to read the prompt. Other engines were not run on long prompts. QEngine’s settings were tuned on these prompts, but reading long prompts got less optimization work than the rest of the engine before I ran out of GPU time; I plan to improve it and will update these numbers.

~16,000-token prompts, lower is better
Time before the first tokenQEngine2.2 smistral.rs1.4 s0 s1 s2 s3 sTime per later tokenQEngine3.76 msmistral.rs4.91 ms0 ms2 ms4 ms6 ms

Medians over 16 prompts, one run each.

Many requests at once

Here I compare total output across all requests with vLLM’s best setup for each number of requests.

Total tokens per second by requests at once, with QEngine relative to vLLM below
01,0002,0003,0006441,1291,816vLLM2,9337119251,124QEngine1,70641.10×80.82×slower160.62×slower320.58×slower

Requests at once double at each step. Single runs on 32 prompts from QEngine’s tuning pool, so no intervals.

Another way to compare: set a minimum average speed that 9 in 10 users must get, and see how much each engine can serve in total.

Most total tokens per second under a speed floor
Engine10 ms per tokenabout 100 tokens/s per user20 ms per tokenabout 50 tokens/s per user
QEngine9251,706
vLLM1,8162,933
TensorRT-LLM8592,058

The floor: 9 in 10 requests average at most that time per later token. TensorRT-LLM kept its one-request setup.

Not measured yet: memory use, startup time, cost per token.

Other models

On two smaller models, with the same 64 writing prompts and one request at a time, I compared QEngine with vLLM, the fastest other engine I found.

Tokens per second, with QEngine’s speedup and 95% interval
Qwen3-8B1.53× (1.50–1.55)QEngine486vLLM v0.31, EAGLE-3318Llama-3.1-8B-Instruct1.11× (1.08–1.13)QEngine464vLLM v0.31, DFlash4190250500

QEngine was tuned on these prompts for Qwen3-8B only. On Llama, which used its own sampling settings, it was faster on 54 of 64.

Results with several requests at once are reported for Qwen3.8-27B-FP8 only.

Method

Every engine ran alone on the same GH200 with the same client, prompts and sampling, in the fastest setup I found. The plan was fixed in advance. One later change, faster vLLM setups for many requests, made QEngine’s comparison worse.

QEngine’s code is private, and it has changed since these runs.