frank-secondary: record the deployed f16-K boot ledger, correct the k_eq_v billing law

Verbosity 4 paid for itself: the engine's own llama_kv_cache lines give the
exact accounting — the cache bills the K+V pair TWICE under attention_k_eq_v
(6.125 B/elem at f16 K + q8_0 V), reproducing 3,001.25 MiB (5 full layers at
n_head_kv 2) + 306.25 MiB (25 SWA rings at n_head_kv 8, window 1024) to the
byte. The earlier "bill K-only" note was wrong; full layers have 2 KV heads,
not 8.

Deployed boot: 21,868 used / 2,257 free — the f16-K raise (+2,161 MiB KV) is
funded by the ubatch 2048 -> 1024 cut (~616 MiB of compute buffer) plus
variance, so exact K came essentially free. Measured decode 139.9 t/s temp 0;
vision probe returns Red at prompt_tokens 151.
This commit is contained in:
Frank committed 2026-10-07 13:58:30 -07:00
1 parent 68a525740d
commit b51e078e36
3 files changed
+72 -47

No files matched your search

+18 -14
View File
@@ -27,7 +27,7 @@ merge absorbed the former `vllmScripts` repo, history preserved).
|--------|---------|---------|-------|------|
| Dankserver | `frank-primary` | **radiance** (StillDeadcode v1.0.7 line; image `stilldeadcode/radiance@sha256:4c3f484564…` digest-pinned INDEX digest, 287 MiB, `libr4d` gfx1201 kernels, plain `podman run`, root systemd unit) | `Qwen/Qwen3.8-Flash-Next-FP8` official (172.8 GB, 131 shards, sha256-verified) converted **no-recipe** to `qwen4exp-fp8-native.rad` (177,109 MiB measured = 173.0 GiB) — **native modelopt block-FP8, no requantisation** — on **BOTH R9700s TP=2** (`--tp-wire wht6`), experts in a **40 GiB/rank pinned host pool** + VRAM cache (`--placement expert_tiered`, `--expert-vs-cache-ratio 0.82` = the 99 %-hit point), **PLE 47.7 GiB pinned to host RAM** (`--ngram-placement ram`; root unit + `LimitMEMLOCK=infinity`), **fp8 KV 7.32 KiB/token**, **MTP spec decode depth 3**, *…
| Dankclaw | `frank-large` | **halogen-flash-server 0.16.2** (`ghcr.io/peonist-ai/halogen-flash-server@sha256:0c61bf84…`, digest-pinned, plain `podman run` via `scripts/serve-frank-large.sh`, root systemd unit) | Quat3rnion/halogen-swift1.5-qwen3.8-flash-next-v2-abliterated **`qwen38-flash-next-v2-swift15-abliterated.hgn`** (66,687,678,464 B = compacted r2 of the card's 89,775,868,032 B original, ~62 GiB resident; the v2 `.hgn` format loads in NO other engine), **+ REQUIRED `qwen38-flash-next-ngram.hgn`** (51,200,246,144 B, peonist @5cc17cea — read beside the checkpoint) **+ vision tower** (897,916,416 B, @e053f488 — **vision ON**, `image_url` parts only, ≥256 px probes), **MTP spec decode ALWAYS-ON (`HALOGEN_SPEC_ADAPT=0` — the adaptive default disables the head per request and HALVES decode)**, MTP head INSIDE the checkpoint (`HALOGEN_MTP_HEAD` unset; no sidecar fetched), **2 slots × 200,192 ctx** (KV pool 400,384 positions ≈ 10.7 GiB at ~28 KiB/position; the 27B slots>1-disables-drafting law does NOT carry over — batching and speculation coexist, the card's quickstart ships 2 with the head), **server-side sampler 1.0/0.95/20** (card recipe; models.yml extraBody matches), coupled cap/timeout 65536/7200, prompt cache ON by default (warm 100k turn ≈ 2 s vs ≈ 88 s cold) | 7770 |
| Dankclaw | `frank-secondary` | llama.cpp master (0.5.0-dev, commit `5fc4f3c`), CUDA sm_86 build (root systemd unit, relinked) | HauhauCS/Gemma4-26B-A4B-QAT-Uncensored **Q4_K_M** (25.2 B-param MoE, ~4 B active, 16,780,192,888 B reported by the engine; 30 layers = 25 sliding-window + 5 full-attention) + the publisher's own **BF16 mmproj** for **vision**, on the RTX 3090, **ONE 200,704-token slot** (`--parallel 1`; two 200,704 slots do not fit 24 GiB), **f16 K + q8_0 V** under flash attention (the file declares `attention_k_eq_v` and this build honours it — the pool bills K-only), batch 4096 / **ubatch 1024**, `--log-verbosity 4`, **MTP OFF** (the assistant is a SEPARATE file and its draft KV is built against the target's full window — 23,806 / 319 MiB free with it loaded, no margin beside the f16-K raise). Measured q8_0-K boot: **21,890 used / 2,235 free**. Cutover 2026-10-07 from Swift-1.5 RCO-IQ3_XXS 2×114,688. All three endpoints route harness **compaction** here. | 7771 |
| Dankclaw | `frank-secondary` | llama.cpp master (0.5.0-dev, commit `5fc4f3c`), CUDA sm_86 build (root systemd unit, relinked) | HauhauCS/Gemma4-26B-A4B-QAT-Uncensored **Q4_K_M** (25.2 B-param MoE, ~4 B active, 16,780,192,888 B reported by the engine; 30 layers = 25 sliding-window (`n_head_kv` 8, window 1024) + 5 full-attention (indices 5/11/17/23/29, `n_head_kv` 2)) + the publisher's own **BF16 mmproj** for **vision**, on the RTX 3090, **ONE 200,704-token slot** (`--parallel 1`; two 200,704 slots do not fit 24 GiB), **f16 K + q8_0 V** under flash attention, batch 4096 / **ubatch 1024**, `--log-verbosity 4`, **MTP OFF** (the assistant is a SEPARATE file and its draft KV is built against the target's full window — 23,806 / 319 MiB free with it loaded). Measured boots: **q8_0 K/ubatch 2048 = 21,890 used / 2,235 free; f16 K/ubatch 1024 = 21,868 / 2,257** (the +2,161 MiB of f16-K KV is paid by the ubatch cut). `attention_k_eq_v` is a compute-graph mapping only — the cache bills the K+V pair **twice** (6.125 B/elem at f16 K + q8_0 V; verified exactly against the engine's own `llama_kv_cache` lines). Cutover 2026-10-07 from Swift-1.5 RCO-IQ3_XXS 2×114,688. All three endpoints route harness **compaction** here. | 7771 |
Retired endpoints (`frank-npu`, and every prior runtime) are in
the [runbook index](#runbook-index). The full swap history lives in
@@ -428,14 +428,16 @@ from the Swift-1.5 RCO-IQ3_XXS 2×114,688 shape. The MTP assistant
(`mtp-gemma-4-26B-A4B-it.gguf`, 251,937,728 B) is on disk, **not loaded**.
**Architecture: gemma4 MoE hybrid** — 30 layers, 128 experts (8 active),
n_embd 2816, native 262,144 window. Attention is hybrid: **25
sliding-window layers (window 1024, a fixed ring each) + 5 full-attention
layers (5, 11, 17, 23, 29)**, 8 KV heads × 256 dim — so the KV pool scales
with the 5 full layers ONLY: ~10.6 KiB/token at q8_0, ~20.5 KiB/token at
f16. `attention_k_eq_v: True` — `gemma4.cpp` maps the absent `wv` to
`Vcur = Kcur`, and this build's KV cache honours it (no V slots allocated:
the q8_0 pool measured ~2.05 GiB at 200,704, the K-only figure). **Bill
K-only.**
n_embd 2816, native 262,144 window. Attention is hybrid per the file's
`sliding_window_pattern`: **25 sliding-window layers (window 1024,
`n_head_kv = 8`) + 5 full-attention layers (indices 5, 11, 17, 23, 29,
`n_head_kv = 2`)**, head_dim 256. Two KV caches: the full-context cache
scales with the 5 layers, the SWA cache is a fixed 1024-token ring per
sliding layer. `attention_k_eq_v: True` is a **compute-graph** mapping
(`gemma4.cpp` maps the absent `wv` to `Vcur = Kcur`) — the cache reserves K
and V and, with `k_eq_v`, reserves the pair TWICE: 6.125 B/elem at f16 K +
q8_0 V, 2.125 B/elem at q8_0/q8_0. The engine's own `llama_kv_cache` buffer
sizes reproduce that rate exactly, so bill the pair, never K alone.
**The shape (2026-10-07):** `--ctx-size 200704 --parallel 1` = ONE
conversation (Frank's 200k cap; the harness `contextWindow` quotes
@@ -450,14 +452,16 @@ against the target's FULL window — measured cost **~1.9 GiB** (23,806 used
/ 319 free with the assistant loaded, vs 21,890 / 2,235 without). The
assistant also warns `n_ctx_seq (200704) > n_ctx_train (131072)` — the
draft runs 53 % past its trained window. The q8_0-K boot leaves 2,235 MiB,
which the f16-K raise (+2.05 GiB) spends; MTP and exact-K cannot coexist on
this card.
which the f16-K raise (+2,161 MiB of KV) spends together with the ubatch
cut; MTP and exact-K cannot coexist on this card.
**Measured boots** (nvidia-smi, the referee): q8_0 K + q8_0 V, ubatch 2048,
MTP off: **21,890 used / 2,235 free**; same shape with the MTP assistant:
**23,806 / 319**. The f16-K + ubatch-1024 boot: see the runbook's ledger
(projected ~23 GiB). Decode is expected ubatch-invariant (Swift-era 3090
law; unmeasured on Gemma4).
**23,806 / 319**; **f16 K + q8_0 V, ubatch 1024, MTP off (deployed):
21,868 / 2,257**. The verbosity-4 ledger for the deployed boot: weights
16,002.91 MiB CUDA0 + 577.50 MiB CPU-mapped, KV 3,001.25 (5 full layers) +
306.25 (25 SWA rings) MiB, compute buffers 926.39 + 150.63 MiB. Decode is
expected ubatch-invariant (Swift-era 3090 law; unmeasured on Gemma4).
**Vision**: the publisher's own BF16 mmproj via `--mmproj`. Probe traps
carry over from the Swift era: ≥256 px probe images or the model answers