Speed test matrix
Fara1.5-4B on RTX 3090 24GB
vllm · 0.32.0 · BF166 contexts (0–248K) × 8 concurrency levels (1–128) · prefill at 8K, 16K, 32K, 64K, 128K
Hardware
- Type
- Discrete GPU
- GPU
- RTX 3090
- VRAM
- 24 GB
- CPU
- Intel Core i7-9700K (8C)
- RAM
- 32 GB
- OS
- Ubuntu 24.04.5
Engine
- Engine
- vllm
- Version
- 0.32.0
- Quantization
- BF16
- Backend
- cuda
- Repository
- github.com/vllm-project/vllm
- Build
- vllm/vllm-openai:v0.32.0-x86_64
Run
- Served model
- bench
- Revision
- main
- Benchmark tool
- llm-inference-bench v0.8.0
- Decode test
- Fixed duration
- Prefill mode
- Measured during decode warm-up
- Time per measurement
- 30 s
- Max output
- 8,192 tokens
Launch command
# Untuned out-of-the-box baseline. Spec decode: none # 1x RTX 3090 24GB (Zagitta/gpu-unlock), 420 W limit, PCIe Gen3 x16 | Intel Core i7-9700K 8C | 32 GB DDR4 | Ubuntu 24.04.5, NVIDIA driver 580.178.04 vllm serve microsoft/Fara1.5-4B --max-model-len 262144 --gpu-memory-utilization 0.94 --max-num-seqs 128 --enable-prefix-caching --trust-remote-code --language-model-only
Prefill
prompt tok/s by context length8K context11.8K695 ms TTFT
16K context11.2K1,452 ms TTFT
32K context9,8643,274 ms TTFT
64K context8,2717,789 ms TTFT
128K context6,22520,675 ms TTFT
Sustained decode
total tok/s · rows are context length, columns are simultaneous requests| Context | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 |
|---|---|---|---|---|---|---|---|---|
| 0 | 86.535 ms TTFT | 169.843 ms TTFT | 330.066 ms TTFT | 618.4101 ms TTFT | 1,121.9179 ms TTFT | 1,834.8220 ms TTFT | Over capacity | Over capacity |
| 16K | 82.087 ms TTFT | 155.4122 ms TTFT | 297.2185 ms TTFT | 528.7314 ms TTFT | 848.8615 ms TTFT | Over capacity | Over capacity | Over capacity |
| 32K | 78.2115 ms TTFT | 143.2143 ms TTFT | 269.8240 ms TTFT | 454.5335 ms TTFT | Over capacity | Over capacity | Over capacity | Over capacity |
| 64K | 71.6209 ms TTFT | 123.8252 ms TTFT | 226.6386 ms TTFT | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity |
| 128K | 61.2449 ms TTFT | 97.2591 ms TTFT | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity |
| 248K | 48.0904 ms TTFT | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity |
Over capacity: not run because this many requests at this context would exceed the server's KV cache.
TTFT is measured after the benchmark warms the server's prompt cache, so it mostly excludes prefill.
All measurements
Latencies are medians. Total tok/s is output across all simultaneous requests.| Phase | Context | Requests at once | Status | Total tok/s | Per request tok/s | TTFT | Time between tokens | Average active requests | Completed requests | Output tokens | Measured for |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Prefill | 8K | 1 | Valid | 11.8K | — | 695 ms | — | — | 1 | — | — |
| Prefill | 16K | 1 | Valid | 11.2K | — | 1,452 ms | — | — | 1 | — | — |
| Prefill | 32K | 1 | Valid | 9,864.0 | — | 3,274 ms | — | — | 1 | — | — |
| Prefill | 64K | 1 | Valid | 8,271.0 | — | 7,789 ms | — | — | 1 | — | — |
| Prefill | 128K | 1 | Valid | 6,225.0 | — | 20,675 ms | — | — | 1 | — | — |
| Sustained decode | 0 | 1 | Valid | 86.5 | 86.6 | 35 ms | 11.6 ms | 1.0 | 0 | 2,594 | 30.0 s |
| Sustained decode | 0 | 2 | Valid | 169.8 | 85.1 | 43 ms | 11.8 ms | 2.0 | 0 | 5,096 | 30.0 s |
| Sustained decode | 0 | 4 | Valid | 330.0 | 82.8 | 66 ms | 12.1 ms | 4.0 | 0 | 9,899 | 30.0 s |
| Sustained decode | 0 | 8 | Valid | 618.4 | 77.7 | 101 ms | 12.9 ms | 8.0 | 0 | 18,553 | 30.0 s |
| Sustained decode | 0 | 16 | Valid | 1,121.9 | 70.7 | 179 ms | 14.1 ms | 16.0 | 0 | 33,648 | 30.0 s |
| Sustained decode | 0 | 32 | Valid | 1,834.8 | 58.0 | 220 ms | 17.3 ms | 32.0 | 0 | 55,047 | 30.0 s |
| Sustained decode | 0 | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 0 | 128 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 16K | 1 | Valid | 82.0 | 82.0 | 87 ms | 12.2 ms | 1.0 | 0 | 2,459 | 30.0 s |
| Sustained decode | 16K | 2 | Valid | 155.4 | 77.8 | 122 ms | 12.9 ms | 2.0 | 0 | 4,662 | 30.0 s |
| Sustained decode | 16K | 4 | Valid | 297.2 | 74.3 | 185 ms | 13.5 ms | 4.0 | 0 | 8,912 | 30.0 s |
| Sustained decode | 16K | 8 | Valid | 528.7 | 65.9 | 314 ms | 15.2 ms | 8.0 | 0 | 15,856 | 30.0 s |
| Sustained decode | 16K | 16 | Valid | 848.8 | 52.6 | 615 ms | 19.0 ms | 16.0 | 0 | 25,465 | 30.0 s |
| Sustained decode | 16K | 32 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 16K | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 16K | 128 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 32K | 1 | Valid | 78.2 | 78.3 | 115 ms | 12.8 ms | 1.0 | 0 | 2,345 | 30.0 s |
| Sustained decode | 32K | 2 | Valid | 143.2 | 71.7 | 143 ms | 14.0 ms | 2.0 | 0 | 4,296 | 30.0 s |
| Sustained decode | 32K | 4 | Valid | 269.8 | 67.5 | 240 ms | 14.8 ms | 4.0 | 0 | 8,092 | 30.0 s |
| Sustained decode | 32K | 8 | Valid | 454.5 | 56.7 | 335 ms | 17.6 ms | 8.0 | 0 | 13,632 | 30.0 s |
| Sustained decode | 32K | 16 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 32K | 32 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 32K | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 32K | 128 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 64K | 1 | Valid | 71.6 | 71.6 | 209 ms | 14.0 ms | 1.0 | 0 | 2,147 | 30.0 s |
| Sustained decode | 64K | 2 | Valid | 123.8 | 62.0 | 252 ms | 16.1 ms | 2.0 | 0 | 3,712 | 30.0 s |
| Sustained decode | 64K | 4 | Valid | 226.6 | 56.7 | 386 ms | 17.6 ms | 4.0 | 0 | 6,796 | 30.0 s |
| Sustained decode | 64K | 8 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 64K | 16 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 64K | 32 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 64K | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 64K | 128 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 128K | 1 | Valid | 61.2 | 61.3 | 449 ms | 16.3 ms | 1.0 | 0 | 1,836 | 30.0 s |
| Sustained decode | 128K | 2 | Valid | 97.2 | 48.6 | 591 ms | 20.6 ms | 2.0 | 0 | 2,916 | 30.0 s |
| Sustained decode | 128K | 4 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 128K | 8 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 128K | 16 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 128K | 32 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 128K | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 128K | 128 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 248K | 1 | Valid | 48.0 | 48.2 | 904 ms | 20.7 ms | 1.0 | 0 | 1,440 | 30.0 s |
| Sustained decode | 248K | 2 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 248K | 4 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 248K | 8 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 248K | 16 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 248K | 32 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 248K | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 248K | 128 | Over capacity | — | — | — | — | — | — | — | — |
Over capacity: not run because this many requests at this context would exceed the server's KV cache.
