Issues / #3101

#3101 Community benchmark: RTX 5060 Ti + RTX 3090, IQ2_XS, 262K

open · @pluberd · 1 comments · View on GitHub

BenchmarksSetup & installServer & APIAMD / HIPNVIDIA / CUDAModels & quantsLinux

Description

# Community benchmark on NVIDIA GeForce RTX 5060 Ti + NVIDIA GeForce RTX 3090

Measured on 2026-10-18 with `tools/strata_bench.py` (suite 1, 3 runs per test, medians with ranges). Speeds are the engine's own timings; first-token times are measured by the client over HTTP. Speed only: no correctness
check was run.

## Hardware and software

- GPU and VRAM: NVIDIA GeForce RTX 5060 Ti + NVIDIA GeForce RTX 3090, 40 GiB VRAM
- CPU: AMD Ryzen 7 9700X 8-Core Processor (8 cores, 16 threads); installed RAM: 91.6 GiB; storage: not measured
- OS: Linux 7.0.0-34-generic; GPU driver: 595.91.07; CUDA: 13.2
- Strata: project 0.1.45, commit 1b7f1fe0; engine 0.1.45 
- Background workloads: Ubuntu desktop running, monitors attached to the RTX 5060 Ti; only very light background work
  during the run (the client application that normally uses the server was paused) 
- Power limits: RTX 5060 Ti 150 W (default 180 W), RTX 3090 250 W (default 350 W), set by the owner, all runs
- PCIe: RTX 5060 Ti in the first slot at PCIe 4.0 x8 (14.4 GB/s measured); RTX 3090 in the second slot at PCIe 4.0 **x4**
  (CPU root port, 6.7 GB/s measured). The board cannot run the cards the other way round. Layer split
  auto: CUDA0 layers 0-16, CUDA1 layers 17-47
- RAM: the model (about 72 GB, 2 GGUF files) fits in RAM; about 27-34 GB of RAM were available while the server ran 
- Build: CUDA 13.2.2 (13.2.0/13.2.1 nvcc produce wrong results on sm_120, #892/#968). The engine is 0.1.45 plus one local
  change that only touches the Qwen3.6 path (`src/qwen35`), not Flash-Next

## Model and configuration

- Model and quantization: qwen3.8-flash-next-iq2_xs
- Context: 262144 tokens; parallel slots: 1
- Settings: setup's configuration, changed by hand: 262K context, `--kv-resident 32768`, `--prompt-cache-root 256`, conversation cache 4 GiB / 4 slots; thinking off for the suite; temperature 0

```text
strata --pack iq2_xs --native Qwen3.8-Flash-Next-GSQ-RCO-IQ2_XS-00001-of-00002.gguf --ple-gguf Qwen3.8-Flash-Next-GSQ-RCO-IQ2_XS-00002-of-00002.gguf --expert-profile expert-profile.bin --expert-cache auto --prefill auto
--spec 4 --spec-min-p 0.5 --mtp rt --max-context 262144 --kv int8 --prompt-cache-root 256 --conversation-cache-mib 4096 --conversation-cache-slots 4 --kv-resident 32768
```

## Method

Run by `python tools/strata_bench.py --long` against the HTTP API of a Strata server (already running); model loading is not timed. One warm-up chat and a 1K prompt are discarded first. Every prompt starts with a unique tag,
so the conversation cache cannot help the fresh-prompt tests. 

- short chat: the three questions of `tools/ab_engine.py`, up to 100 new tokens, 3 runs
- 4K / 16K prompts: generated word lists sized by a calibration request, 24 new tokens, 3 fresh prompts each
- agent session: system prompt and four tools, then 5 turns that each add about 1500 words of a project file and continue from the model's own earlier answers (the way agent clients resend a conversation), 64 new tokens per
turn, 3 sessions; the cache numbers come from the answer's usage (`cached_tokens`) and timings (`prompt_n`)
- concurrency (when run): N requests sent at the same moment, total tokens over the wall time of the burst, latency over all requests

## Results

| Configuration | Actual prompt tokens | Reused tokens | Generated tokens | Runs | Prompt tok/s median and range | Decode tok/s median and range | TTFT seconds median and range |
| --- | ---: | ---: | ---: | ---: | --- | --- | --- |
| short chat | 46 (43-51) | 0 | 100 (100-100) | 9 | not measured | 117.6 (109.0-162.5) | 0.29 (0.28-0.32) |
| 4K prompt, fresh | 4019 (4019-4019) | 0 (0-0) | 24 cap | 3 | 1468.8 (1457.8-1477.2) | not measured | 2.75 (2.74-2.77) |
| 16K prompt, fresh | 16058 (16058-16058) | 0 (0-0) | 24 cap | 3 | 2140.6 (2138.7-2155.6) | not measured | 7.52 (7.47-7.53) |
| 32K prompt, fresh | 32049 (32049-32049) | 0 (0-0) | 24 cap | 3 | 2515.6 (2500.8-2519.2) | not measured | 12.77 (12.75-12.84) |
| agent session, follow-up turns | 14557 (14513-14579) at the last turn | see below | up to 64 | 3 | see below | 107.5 (65.7-138.6) | 2.44 (1.70-2.72) |

Ranges are the lowest and highest of the runs; `Runs` counts requests that returned a token.

### Agent session (conversation cache)

Cache hit over the follow-up turns: 68.7 % (68.6-68.8); earlier-turn tokens read again per session: 4 (3-73) (earlier turns that the cache did not hold; the 13718 (13717-13718) new tokens of the files are read once); first
turn (nothing cached) first token: 1.44 s (1.38-1.53).

| Turn (run 1) | Prompt tokens | Reused | Read | Prompt tok/s | First token (s) | Decode tok/s |
| ---: | ---: | ---: | ---: | ---: | ---: | ---: |
| 0 | 609 | 0 | 609 | 447.1 | 1.378 | 94.9 |
| 1 | 3751 | 631 | 3120 | 1227.3 | 2.561 | 78.7 |
| 2 | 5284 | 3814 | 1470 | 832.9 | 1.794 | 107.5 |
| 3 | 8717 | 5348 | 3369 | 1259.2 | 2.702 | 97.4 |
| 4 | 11627 | 8765 | 2862 | 1171.0 | 2.466 | 138.0 |
| 5 | 14579 | 11680 | 2899 | 1195.5 | 2.443 | 85.4 |

Per-request data: `results.json`. Engine log lines from the start: `engine-log-excerpt.txt` (when this run started the server).

## Correctness and limitations

Not measured: this is a speed suite. The conversation uses the model's own replies, so token counts differ a little between runs. Machine details come from the server, `nvidia-smi`/`rocm-smi` and the OS; background load and
power limits were added by hand. Total time of the suite: 131 s.

Related on this site

Quick links to related pages.