Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# Community benchmark on NVIDIA GeForce RTX 3070

Measured on 2026-10-28 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 3070, 8 GiB VRAM
- CPU: Intel(R) Core(TM) i9-10900K CPU @ 3.70GHz (10 cores, 20 threads); installed RAM: 61.3 GiB; storage: nvme0n1 PM9A1 NVMe Samsung 1024GB nvme
- OS: Linux 7.0.0-38-generic; GPU driver: 595.99.02; CUDA (driver supports up to): 13.2
- Strata: project ?, commit not a git checkout; engine 0.1.52
- GPU detail (after the run, near idle): power_limit_w=220.00, power_draw_w=172.18, pcie=gen3 x16, pstate=P2, temp_c=69
- Background workloads: not recorded (GPU power limit/draw read above)

## Model and configuration

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

```text
component:strata-engine --pack iq3_s --native Qwen3.8-Flash-Next-GSQ-RCO-IQ3_S-00001-of-00002.gguf --ple-gguf Qwen3.8-Flash-Next-GSQ-RCO-IQ3_S-00002-of-00002.gguf --expert-profile expert-profile.bin --expert-cache auto --prefill auto --spec 4 --max-context 65536 --kv int8 --vram-reserve-mib 1024 --kv-resident 32768
```

## 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 | 46.0 (45.6-47.6) | 0.68 (0.56-0.73) |
| 4K prompt, fresh | 4019 (4019-4019) | 0 (0-0) | 24 cap | 3 | 411.2 (410.9-411.4) | not measured | 9.80 (9.80-9.81) |
| 16K prompt, fresh | 16058 (16058-16058) | 0 (0-0) | 24 cap | 3 | 367.9 (367.5-368.1) | not measured | 43.68 (43.66-43.73) |
| agent session, follow-up turns | 9087 (9085-9094) at the last turn | see below | up to 64 | 3 | see below | 58.5 (41.8-96.4) | 5.19 (5.02-5.24) |

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: 71.1 % (71.1-71.1); earlier-turn tokens read again per session: 5 (5-5) (earlier turns that the cache did not hold; the 8207 (8207-8208) new tokens of the files are read once); first turn (nothing cached) first token: 2.51 s (2.39-2.52).

| Turn (run 1) | Prompt tokens | Reused | Read | Prompt tok/s | First token (s) | Decode tok/s |
| ---: | ---: | ---: | ---: | ---: | ---: | ---: |
| 0 | 609 | 0 | 609 | 258.3 | 2.392 | 42.2 |
| 1 | 2274 | 632 | 1642 | 328.7 | 5.024 | 44.6 |
| 2 | 3980 | 2337 | 1643 | 324.1 | 5.104 | 44.5 |
| 3 | 5686 | 4043 | 1643 | 317.7 | 5.205 | 45.3 |
| 4 | 7392 | 5749 | 1643 | 318.2 | 5.195 | 67.3 |
| 5 | 9094 | 7452 | 1642 | 316.0 | 5.225 | 58.0 |

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 is not recorded. Total time of the suite: 297 s.
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
# Community benchmark on NVIDIA GeForce RTX 3070: Flash-Next IQ3_S

Measured on 2026-10-28 with the unmodified upstream `tools/strata_bench.py`, suite 1, three repetitions. Prepared with AI assistance from real host measurements. Contributed by @stekiclaw.

This is the community quick speed suite described in `docs/COMMUNITY_BENCHMARKS.md`, not the thinking-enabled draft standard benchmark and not a maintainer-approved result. The original generated report is retained as `README.generated.md`, and unmodified per-request measurements are in `results.json`. This report supplements provenance and limitations without changing measurements.

## Hardware and software

