Out-of-the-box numbers before any tuning: SGLang cookbook “DGX Spark” recipe, NVFP4 weights, no speculative decoding. Measured 2026-10-31 on spark1 (ASUS Ascent GX10, GB10, 128 GB unified memory).
This is the line to beat. Each team gets one Spark and tunes it for speed and concurrency; the scoring rules are below.
Total output tokens/s across all users (bars) and the speed each user sees (line).
Time to first token and time per output token, median and 99th percentile (log scale).
Each point is one concurrency level. Up and to the right is better; tuning should push this curve outward.
GPU clock and power, and the hottest CPU sensor (the GX10 powers off near 93–97 °C).
| Shape | Users | Requests | Duration s | Req/s | Prompt tok/s | Output tok/s | Per-user tok/s | TTFT med ms | TTFT p99 ms | TPOT med ms | TPOT p99 ms | E2E med s |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1k in / 1k out | 1 | 4 | 315 | 0.01 | 13 | 13.0 | 13.1 | 452 | 456 | 76.4 | 77.1 | 78.6 |
| 1k in / 1k out | 2 | 8 | 333 | 0.02 | 25 | 24.6 | 12.4 | 696 | 866 | 80.8 | 80.9 | 83.3 |
| 1k in / 1k out | 4 | 16 | 351 | 0.05 | 47 | 46.7 | 11.8 | 1,215 | 1,980 | 84.5 | 84.9 | 87.8 |
| 1k in / 1k out | 8 | 32 | 381 | 0.08 | 86 | 85.9 | 10.9 | 1,283 | 3,229 | 91.5 | 93.3 | 95.6 |
| 1k in / 1k out | 16 | 64 | 446 | 0.14 | 147 | 147.0 | 9.4 | 2,662 | 6,501 | 105.9 | 110.2 | 112.0 |
| 1k in / 1k out | 32 | 128 | 572 | 0.22 | 229 | 229.3 | 7.4 | 3,513 | 12,803 | 134.3 | 142.6 | 144.4 |
| 1k in / 1k out | 64 | 256 | 1,013 | 0.25 | 259 | 258.9 | 6.4 | 16,042 | 178,560 | 156.0 | 164.7 | 169.6 |
| 8k in / 128 out | 1 | 4 | 50 | 0.08 | 650 | 10.2 | 12.9 | 3,392 | 3,400 | 77.3 | 77.3 | 13.2 |
TTFT = time to first token. TPOT = time per output token after the first (per-user tok/s = 1000 / TPOT). Server became ready 242 s after launch. chunked_prefill_size=2048 context_len=262144 max_prefill_tokens=16384 max_running_requests=44 max_total_num_tokens=1162733
Speed only counts if quality holds. These are the stock server’s scores (lm-evaluation-harness, thinking off, greedy decoding); a tuned server must reach the gate on every test.
Running after the speed sweep: GSM8K (full 1,319), IFEval (full 541) and a 16K-token RULER needle test (100 samples).
Server, exactly as published in the SGLang cookbook (image pinned to the version it was validated on):
docker run --gpus all --shm-size 32g -p 30000:30000 -v ~/.cache/huggingface:/root/.cache/huggingface --ipc=host \
lmsysorg/sglang \
sglang serve \
--trust-remote-code \
--model-path RadixArk/Qwen3.8-27B-NVFP4 \
--kv-cache-dtype fp8_e4m3 \
--mem-fraction-static 0.80 \
--attention-backend flashinfer \
--chunked-prefill-size 2048 \
--reasoning-parser qwen3 \
--tool-call-parser qwen3_coder \
--mamba-radix-cache-strategy extra_buffer \
--mamba-ssm-dtype float32 \
--host 0.0.0.0 \
--port 30000
Load generator (SGLang’s own bench_serving, same image, same box, real ShareGPT text trimmed to fixed lengths, replies forced to full length):
python3 -m sglang.bench_serving --backend sglang --host 127.0.0.1 --port 30000 --model RadixArk/Qwen3.8-27B-NVFP4 \ --dataset-name random --random-input-len 1024 --random-output-len 1024 --random-range-ratio 1.0 \ --num-prompts $((4*C)) --max-concurrency $C --seed 42 --output-file sweep_1k1k.jsonl # C = 1 2 4 8 16 32 64; long-prompt shape: --random-input-len 8192 --random-output-len 128, C = 1 4 16
kernel: 7.0.0-1024-nvidia driver: 580.178.04 dgx_release: 7.6.0 sglang: 0.5.19 image: lmsysorg/sglang@sha256:d6e7288627be8b02be88e4bba38e73f6d50e2826869f753c13a4c4385ab3eda9 model_revision: 319f741cce68d7914884900c138a1fbb70a42f30
Context: there is no lightweight official standard for this. MLPerf Inference is the industry benchmark but takes weeks to run compliantly; InferenceX (SemiAnalysis) uses the same throughput-vs-interactivity method on fixed 1k/1k and 8k/1k shapes. These rules borrow from both.