measured 2026-09-09 → 2026-09-12 · llama.cpp commit 22397c3 · kernel 7.1.13 + GTT 124 GiB · BIOS 03.06 · UMA 512M

Benchmarks

Qwen3.8-27B UD-Q4_K_M — Vulkan vs HIP (llama-bench, 3 runs each)

TestVulkan (RADV)HIP (ROCm)Winner
pp512 — prefill359.4 ± 1.4 t/s347.5 ± 2.8 t/sVulkan +3.4%
pp1024/2048 — prefill347.1 ± 0.8 (pp2048)346.8 ± 0.3 (pp1024)tie
tg128 — decode12.31 ± 0.00 t/s11.97 ± 0.01 t/sVulkan +2.8%
tg256 — decode12.27 ± 0.00 t/s11.98 ± 0.01 t/sVulkan +2.4%

Lane decision: Vulkan for serving (wins both prefill and decode). HIP build retained for A/B re-runs.

Reproduce: /srv/llm/bench/run-qwen-bench.sh · raw logs: /srv/llm/logs/qwen27b-bench-*.log on the machine.

Serving decode with MTP speculative decoding (the real-world number)

ConfigDecode speedNotes
Bare dense decode (llama-bench)12.3 t/sbandwidth-bound floor
Serving: Vulkan + draft-MTP + KV q4_019.25 t/s256-token completion, wall-clock measured · +57% over bare decode

--spec-type draft-mtp uses the GGUF's embedded nextn draft head (n=1 — this model has exactly one MTP layer; higher draft counts silently clamp, verified on ashborn-prime 2026-08-15).

Sanity math (why 12 t/s bare is correct, not a defect)

16.34 GiB model × 12.3 t/s ≈ 201 GB/s effective bandwidth — a healthy fraction of the LPDDR5X-8000 theoretical ~256 GB/s. The "26–32 t/s" figures in community reports for this model class were MoE-active-expert math or MTP-accelerated serving, not bare dense decode; treat them as UNVERIFIED for this box.

Functional verification (all pass)