- GPU: NVIDIA GeForce RTX 3070, 8 GiB dedicated VRAM; selected GPU 0.
- CPU: Intel Core i9-10900K, 10 cores / 20 threads.
- Installed RAM: 61.3 GiB.
- Model storage: Samsung PM9A1 NVMe, device model PM9A1 NVMe Samsung 1024GB.
- PCIe: Gen 3 x16 observed; queried maximum Gen 3 x16.
- GPU power limit: 220 W.
- OS: Linux kernel 7.0.0-38-generic.
- NVIDIA driver: 595.99.02; driver-reported supported CUDA version: 13.2. This is not evidence of the CUDA toolkit used to compile the engine; that build field was unavailable to this community runner.
- Strata CLI: 0.2.7, build 0.1.52, established separately with the installed CLI's `--version`.
- Runtime COMMIT file: `a42cc3d7df70d1940de82cd0882f03e1f5dfc741`; engine 0.1.52. Existing release installation; no source build or runtime modification was performed for this test.
- The legacy community runner did not recognize the Terminal bundle's project version or COMMIT file, leaving those fields null in the original JSON. The separately recorded COMMIT above does not alter that raw JSON.
- Community guide inspected at upstream revision `5e8a4cca7d690ac60ca37eb09e7d0e010099ad6d`.
- Runner SHA-256: `f6267a67dd27a938af8f756b1bbbf49b232d9168f986889d09b85b5df4859f7d`.
- Background work: existing OS services and an auxiliary resource sampler. A preflight GPU process query showed only the owned Strata engine; no additional GPU workload was observed in that snapshot. This is not proof that all background activity was absent throughout the run.

## Model and configuration

- Served model ID: `qwen3.8-flash-next-iq3_s`; quantization: IQ3_S.
- Exact quantization repository/revision, original model revision and tokenizer revision: not established for this report. Do not infer these from filenames.
- Native file: `Qwen3.8-Flash-Next-GSQ-RCO-IQ3_S-00001-of-00002.gguf`.
- PLE file: `Qwen3.8-Flash-Next-GSQ-RCO-IQ3_S-00002-of-00002.gguf`.
- Prepared pack: `iq3_s`; expert profile: `expert-profile.bin`. Pack source identity/preparation revision is not established here.
- Effective context: 65,536 tokens; one parallel slot.
- KV: int8, resident window 32,768; VRAM reserve 1,024 MiB.
- Expert cache and prefill launch settings: auto. Observed engine information reported 813 expert slots / 1,606 MiB expert cache, 9 pool workers, prefill cap 1,536, PCIe fraction 0.34 and a 1,024 MiB conversation cache with four slots.
- MTP disabled in the serving profile; vision disabled. This does not mean all speculation is disabled: native draft counters are nonzero in some agent requests. No MTP-on/off or speculation-on/off comparison was performed.
- Sampling: temperature 0, thinking disabled (`reasoning_effort=none`, `chat_template_kwargs.enable_thinking=false`). Other sampling values were not explicitly fixed by this legacy runner.
- No persistent serving configuration changes were made for this test. Prior calibration/tuning provenance, low-RAM policy and experimental speed-projection state were not independently established and must not be assumed off.

Sanitized engine launch specification (the component selector is resolved by the installed Strata runtime, not a standalone executable path):

```text
component:strata-engine --pack iq3_s --native Qwen3.8-Flash-Next-GSQ-RCO-IQ3_S-00001-of-00002.gguf --ple-gguf Qwen3.8-Flash-Next-GSQ-RCO-IQ3_S-00002-of-00002.gguf --expert-profile expert-profile.bin --expert-cache auto --prefill auto --spec 4 --max-context 65536 --kv int8 --vram-reserve-mib 1024 --kv-resident 32768
```

Sanitized benchmark invocation; `<runtime>` and `<resident-profile>` refer to the existing installation and saved profile, with private absolute paths omitted:

```text
<runtime>/python/bin/python3.12 -u <runtime>/tools/strata_bench.py --config <resident-profile> --url http://127.0.0.1:8080 --runs 3 --out <output-parent>
```

The complete sanitized configuration and observed engine information are in `results.json` under `machine.config` and `machine.engine_info`. Launch flags and effective engine information are reported separately; they should not be assumed identical merely because they use similar names.

## Method

The upstream suite ran on the inference host against its already-loaded loopback server, without restarting it for this community run. The expert cache was already warm from prior use. This is not a cold-model benchmark, nor a rerun of the draft standard protocol. No model download or engine upgrade occurred.

