Speed test matrix
Agents-A1-4B-FP8 on RTX 3060 12GB
vllm · 0.32.0 · FP86 contexts (0–248K) × 8 concurrency levels (1–128) · prefill at 8K, 16K, 32K, 64K, 128K
Hardware
- Type
- Discrete GPU
- GPU
- RTX 3060
- VRAM
- 12 GB
- CPU
- Intel Xeon E5-2680 v4 (14C)
- RAM
- 32 GB
- OS
- Ubuntu 24.04.5
Engine
- Engine
- vllm
- Version
- 0.32.0
- Quantization
- FP8
- 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. KV cache: int4_per_token_head # 1x RTX 3060 12GB, stock 170 W limit, PCIe Gen3 x16 | Intel Xeon E5-2680 v4 14C | 32 GB DDR4-2400 | Ubuntu 24.04.5, NVIDIA driver 580.178.04 vllm serve InternScience/Agents-A1-4B-FP8 --max-model-len 262144 --gpu-memory-utilization 0.94 --max-num-seqs 128 --enable-prefix-caching --trust-remote-code --language-model-only --kv-cache-dtype int4_per_token_head --attention-backend TRITON_ATTN
Prefill
prompt tok/s by context length8K context2,3413,583 ms TTFT
16K context1,9618,341 ms TTFT
32K context1,48921,721 ms TTFT
64K context1,00264,156 ms TTFT
128K context606.0211,378 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 | 49.6164 ms TTFT | 94.5264 ms TTFT | 180.3547 ms TTFT | 330.2896 ms TTFT | 566.41,574 ms TTFT | 890.62,368 ms TTFT | Over capacity | Over capacity |
| 16K | 44.71,416 ms TTFT | 80.12,125 ms TTFT | 136.03,482 ms TTFT | 213.36,198 ms TTFT | 298.211,703 ms TTFT | Over capacity | Over capacity | Over capacity |
| 32K | 40.71,766 ms TTFT | 69.72,618 ms TTFT | 108.94,266 ms TTFT | 157.27,567 ms TTFT | Over capacity | Over capacity | Over capacity | Over capacity |
| 64K | 34.51,698 ms TTFT | 55.12,418 ms TTFT | 77.93,843 ms TTFT | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity |
| 128K | 23.4Requests queued4,124 ms TTFT | 29.5Requests queued6,119 ms TTFT | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity |
| 248K | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity |
Requests queued: the server could not run all requests at once, so some waited in a queue. 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 | 2,341.0 | — | 3,583 ms | — | — | 1 | — | — |
| Prefill | 16K | 1 | Valid | 1,961.0 | — | 8,341 ms | — | — | 1 | — | — |
| Prefill | 32K | 1 | Valid | 1,489.0 | — | 21,721 ms | — | — | 1 | — | — |
| Prefill | 64K | 1 | Valid | 1,002.0 | — | 64,156 ms | — | — | 1 | — | — |
| Prefill | 128K | 1 | Valid | 606.0 | — | 211,378 ms | — | — | 1 | — | — |
| Sustained decode | 0 | 1 | Valid | 49.6 | 49.7 | 164 ms | 20.1 ms | 1.0 | 0 | 1,488 | 30.0 s |
| Sustained decode | 0 | 2 | Valid | 94.5 | 47.3 | 264 ms | 21.2 ms | 2.0 | 0 | 2,834 | 30.0 s |
| Sustained decode | 0 | 4 | Valid | 180.3 | 45.2 | 547 ms | 22.1 ms | 4.0 | 0 | 5,408 | 30.0 s |
| Sustained decode | 0 | 8 | Valid | 330.2 | 41.3 | 896 ms | 24.2 ms | 8.0 | 0 | 9,904 | 30.0 s |
| Sustained decode | 0 | 16 | Valid | 566.4 | 35.3 | 1,574 ms | 28.3 ms | 16.0 | 0 | 16,993 | 30.0 s |
| Sustained decode | 0 | 32 | Valid | 890.6 | 26.9 | 2,368 ms | 37.1 ms | 32.0 | 0 | 26,688 | 30.0 s |
| Sustained decode | 0 | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 0 | 128 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 16K | 1 | Valid | 44.7 | 44.8 | 1,416 ms | 22.3 ms | 1.0 | 0 | 1,340 | 30.0 s |
| Sustained decode | 16K | 2 | Valid | 80.1 | 39.4 | 2,125 ms | 25.4 ms | 2.0 | 0 | 2,402 | 30.0 s |
| Sustained decode | 16K | 4 | Valid | 136.0 | 32.2 | 3,482 ms | 31.1 ms | 4.0 | 0 | 4,080 | 30.0 s |
| Sustained decode | 16K | 8 | Valid | 213.3 | 23.6 | 6,198 ms | 42.3 ms | 8.0 | 0 | 6,392 | 30.0 s |
| Sustained decode | 16K | 16 | Valid | 298.2 | 14.6 | 11,703 ms | 68.4 ms | 16.0 | 0 | 8,944 | 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 | 40.7 | 40.8 | 1,766 ms | 24.5 ms | 1.0 | 0 | 1,220 | 30.0 s |
| Sustained decode | 32K | 2 | Valid | 69.7 | 34.1 | 2,618 ms | 29.3 ms | 2.0 | 0 | 2,090 | 30.0 s |
| Sustained decode | 32K | 4 | Valid | 108.9 | 25.5 | 4,266 ms | 39.2 ms | 4.0 | 0 | 3,268 | 30.0 s |
| Sustained decode | 32K | 8 | Valid | 157.2 | 17.0 | 7,567 ms | 59.0 ms | 8.0 | 0 | 4,712 | 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 | 34.5 | 34.6 | 1,698 ms | 28.9 ms | 1.0 | 0 | 1,035 | 30.0 s |
| Sustained decode | 64K | 2 | Valid | 55.1 | 27.1 | 2,418 ms | 36.9 ms | 2.0 | 0 | 1,652 | 30.0 s |
| Sustained decode | 64K | 4 | Valid | 77.9 | 18.5 | 3,843 ms | 54.1 ms | 4.0 | 0 | 2,336 | 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 | Requests queued | 23.4 | 26.5 | 4,124 ms | 37.7 ms | 0.9 | 0 | 701 | 30.0 s |
| Sustained decode | 128K | 2 | Requests queued | 29.5 | 18.2 | 6,119 ms | 55.2 ms | 1.7 | 0 | 884 | 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 | Over capacity | — | — | — | — | 0.7 | 0 | 0 | 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 | — | — | — | — | — | — | — | — |
Requests queued: the server could not run all requests at once, so some waited in a queue. Over capacity: not run because this many requests at this context would exceed the server's KV cache.
