You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: papers/VERIFIED-SCOREBOARD.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -55,7 +55,7 @@ Method: a read-only fleet checked each claim against (a) a commit that resolves
55
55
|**recall∘L5 composition** (the two recall authorities, both armed) |**FREE composition REFUTED → one-authority guard ENFORCED, LIVE-GREEN 6/6**| harness (wave 5) |`G-PK2-RECALL-L5-COMPOSE-FREE.log` (the honest negative, 4/6) + **`G-PK2-RECALL-L5-COMPOSE.log` (enforced, 6/6 live)**| VERIFIED — Phase A (both armed): L5's systemecho CROSS-PICKED color-adjacent queries from the counterfact corpus and overrode the harness note ("favorite color?" → "Human blood is green"; "sky?" → "Green") — L5 selection cross-picks are a known daemon residual; composition surfaces them user-visibly. Phase B: the gateway auto-disarms spine recall whenever the request arms L5 (`auto_recall=true`), with an `{"authority":"L5"}` receipt event; guard held, L5 authority intact ("Lyon"), harness authority faithful when L5 off ("Teal."). Plus `auto_recall` body passthrough (default false). The one-authority rule is now STRUCTURAL, not operator discipline |
56
56
| **ADR-009 batched prefill under the SWA ring** (`SP_KV_PREFILL_BATCH`, the ring-off precondition lifted) | **LIVE-GREEN 3/3 — bounded ~7× win + graceful fallback; default-off** | engine (wave 6) | `tests/perf/G-PK2-BATCHRING.log` (3/3) | VERIFIED — `PPT-LAT-ADR-009-PREFILL-SPEED.md`. The batched cold prefill was BLOCKED under the ring (so the ring config never used it); wave 6 lifts it (ring-layout `k_ring_sink` for SWA owners + retained contiguous shared-owner K/V for sharers). Live @ PMAX=4096: **n≈837 → 6.7s coherent (~7× vs ~39s per-token)**; n≈1765 → VRAM guard DECLINES → graceful per-token fallback 99s coherent (null floor, live-proven). Two guards: VRAM (`SP_KV_BATCH_VRAM_MARGIN_MB`) + persist (declines under `SP_PERSIST_KV`, since a batched-ring cache isn't a valid persist-continuation base). Verdict across 3 waves: **batching is a bounded cold-prefill win, not the general lever** — the f32 activation scratch caps it; cublasGemmEx-int8 would hit the same ceiling (not pursued). Default-off; production per-token path unaffected |
57
57
| **ADR-010 whole-machine balance** (measured VRAM breakdown + KV auto-fit; the CPU-offload verdict) | **ANALYSIS (measured) + auto-fit realized default-off** | engine (wave 7) | `tests/perf/G-PK2-AUTOFIT.log` | VERIFIED (measurement) — `PPT-LAT-ADR-010-WHOLE-MACHINE-BALANCE.md`. Measured live: **model ~10.9 GB resident FILLS the 12 GB card; KV cache only ~0.78 GB (shared-KV — NOT the 2.5 GB I first assumed); ~0.57 GB free.** ★HONEST CORRECTION: the original ">1000-tok stall" root was co-resident LM Studio (~6.4 GB oversubscription), and the ADR-009 batch thrash was the transient scratch eating the thin headroom — the KV was never the movable mass, THE MODEL IS. Every weight-offload refuted by PCIe x8 (6.2 GB/s forbids per-token weight streaming); the ONE lever that frees real VRAM = **CPU-resident layer offload** (weights in 40 GB/s DRAM, compute on AVX2, exchange only activations; CRT keeps CPU+GPU legs bit-identical) — the ADR-011 candidate. `SP_G4_KV_AUTOFIT` (default-off) clamps Pmax to free VRAM for the co-tenant case; dedicated card serves coherent ("Paris" 12.4s), null floor intact |
58
-
| **ADR-011 CPU-resident layer offload** (FFN-tail hybrid — REALIZED live) | **STAGE-2 REALIZED — coherent + ~0.96 GB freed @ K=8; speed pending perf-lib** | math-core+engine (wave 8) | `tests/perf/G-ADR11-MEASURE.log` + **`G-ADR11-HYBRID.log`** | VERIFIED — `PPT-LAT-ADR-011-CPU-LAYER-OFFLOAD.md`. MEASURE (dry): 48 layers, 7.86 GB matmul weights, ~167.8 MB/layer. HYBRID (live): `gemma4_ffn_block_cpu` (math-core, reuses `sp_matmul` on OK_Q4B) + `g4_kv_step` routes the last `SP_G4_CPU_TAIL` FFNs to the CPU + `build_weights` skips those FFN uploads. **`SP_G4_CPU_TAIL=8` → VRAM 11201→10221 MiB (freed ~0.96 GB) + coherent "Paris"** on the served 12B. ★DESIGN PIVOT: shared-KV couples tail attention to early GPU KV owners, so offload the **FFN only** (~90% of layer weight, STATELESS) — clean sever, one E-float crossing. HONEST perf caveat: daemon links non-AVX2 `build-cpu` libs → CPU FFN scalar+slow (tiny prompt 46.7 s; 299-tok prefill minutes) — the VRAM lever + coherence are PROVEN, the **speed follow-on = link `build-cpu-perf` (AVX2/OpenMP)**. Default-off = null floor; the one real VRAM lever, realized |
58
+
| **ADR-011 CPU-resident layer offload** (FFN-tail hybrid — REALIZED + perf-gated) | **STAGE-2 REALIZED + PERF-GATED — coherent, frees VRAM, usable at ~6 tok/s (K=4); steep sync-bound slope** | math-core+engine (waves 8–9) | `tests/perf/G-ADR11-{MEASURE,HYBRID,HYBRID-PERF}.log` | VERIFIED — `PPT-LAT-ADR-011-CPU-LAYER-OFFLOAD.md`. `gemma4_ffn_block_cpu` (math-core, `sp_matmul` on OK_Q4B) + `g4_kv_step` routes last `SP_G4_CPU_TAIL` FFNs to CPU + `build_weights` skips those uploads. ★DESIGN PIVOT: shared-KV → offload the **FFN only** (~90% of layer weight, stateless). PERF re-gate on the AVX2/OpenMP daemon (`build-cpu-perf`+libomp, target-wirecuda-perf), PMAX=4096: **K=0 23.84 tok/s → K=4 5.99 tok/s (freed ~0.46 GB) → K=8 3.25 tok/s (freed ~0.96 GB), coherent all K.** Perf libs made it usable (K=8 0.5→3.25 tok/s ~6.5×). HONEST slope: ~33 ms/offloaded-FFN/token = the per-FFN GPU↔CPU round-trip (D2H+2×sync+H2D, ~2K syncs/token) — **sync-bound, not compute-bound**, far steeper than the ~8.4× memory-bound ideal. VRAM-for-latency lever; usable where VRAM is the hard constraint. Default-off = 23.84 tok/s null floor. Flatten-the-curve (next) = cross-token decode pipeline |
0 commit comments