- Warm-up: one short chat, two one-token token-count calibration requests (200 and 800 words), and one approximately 1K-token prompt. These are excluded from measured request totals.
- Short chat: three upstream questions, each repeated three times, output cap 100 tokens (9 measured requests).
- 4K and 16K: three generated word-list prompts per target, output cap 24 tokens (6 measured requests). Actual inputs were 4,019 and 16,058 tokens respectively; labels describe targets, not exact input counts.
- Agent session: three sessions of six requests each, comprising an initial turn followed by five file-addition turns; four tool schemas are exposed, but the prompt asks for prose rather than tool execution. Each added file contributes about 1,500 words. The model's own answer is appended to subsequent turns; cap 64 tokens per turn (18 measured requests).
- Agent file construction uses project documents if available, otherwise generated filler. The exact per-run request bodies and full generated replies were not persisted by this legacy runner, so byte-identical replay of agent conversations is not claimed.
- Fresh chat and prompt requests have unique tags. All measured short/4K/16K rows reported zero reused tokens. Agent turns intentionally reuse conversation prefixes; expert-cache warming and conversation-prefix reuse are distinct effects.
- Required/default measured requests: 33, all returned tokens with no recorded error; no tests were skipped. Optional `--long` (32K) and `--clients` tests were not selected.
- Prompt and decode throughput use native engine timings, not generated tokens divided by total request time. TTFT is client monotonic time to the first nonempty content/reasoning piece, ignoring empty chunks. Thinking was disabled.
- Total suite time: 296.707 seconds, approximately 4 min 57 s; includes warm-up, calibration and machine probes, excludes model loading. Per-request wall times and engine prompt/decode durations are retained in `results.json`.

## Results

Values are median (minimum–maximum). These are measurements of this one configuration, not an A/B speedup claim.

| Configuration | Actual prompt tokens | Reused tokens | Generated tokens | Samples | Prompt tok/s | Decode tok/s | TTFT seconds |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Short chat | 46 (43–51) | 0 | 100 in every request | 9 | not summarized | 46.0 (45.6–47.6) | 0.676 (0.560–0.726) |
| 4K prompt, fresh | 4,019 | 0 | 24 in every request | 3 | 411.2 (410.9–411.4) | not summarized by upstream report | 9.802 (9.800–9.807) |
| 16K prompt, fresh | 16,058 | 0 | 24 in every request | 3 | 367.9 (367.5–368.1) | not summarized by upstream report | 43.682 (43.661–43.727) |
| Agent follow-up turns | final turn 9,087 (9,085–9,094) | see below | up to 64 per turn | 3 sessions / 15 follow-ups | see raw rows | 58.5 (41.8–96.4) | 5.188 (5.016–5.240) |

### Agent session / conversation cache

- Follow-up token cache hit: 71.102% (71.097–71.107), across three sessions.
- Earlier-turn tokens read again: 5 per session in every session.
- New file tokens read: 8,207 (8,207–8,208) per session.
- Initial-turn TTFT: 2.510 s (2.392–2.516).
- Short, repetitive agent answers and varying accepted drafts can raise decode rates; the 96.4 tok/s maximum is not sustained general-purpose chat throughput.

First session in full; all three sessions are retained in `results.json`:

| Turn | Prompt tokens | Reused | Read | Prompt tok/s | TTFT s | Decode tok/s |
| --- | --- | --- | --- | --- | --- | --- |
| 0 | 609 | 0 | 609 | 258.3 | 2.392 | 42.2 |
| 1 | 2,274 | 632 | 1,642 | 328.7 | 5.024 | 44.6 |
| 2 | 3,980 | 2,337 | 1,643 | 324.1 | 5.104 | 44.5 |
| 3 | 5,686 | 4,043 | 1,643 | 317.7 | 5.205 | 45.3 |
| 4 | 7,392 | 5,749 | 1,643 | 318.2 | 5.195 | 67.3 |
| 5 | 9,094 | 7,452 | 1,642 | 316.0 | 5.225 | 58.0 |

