Issues / #3282

#3282 Community benchmark: 2x RTX 2080 Ti (sm_75), IQ3_S + IQ3_XXS at 256K, plus a measured A/B for STRATA_SM75_PERF

open · @yusheng227507 · 2 comments · View on GitHub

needs-format

Description

## Summary

Two community benchmark runs on **2× RTX 2080 Ti 22 GB (sm_75)** with `Strata v0.2.0-beta` (commit `e88ee39d`, engine `0.1.45.3`), plus a same-machine A/B measurement of `STRATA_SM75_PERF=1` on the previous release (`v0.1.45`, engine `0.1.45`).

The A/B is the part that may be useful to you: `sm75_series.hpp` says the Turing kernels are opt-in because *"We have no sm_75 card to confirm them"*. This machine is an sm_75 card, and the measured gain is consistent: **+5.3 % (IQ3_S) and +6.2 % (IQ3_XXS) on 16K fresh prompts**, with no regression in decode.

## Hardware

- GPU: 2× NVIDIA GeForce RTX 2080 Ti, 22528 MiB each (sm_75), driver 595.99.02, CUDA 13.2 (engine built against `/usr/local/cuda-12.8`)
- CPU: Intel Core i7-10700K (8 cores / 16 threads), 94.1 GiB RAM
- OS: Linux 6.8.0-147-generic
- Both cards are used with `--layer-split` (`layer_split = 26`); the generated README lists the GPU model once, but the run used both cards.

## Results — v0.2.0-beta, `STRATA_SM75_PERF=1`

| Model | Context / slots | short chat decode | 4K prompt | 16K prompt | agent follow-up decode |
| --- | --- | ---: | ---: | ---: | ---: |
| IQ3_S | 262144 / 3 | 70.8 tok/s | 721.2 tok/s | 1264.7 tok/s | 72.6 tok/s |
| IQ3_XXS | 262144 / 3 | 74.3 tok/s | 831.2 tok/s | 1304.4 tok/s | 79.3 tok/s |

Median of 3 runs per test (short chat: 9 requests), temperature 0, thinking off, fresh prompts tagged so the cache cannot help. Full tables, ranges, TTFT and the agent-session cache breakdown are in the two READMEs below.

## A/B: `STRATA_SM75_PERF` on sm_75 (v0.1.45, engine 0.1.45)

Same machine, same configs, same bench, run back to back (series off first, then on). The Turing kernel series was unchanged by 0.2.0, so this still applies.

| Model | Test | `SM75_PERF` off | `SM75_PERF=1` | Δ |
| --- | --- | ---: | ---: | ---: |
| IQ3_S | 16K prompt | 1185.9 tok/s | 1248.8 tok/s | **+5.3 %** |
| IQ3_S | 4K prompt | 707.9 | 708.6 | +0.1 % |
| IQ3_S | short chat decode | 68.4 | 70.3 | +2.8 % |
| IQ3_XXS | 16K prompt | 1224.3 | 1300.0 | **+6.2 %** |
| IQ3_XXS | 4K prompt | 801.5 | 823.8 | +2.8 % |
| IQ3_XXS | short chat decode | 72.1 | 74.9 | +3.9 % |

Notes on the measurement:
- The "on" runs came second, after ~10 minutes of load, so the GPUs were at least as hot; if anything the gain is understated.
- Ranges were tight (e.g. 16K IQ3_S: 1183.7–1186.4 off, 1247.1–1252.0 on), i.e. far outside run-to-run noise.
- The header documents these kernels as bitwise equal to the ones they replace, which matches: no output difference was observed.

For reference, `v0.1.45 → v0.2.0-beta` with the switch on in both cases is flat within noise (16K: 1248.8 → 1264.7 and 1300.0 → 1304.4 tok/s, i.e. +0.3…+1.3 %).

## Settings (both models)

`--kv int8 --kv-resident 32768 --spec 4 --spec-min-p 0.5 --expert-cache auto --prefill auto --vram-reserve-mib 1500 --max-context 262144`, `parallel = 3`, MTP `rt`, vision reader on CPU (`"gpu": false`, 8 threads), `STRATA_SM75_PERF=1`. Nothing else tuned.

## Method note

