The suite defines the same 11 benchmarks for every model on the same DGX Spark: 6 closed-loop tests for controlled throughput and 5 open-loop tests for behaviour under load. Each run records which tests completed, stopped early or have no data. Part of the guide Running LLMs on the DGX Spark.
02Why 11 benchmarks
A single speed measurement does not show how a model responds to a different load. A model with high tokens/sec on one stream can slow down sharply under twenty concurrent requests. Another may retain throughput while making new requests wait for their first token. Fine for batch, frustrating for chat.
I therefore measure throughput at fixed concurrency (closed-loop) and with independently arriving requests (open-loop). I also vary prompt and response lengths. This shows how speed and latency change across scenarios.
11
benchmarks
3
repeats · closed-loop
42
seed · open-loop
03Two tools, two questions
Aclosed-loop
llama-benchy
How does throughput scale at a fixed number of concurrent streams?
Closed-loop keeps one request active per stream: the next starts as soon as one finishes. The suite tests fixed concurrency values from 1 to 20. Every cell runs three times and is reported as mean ± stddev.
Ideal for: a single user, batch processing, code completion. Not representative of: a chat app with many concurrent sessions.
Bopen-loop
vllm bench serve
How does it hold up under X concurrent users who don't wait for each other?
Open-loop schedules arrivals independently of what the server is already doing. Request rate and burstiness define the pattern; at 0.3 req/s the average gap is about 3.3 seconds. The generator uses seed 42 so the configured load is repeatable.
Result: p50/p95 TTFT and per-user tokens/sec under load. I do report TTFT numbers (above 2s your app starts to feel slow), but they don't drop models from the ranking. An open-loop test only counts when at least 99% of requests complete successfully.
04The 11 benchmarks
Every card comes directly from the versioned benchmark contract. Expand "view command" for the reproducible command template and replace ORG/MODEL and SERVED_MODEL_NAME. Model pages fill those values from the run metadata.
01 · llama-benchyclosed-loop
Chat
Short prompt, long answer. The shape that has to feel like ordinary chat; TTFT decides whether it feels snappy.
pp (prompt)
1024
tg (gen)
1024
depth
0
concurrency
1 · 5 · 10
repeats
3
tokens/sec · ttft p50
3 repeats · mean ± stddevview command →hide command ↑
Long chains of thought, 1k in and 4k out, a slow arrival rate of 0.2 because every request costs a lot of decode budget. Tests whether TTFT stays stable.
Commands are built deterministically from the versioned contract and each run's metadata.
First start an OpenAI-compatible vLLM server with the model and server configuration from the run metadata. Then use the command on the model page. Test 08 expects ShareGPT V3 at /tmp/ShareGPT_V3.json; the other open-loop tests generate synthetic random prompts.
Historical runs did not store the original argv verbatim. Published commands are therefore labelled reconstructions from the contract and run metadata. The source link pins both Git revisions, so you can inspect exactly what the reconstruction uses.
✓Contract and run source pinned to Git revisions
✓Model id, served name and tool versions from run metadata
✓Closed-loop: 3 repeats reported as mean ± stddev
✓Open-loop: seed 42, p50/p90/p95/p99 percentiles and at least 99% request success
✓Raw open-loop results saved as JSON in /tmp
✓Prefix caching disabled in the published runs
A model you'd
like to see in the suite?
Send a Hugging Face link or vLLM configuration. If the model fits on the Spark, I can compare it using the same tests.