### Resource observations: partial coverage only

The first auxiliary sampler failed to start because of command-string quoting. It was repaired without restarting the benchmark. The replacement recorded 53 samples over approximately 105.3 seconds near the end of the suite; these are not whole-suite resource peaks and do not reconstruct earlier activity.

- Sampling target: 2 seconds; scope: whole host, not Strata process RSS.
- CPU busy average in the sampled interval: 20.5%.
- Minimum available host RAM in that interval: 8.05 GiB.
- Sampled maximum GPU memory: 7,189 MiB; sampled maximum GPU temperature: 70°C.
- No swap-out counter increase in that interval; this does not mean swap was unused or no swap activity occurred earlier.
- The runner's post-run GPU snapshot reported 69°C and 172.18 W. This is an endpoint snapshot, not a peak or a rigorously verified idle reading.

## Correctness and limitations

- This community run is a speed/cache suite, not an accuracy evaluation. It performs no actual tool execution or complete external tool round trip.
- A separate thinking-enabled standard run is outside this contribution; its scores are not used to claim correctness for this thinking-off configuration.
- Short chat requests all produced the 100-token cap; long-prompt requests all produced 24 tokens. Hitting a cap is not proof of a complete answer.
- The legacy runner defines success as no recorded error plus at least one returned token; it does not retain terminal finish reasons or explicitly require `[DONE]`. Therefore “33 successful rows” is its transport/output classification, not independently verified natural-stop completion for all answers.
- No recorded request failures; no skipped default tests. Auxiliary sampler startup failed separately as disclosed above.
- Largest fresh input measured here: 16,058 tokens. A 65,536-token serving window is not a full-window capacity or recall pass.
- Optional 32K prompt, concurrency, long-context needle tests, broad reasoning/coding quality and baseline-versus-tuned comparisons were not run.
- Engine timing lines/startup logs are not attached by the community runner when using an existing server. Native timing fields remain in each measured JSON row. A separately sanitized log excerpt can be added to a publication bundle if available; its absence must not be disguised by fabricated logs.
- Model/source/tokenizer revisions and pack preparation provenance remain unknown; report them as unknown unless independent evidence is found.
- Original JSON and generated README are preserved. Supplemental version information comes from independent CLI/COMMIT probes, not from editing their original null fields.

## Artifacts and reproduction

- `results.json`: byte-identical output of the official community runner, all 33 measured request rows.
- `README.generated.md`: original generated report; its unrecognized version/COMMIT fields are explained above.
- `config.json`: sanitized effective profile copied from the original result.
- `benchmark-console.txt`: actual benchmark console output, private host paths replaced. This is not an engine startup log.
- `resources.partial.jsonl`: 53 whole-host samples from the replacement sampler only.
- `provenance.json`: independently observed version, runner identity and upstream guide revision.
- `SHA256SUMS`: hashes of the publication artifacts.

Use the unmodified upstream `tools/strata_bench.py` from the recorded runtime commit with its sibling imports (`ab_engine.py`, `agent_turns_bench.py`, `serve_load.py`) and an installed compatible Strata runtime/model. The command above reproduces the procedure, not byte-identical model responses. No custom engine code, model weights or packs are included.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
30f5fb26224dbfdd567a4d0ce9ff430ae85f548f837616cfb5389ea9ec37dcd8 README.generated.md
c76ad87c1b060783cc9aecc05b22cdc58b1270eccb06f14a8a17079467102bb7 README.md
c88e3851e3b4774469a8e4370a77e73016c37026a4b71c2b333aee939608ba8d benchmark-console.txt
69b766da82160e649eed8a5f6d635be5e9dbfbae6fb1679ec0cc24041edd6878 config.json
541a5fb637125b4ca5303d85dd2d960b4dcf1eac7f0bae135d58f90b00e199ed provenance.json
2141fd4bf32f3786ccfa3e945a387aae299f0eb463b062aaa4145a69f1c5c393 resources.partial.jsonl
f4ca10da68046567b367048c5d2cb0c99822ca7f9b1b75e52b58ce89e99b022b results.json
Loading
Loading