The bench was run with `--url` against an already-running server because `tools/strata_bench.py --config …` currently fails with `NameError: name 'port' is not defined` ([#2864](https://github.com/Niko1221/Strata/issues/2864)). Model loading is not timed either way.

<details>
<summary>IQ3_S — full generated README</summary>

# Community benchmark on NVIDIA GeForce RTX 2080 Ti

Measured on 2026-10-19 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 2080 Ti, 22 GiB VRAM
- CPU: Intel(R) Core(TM) i7-10700K CPU @ 3.80GHz (8 cores, 16 threads); installed RAM: 94.1 GiB; storage: not measured
- OS: Linux 6.8.0-147-generic; GPU driver: 595.99.02; CUDA: 13.2
- Strata: project 0.1.45.3, commit e88ee39d; engine 0.1.45.3
- Background workloads and power limits: not recorded

## Model and configuration

- Model and quantization: qwen3.8-flash-next-iq3_s-abl
- Context: 262144 tokens; parallel slots: 3
- Settings: the install's own configuration, unchanged; thinking off for the suite; temperature 0

## Method

Run by `python tools/strata_bench.py` 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 | 70.8 (57.1-86.2) | 0.46 (0.40-0.49) |
| 4K prompt, fresh | 4019 (4019-4019) | 0 (0-0) | 24 cap | 3 | 721.2 (719.9-721.3) | not measured | 5.60 (5.60-5.61) |
| 16K prompt, fresh | 16058 (16058-16058) | 0 (0-0) | 24 cap | 3 | 1264.7 (1261.1-1265.0) | not measured | 12.73 (12.73-12.77) |
| agent session, follow-up turns | 14670 (14662-14677) at the last turn | see below | up to 64 | 3 | see below | 72.6 (52.0-89.2) | 5.61 (4.97-5.95) |

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: 69.5 % (69.4-69.5); earlier-turn tokens read again per session: 4 (2-74) (earlier turns that the cache did not hold; the 13813 (13811-13814) new tokens of the files are read once); first turn (nothing cached) first token: 3.51 s (3.47-3.52).

| Turn (run 1) | Prompt tokens | Reused | Read | Prompt tok/s | First token (s) | Decode tok/s |
| ---: | ---: | ---: | ---: | ---: | ---: | ---: |
| 0 | 609 | 0 | 609 | 176.7 | 3.473 | 62.6 |
| 1 | 4119 | 631 | 3488 | 592.8 | 5.916 | 67.2 |
| 2 | 5652 | 4183 | 1469 | 294.9 | 5.009 | 72.6 |
| 3 | 9085 | 5715 | 3370 | 573.5 | 5.907 | 70.0 |
| 4 | 11832 | 9148 | 2684 | 484.5 | 5.573 | 89.2 |
| 5 | 14670 | 11863 | 2807 | 503.0 | 5.61 | 68.8 |

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 are not recorded. Total time of the suite: 188 s.

</details>

<details>
<summary>IQ3_XXS — full generated README</summary>

# Community benchmark on NVIDIA GeForce RTX 2080 Ti

Measured on 2026-10-19 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 2080 Ti, 22 GiB VRAM
- CPU: Intel(R) Core(TM) i7-10700K CPU @ 3.80GHz (8 cores, 16 threads); installed RAM: 94.1 GiB; storage: not measured
- OS: Linux 6.8.0-147-generic; GPU driver: 595.99.02; CUDA: 13.2
- Strata: project 0.1.45.3, commit e88ee39d; engine 0.1.45.3
- Background workloads and power limits: not recorded

## Model and configuration

- Model and quantization: qwen3.8-flash-next-iq3_xxs
- Context: 262144 tokens; parallel slots: 3
- Settings: the install's own configuration, unchanged; thinking off for the suite; temperature 0

## Method

Run by `python tools/strata_bench.py` 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 | 74.3 (63.2-102.8) | 0.42 (0.38-0.46) |
| 4K prompt, fresh | 4019 (4019-4019) | 0 (0-0) | 24 cap | 3 | 831.2 (829.3-832.2) | not measured | 4.86 (4.85-4.87) |
| 16K prompt, fresh | 16058 (16058-16058) | 0 (0-0) | 24 cap | 3 | 1304.4 (1303.6-1305.0) | not measured | 12.34 (12.34-12.35) |
| agent session, follow-up turns | 14691 (14684-14692) at the last turn | see below | up to 64 | 3 | see below | 79.3 (67.7-97.0) | 4.51 (3.69-5.07) |

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: 69.4 % (69.4-69.5); earlier-turn tokens read again per session: 73 (1-74) (earlier turns that the cache did not hold; the 13812 (13812-13812) new tokens of the files are read once); first turn (nothing cached) first token: 2.45 s (2.45-2.46).

| Turn (run 1) | Prompt tokens | Reused | Read | Prompt tok/s | First token (s) | Decode tok/s |
| ---: | ---: | ---: | ---: | ---: | ---: | ---: |
| 0 | 609 | 0 | 609 | 251.2 | 2.45 | 54.4 |
| 1 | 4109 | 624 | 3485 | 691.9 | 5.068 | 68.8 |
| 2 | 5642 | 4172 | 1470 | 400.4 | 3.698 | 72.9 |
| 3 | 9075 | 5635 | 3440 | 689.8 | 5.017 | 72.5 |
| 4 | 11822 | 9139 | 2683 | 602.3 | 4.484 | 97.0 |
| 5 | 14684 | 11877 | 2807 | 624.3 | 4.525 | 81.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 are not recorded. Total time of the suite: 163 s.

</details>

Related on this site

Quick links to related pages.