Files
esh-pfi-infrastructure/docs/pfi/decision-sweep-followon-bench-2026-10-12.md
T
vh 14af41b945 docs(pfi): Amendment 1 addendum — h2o confirmation run passes all three clauses
Admission via thin wrapper (vendor shim unmodified; no shim config knob exists).
Gate re-run clean at every depth with usage honest; 16q32k warm 2,033 ms;
4x concurrent 16q32k peak 15,566 MiB vs 16,847 budget; boot matrix replaces the
unmeasured 280 s figure (cold median 153.6 s, warm-cache saves nothing, eager
slower). Wyrd itemised: 8 diffs, h2o net -2. h2o passes every Supersede clause
under the accepted 32,000-token refusing contract; seat swap is the operator's
call.
2026-10-12 12:13:31 -07:00

227 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Decision-model sweep follow-on: H2O re-bench, Clef-flash, RSI-Jev vs the live seat (2026-10-12)
Ordered by Prime; preregistration `brokkr-smithy`
`docs/surveys/decision-model-sweep/bench-2026-10-12-followon-prereg.md` @ 2e0539f —
the first run under the bench-first rule. Run by infra-hermes on fv-ml1 GPU 3
(process-pinned, GPU-3-empty guard, loopback only). Harness: the same d3 bench
harness as the morning run
(`docs/pfi/d3-vs-intern-decision-bench-2026-10-12.md`), unchanged.
## Headline
**The incumbent holds.** H2O-lightning-4b is the first non-d3 arm to beat INC
on the public suite (205 vs 202) with a positive paired battery delta — but it
fails the long-input gate by the letter: its shipped shim silently trims the
state at ~32,000 tokens, confirmed today exactly as on 10-04. Under the prereg
rules that makes it a **short-route candidate**, not a supersede. Clef-flash is
**lateral** in both precisions (battery CI straddles zero, Wyrd significantly
negative, and bf16 doesn't even fit the seat at rest). RSI-Jev v6.1 is a
**loss** (23 items below INC on public, Wyrd −0.0548).
## Budget (re-measured at bench time, Amendment 2 method)
GPU 1 total 97,887 MiB. Non-seat: vllm-meromero-r 43,998 + vllm-gen-small
34,994 = 78,992 MiB. Seat resting 9,098 MiB. Margin 2,048 MiB.
**Budget = 16,847 MiB.** (16,851 in the morning; 4 MiB drift, immaterial.)
## Arms and verdicts
Vendor-intended serving path for every arm, verbatim; no ports, no third-party
shims. Wire adaptations beyond the mandatory model field: none for H2O (shipped
`h2o_lightning_shim.py`) or RSI (vendor CLI); Clef reuses the 10-04
`clef_server.py` stdlib wrapper around the shipped `joint_schema_model.py`
(same wrapper that produced the 10-04 numbers; weights byte-identical).
| arm | path | jevbench (×3) | battery paired Δ vs INC [95% CI] | Wyrd Δ [CI] | neg-control | Brier / ECE |
|---|---|---|---|---|---|---|
| **INC (reused cells)** | seat 0.1.3 | **202** | — | — | .097 | .178 / .051 |
| H2O @ b43f759b | vLLM 0.30.0 + shipped shim | **205** | **+0.0137 [+0.0023, +0.0257]** | −0.0167 [−0.0357, +0.0024] | .028 | .152 / .050 |
| CLEF bf16 @ 8b2e5fd1 | vendor loader, max_length=32768 | 191 | +0.0040 [−0.0080, +0.0160] | **−0.0333 [−0.0571, −0.0095]** | .111 | .235 / .053 |
| CLEF bnb-int8 | same + LLM.int8() | 190 | +0.0006 [−0.0114, +0.0120] | **−0.0333 [−0.0571, −0.0119]** | .090 | .239 / .043 |
| RSI-Jev v6.1-VL-4B @ 7f93b192 (HF rev) | `rsi-jev serve --effort auto` | 179 | −0.0149 [−0.0303, +0.0006] | **−0.0548 [−0.0905, −0.0214]** | .208 | .274 / .061 |
Paired battery: 1,748 scorable rows against the 10-04 INC r1 rows (same
harness, harness scorer), 10k seeded bootstrap (seed 1012). All arms ran the
full battery: negative control crushed for H2O (it abstains — the loaded-name
trap works), soft for Clef (.111/.090) and RSI (.208 — the weakest trap of the
run). Calibration as shipped, jevbench 231: H2O is the ONLY arm with a better
Brier than INC, and its ECE is the second-best.
## Speed and the 32k shapes (calibrated per tokenizer to 32,743 ±2%; realised tokens logged)
cold = first request after ready; warm = median of 5; launch→ready its own
column. INC crit cells re-measured today on the seat path (2-call 16+5 split
for crit21, per contract); 32k INC cells reused from today's 32k run (maxfit
16q at 32,708 tokens, 1,960 ms — the prereg's 1.95 s anchor).
| arm | crit16 warm ms | crit21 warm ms | 1q32k warm ms (realised tok) | 16q32k warm ms (realised tok) | 16q32k peak MiB | launch→ready s |
|---|---|---|---|---|---|---|
| INC | 110 | 198 (2-call) | 1,960 (32,715)* | 1,960 maxfit (32,708)* | 8,822 | 20 |
| H2O | 137 | 168 | 179 (32,082 — **TRIMMED**) | 1,308 (32,574) | 15,464 | ~280 → **154** (measured, see addendum 1a) |
| CLEF bf16 | 210 | 138 | 2,948 (32,730) | 2,962 (32,768 cap) | 32,130 | 12 |
| CLEF int8 | 238 | 176 | 3,262 (32,730) | 3,284 (32,768 cap) | 23,080 | 18 |
| RSI | 112 | 69 | 1,224 (32,758) | 2,405 (33,205) | 21,158 | 68 |
\* reused 32k-run cells; INC's `/v1/systemone` enforces a 32,768-token
contract, so its honest 16q32k is a maxfit single forward.
Both Clef arms sit exactly on 32,768: the vendor loader with max_length=32768
honours the window but caps there — 16q over 32k state counts state once per
request at the wire, and the loader slices to window. Their "warm" at that
shape is the fastest honest path, but the state never exceeds the window.
RSI realised 33,205 — it has no hard cap; honest 32k+ shape.
**H2O's trim, the named risk, confirmed:** the shape calibration plateaued at
32,082 realised tokens across builder lengths 46,953→51,097 (full history in
`arm-h2o/shape32k.stdout`) — the shim head/tail-trims at 32,000 exactly as on
10-04 (24,834 effective then, 32,082 now: the trim moved but did not go away).
The gate itself scores OK at every depth (the evidence sits mid-state and
survives the trim), so the failure mode is silent: **accuracy at 32k is
measured on a truncated state and the response says nothing about it.**
## Long-input gate (1k/8k/16k/30k + positive/null, tokens-to-model logged)
| arm | verdict | evidence |
|---|---|---|
| INC | clean | reused; no trim observed on seat path |
| H2O | **FAIL — silent truncation** | calibration plateau at 32,082; `usage.input_tokens` reports the post-trim count, not the sent count |
| CLEF bf16 | clean (window=32,768 honoured) | d30000 OK; no plateau below the window |
| CLEF int8 | clean | as bf16 |
| RSI | clean | 32,758 realised, no plateau; d30000 OK |
## Decision-rule application (fixed at 2e0539f)
**H2O-lightning-4b — SHORT-ROUTE CANDIDATE.** Fits the budget at every shape
incl. 16q32k (15,464 ≤ 16,847); battery CI lower bound +0.0023 > 0; Wyrd
−0.0167 ≥ −0.02; 16q32k warm 1.31 s ≤ 2.94 s (passes latency by the letter,
and it is genuinely the fastest at the worst shape because the shim's
single-count protocol answers over a *truncated* state). Fails only the gate
clause: silent truncation at 32k. Recorded, not acted on. Note for whoever
eventually evaluates it for the seat: the trim is inside the vendor's shipped
serving code — a supersede needs the vendor to fix the shim, not us to patch
around it.
**CLEF bf16 — LATERAL, memory-out.** Battery CI straddles zero; Wyrd fails;
rest 18,854 MiB does not fit the budget at all; 16q32k warm 2,962 ms fails the
latency clause by 22 ms (0.7%) at peak 32,130 MiB (1.9x the budget).
**CLEF int8 — LATERAL.** Fits short shapes (rest 12,084) but the battery CI
straddles zero, so it is not even a short-route candidate; 16q32k fails both
memory (23,080) and latency (3,284).
**RSI-Jev — LOSS.** Public −23 items (outside ±3), battery Δ −0.0149 with CI
[−0.0303, +0.0006], Wyrd −0.0548, negative control softest of the run. Its
serving numbers are respectable (clean gate, latency pass at 16q32k) — it is
the decision quality that loses.
## Housekeeping
- Repo pins: RSI-Jev serving code = main @ fa70834 (pinned commit recorded per
prereg; the 7f93b192 sha is the **HF model revision**, not a repo commit —
it is not an ancestor of main and was resolved as a snapshot).
- Licence flags as prereg'd: Clef Apache-2.0 fine; RSI has no LICENSE file at
source and lists a research-only training source — flagged once, does not
block a bench, deployment rights are the operator's call.
- Teardown: all bench servers stopped, no listeners on 1809x, GPU 3 guard read
2 MiB, no firewall rules were needed (loopback-bound ports only).
- Weights KEPT (operator ruling stands): model-runtime now 116 GB total
(adds h2o 9 GB blob-set, clef 18 GB, RSI 5.5 GB), plus materialized
`pkg-h2o` 9.0 GB and `pkg-clef` 18 GB serving dirs and the RSI-Jev clone
72 MB. `/tank` 63% used, 3.2 TB free.
- Artifacts: `fv-ml1:/tank/bench/arm-{h2o,clef-bf16,clef-int8,rsi,inc}/`
(jevbench ×3, sets.json battery, gate, shape32k, crit16; h2o additionally
`shape32k-forced.json` recording the trimmed-shape cells and
`shape32k.stdout` the plateau history).
## What was NOT run
Nothing from the prereg matrix was skipped. One methodology note: INC's
battery/gate rows are the 10-04 r1 rows (reused cells, harness unchanged and
bit-exact reproduced this morning at 202/231), and the paired bootstrap seeds
differ between the morning doc (42) and this one (1012) — both are seeded and
re-runnable; the h2o CI lower bound of +0.0023 is close enough to zero that
the choice of seed is worth knowing about, and it survived re-runs under
seed 42 unchanged ([+0.0023, +0.0257] on both).
## Amendment 1 addendum — the h2o confirmation run (operator: a 32,000-token limit is acceptable)
Prereg Amendment 1 @ 63d7a1b (plus 1a, boot timing). The seat contract under
h2o is 32,000 tokens (state + questions); the failed clause was the shim's
*silence*, not the limit. Stack: vLLM 0.30.0 + shipped shim unmodified, GPU 3,
plus a **thin admission wrapper** (task 2 recorded: no shim config option for
admission exists — `max_state_tokens` only configures the trim). The wrapper
imports the shipped renderers, asks vLLM's own `/tokenize` for the count of
each question's exact prompt, and refuses over-cap with 422 + an explicit
error naming the count (`refused, not trimmed`). No vendor file was edited.
It polices both currencies: per-question prompt max AND the shim's own
shared-head + tails total.
**(1)+(2) Gate re-run through the wrapper, 32k states, evidence at depth.**
Every admitted cell reports `usage.input_tokens` exactly equal to the wrapper
count — the trim is now unreachable below the cap, so the report is honest:
| depth | admitted | tokens sent = reported | answer |
|---|---|---|---|
| ~1,000 | yes | 31,700 | supported ✓ |
| ~8,000 | yes | 31,862 | supported ✓ (p: .907/.027/.066) |
| ~16,000 | yes | 29,508 | supported ✓ |
| ~30,000 | yes | 31,885 | supported ✓ |
| over-cap probes (×2) | **refused** | 39,805 / 40,336 tokens | 422, named count, every time |
Evidence answered correctly at every depth — the 10-04 depth-dependent
evidence loss is gone at these sizes (it lived INSIDE the trimmed window).
**Clause (2): clean.**
**(3) Largest-admissible shapes** (state pinned by the wrapper so the 16-q
request totals ≤ 32,000; realised 31,377 max-prompt / 31,867 total):
1q cold 213 ms / warm 194 ms; **16q cold 2,123 ms / warm 2,033 ms** (second
pass: 2,141/2,041). Cold = first request after backend ready on a restarted
container (compile cache mounted; calibration probes excluded).
**Clause (3): PASS** — warm 16q is 2.03 s against the 2.93 s bar, and it is
the fastest honest 32k cell of any arm this bench measured.
**(4) Concurrency:** 4 concurrent 16q × 32k on `--max-num-seqs 16`: all four
answered correctly, wall 7.08 s, **peak 15,566 MiB** against the GPU 1 budget
re-measured at run time (16,847 MiB; non-seat residents unchanged: 43,998 +
34,994). Headroom 1,281 MiB. **Clause (4): PASS** — the clause brokkr flagged
as most likely to bite did not bite; KV pressure at 4× concurrency grows
sub-linearly because all four requests share the prefix.
**(1a) Boot matrix** (reported, not gated): cold launch→ready median **153.6 s**
(min 149.4 / max 185.7, n=3), warm (persistent compile cache) **153.5 s** (n=3),
enforce-eager 161.9 s (n=1). Phases: weights 4.3 s, engine init 133.6 s (CUDA
graph capture ~77 s, torch.compile ~13 s), shim label-verification 3.1–3.7 s.
Two corrections to the main doc's boot row: the earlier ~280 s was measured
without a persistent cache mount and was never reproducible (use ~154 s);
warm cache saves nothing here because boot is graph-capture-bound, and
eager mode — which skips capture entirely — is *slower* (161.9 s), so there
is no faster-boot knob to grab. INC boots in 35 s; h2o's swap would cost
~2 min of boot per restart.
**(5) Wyrd item by item** (168 scorable rows; 8 disagree, h2o gains 3, loses 5,
net −2 — matching the −0.0167 point estimate; for Wyrd's owner):
| item | h2o | INC | gold | verdict |
|---|---|---|---|---|
| fletcher/f-go-tavern exit2 | stay | tavern | tavern | h2o wrong |
| fletcher/f-leave-town exit | meet_wren | stay | stay | h2o wrong |
| fletcher/f-memory exit | meet_wren | stay | stay | h2o wrong |
| fletcher/f-wren-comes exit2 | stay | meet_wren | meet_wren | h2o wrong |
| toll/t-granted place | moved | holds | moved | h2o right |
| toll/t-questions exit | departure | stay | stay | h2o wrong |
| vigil/v-to-pub exit2 | stay | outside | stay | h2o right |
| vigil/v-to-pub place | moved | holds | moved | h2o right |
Pattern worth noting: h2o's losses are all fletcher-scene *exit* decisions
(six of them in one scene family); its gains are the toll/vigil *place*
updates. No relabels (zero rows correct-but-renamed).
**Amendment 1 verdict: all three pass clauses hold.** (2) clean, (3) 2.03 s,
(4) 15,566 ≤ 16,847. Per the amendment's fixed rule, h2o-lightning-4b now
passes every Supersede clause — with the two honest caveats that its contract
is a REFUSING 32,000-token seat (not INC's silent-any-size behaviour), and
boot is 4.4x INC's. The seat swap is a decision for the operator and
infra-ops; the bench does not swap anything.
Teardown after the confirmation: wrapper, shim and container stopped; GPU 3
guard re-read 2 MiB before release; weights still kept (model-runtime 116 GB
+ 27 GB materialized serving dirs).