CapabilityTestResult
Chat"Reply with exactly: ARISE"exact match
Tool useget_weather("Tokyo") via OpenAI tools APIcorrect call + args
Embeddings/v1/embeddings via Qwen3-Embedding-0.6B1024-dim vector
Rerankbge-reranker-v2-m3, relevant doc ranks first−0.75 vs −11.0
Visionmmproj-F16 wired into server cmddescribes chart images accurately
Llama-3.3-70B tool useget_weather("Tokyo") via OpenAI tools APIcorrect call + args
Llama-3.3-70B visionrepo ships no mmproj — text-only modelN/A (architecture)
DeepSeek-V4-Flash tool useget_weather("Tokyo") via OpenAI tools API — re-verified 2026-09-09 16:58correct call + args
DeepSeek-V4-Flash visionrepo ships no mmproj — text-only modelN/A (architecture)
GLM-5.3-Flash tool usesame test, PR-27752 buildFIXED 2026-09-10 — 2-line template guard (string-subscript crash in template threw during llama.cpp's parser derivation); now emits structured tool_calls. See changelog.
GLM-5.3-Flash visionrepo ships no mmproj — text-only modelN/A (architecture)

GLM-5.3-Flash unlock story (2026-09-09)

Stock master cannot load the GGUF (failed to load model). Resolution: PR-27752 was proven to be the matching implementation by parsing the GGUF's KV header directly — architecture glm5next plus indexer.block_size and hyper_connection.* keys appear in exactly that PR's converter (ruling out #27754's kda_* keys and #27773's glm5-next arch name). Build shipped as a 36 MB PR tarball over the tailnet (the box's own GitHub route crawls at 60 KB/s), built with Vulkan, and the 85.8 GB model loads and benches. Build tree: /srv/llm/src/llama.cpp-glm.

FP4 unlock story (2026-09-09)

The ROCmFP4 GGUF uses the qwen4exp packed tensor format — unparseable by stock llama.cpp master. Resolution: a separate build tree at /srv/llm/src/llama.cpp-fp4 from the exact upstream commit the patches target (d3ca537, fetched as a tarball — GitHub won't serve a raw SHA as a git ref), both patches applied cleanly, Vulkan build. An independent cross-check exists via the author's ready-made fork kingjones30/ROCmFPX at llama.cpp-fp4b. Full writeup: research/fp4-unlock-attempt.md.

Serving warnings from the model card (verified source): ngram-based spec decode collapses to 0 acceptance on Vulkan — do not use; ROCm at ≥64K context can wedge the GPU (QSA desync) — workaround flags -ctxcp 0 -cpent -1.

Flash-Next serving notes (2026-09-09)

Model comparison — all loadable models benched 2026-09-09 (Vulkan lane)

ModelParamsSizepp512tg256 (decode)Verdict
Qwen3.8-Flash-Next UD-IQ1_S (MoE, 1.5625 bpw)176.9 B67.6 GB417.5 ± 0.731.0 ± 1.6 t/sbest capability-per-t/s · tools ✓ vision ✓ (verified)
Qwen3.8-27B UD-Q4_K_M (dense, +MTP serving)27.3 B16.3 GB359.412.3 bare / 19.3 served t/sdaily driver — tools ✓ vision ✓ (verified)
Llama-3.3-70B Q4_K_M (dense baseline)70.6 B39.6 GB109.15.2 t/sbaseline proof only
Qwen3.8-Flash-Next ROCmFP4 (MoE, 4-bit packed, PLE streams from NVMe)176.9 B113.5 GB169.5 / 211.728.59 ± 0.02 t/sunlocked — pinned-branch build; best-quality Flash-Next quant · tools ✓ (verified) · vision N/A (no mmproj in repo)
GLM-5.3-Flash IQ2_XS (312B MoE, 17B active, 2.31 bpw)313.3 B85.8 GB128.5 ± 0.314.12 ± 0.03 t/sunlocked — PR-27752 build (KV-header-verified match)
DeepSeek-V4-Flash IQ3_XXS-q6kattn (MoE, 37B active)284.3 B96.1 GB161.6 ± 1.121.0 ± 0.03 t/s1M context — verified loadable, full pool

The MoE thesis, now proven on this box: the 176B-param MoE decodes at 31 t/s — 2.5× faster than the 27B dense and 6× faster than the 70B dense, while being the largest model of the three. Bytes-moved-per-token is the law of this hardware, and MoE architectures move fewer bytes.

Flash-Next variance note: tg128 showed 21.8 ± 14.9 and pp2048 342 ± 100 on cold runs — warm-up / PLE-table streaming effects; the tg256 figure (31.0 ± 1.6) is the stable steady-state. Raw logs: /srv/llm/logs/flashnext-iq1s-bench-fix.log, llama70b-bench-*.log, glm53-bench-*.log.

Gateway overhead measurement (2026-09-11)

Measured through vs direct to llama-swap, 5 request pairs, post groups-fix: gateway mean 929 ms vs direct 1408 ms — overhead ≈ 0 (the gateway was faster, its memory-cache hits included). Embed search component: 21 ms resident (was 2.4 s under the pre-fix eviction ping-pong — a ~120× win). Streaming: byte-for-byte SSE passthrough verified. This is why clients point at the gateway :8081, not raw :8080.

Media-gen timings (2026-09-11–12)

Video + image + audio generation benched separately — full tables live on the Media Gen page. Headlines: LTX-2.3 dev Q8_0 headline at 1920×1088/33f in ~31 min; Wan 2.2 A14B + Lightning LoRA (4 steps) sampling 287.6 s — the daily-driver video pick; SDXL photoreal images ~55 s each; 121-frame clips = hard upstream memory wall.

Full logs: research/gfx1151-sdcpp-ltx-debug.md, research/wan-lightning-ab.md, research/uncensored-battery.md.