---
version: 0.21.2
date: 2026-06-18
headline: "Visuals for the GPU benchmark data — two data-bound SVG charts of the Qwen2.5-3B Q8 run on the 4070."
themes:
  - gpu
  - bench
---

**TL;DR** — The shipped Qwen2.5-3B Q8 GPU bench data (v0.21.1) now has charts: two
dependency-free SVGs that render inline on GitHub and are **regenerated from the committed
JSON** by `make_charts.py`, so a figure can never drift from the data it claims to show.

## GPU bench visuals (#gpu #bench)

- **What shipped** — `fak/experiments/gpu/figures/decode-vs-llama.svg` and `…/prefill-decode.svg`,
  plus `make_charts.py` (pure stdlib) and `comparison.json` (cross-engine numbers), embedded in
  `fak/experiments/gpu/README.md`.
  - *Why:* the data landed in v0.21.1 as JSON; a chart makes the f16-parity / Q8-launch-tax story
    legible at a glance, matching the `experiments/session` visual convention.
  - *How:* `python make_charts.py` reads `qwen2.5-3b-q8-cuda-4070.json` + `comparison.json` and
    emits hand-written SVG — no matplotlib, no drift from the source numbers.

- **decode-vs-llama** — fak-CUDA vs `llama.cpp` decode tok/s on the same 4070: at f16, fak is at
  **parity (1.07×, fak ahead)** on Qwen2.5-1.5B; at Q8 the gap is the WSL per-launch tax, not the
  kernel (`GPU-QWEN-RESULTS.md` §4).
- **prefill-decode** — fak 3B Q8 prefill@16/64/256 and decode are all ~25 tok/s: device prefill
  loops single tokens (not batched yet), so it runs at decode speed.

Data/docs only — no Go code, ABI, or behavior changed.
