docs(pfi): Jev candidate bench 2026-10-04 — H2O-lightning-4b and Clef-flash vs Intern baseline

Vendor-path benches on fv-ml1 GPU 3 at the 14.4 GiB / 32k cap. Neither
candidate replaces Intern-Decision-4B: H2O reproduces its vendor figure
(205x3) and has the best calibration, but rests 1 GiB over the cap and
is 2.2x slower at the 21-criteria shape; Clef loses on accuracy (191-192),
hard tier (72-73/111), and ships a silent 16,384-token input slice.
Adds the namedef cell and JB_AUTH wiring to the 09-30 harness client.
This commit is contained in:
vh
2026-10-04 23:10:36 -07:00
parent f76429c457
commit 523f086939
2 changed files with 141 additions and 2 deletions
+114
View File
@@ -0,0 +1,114 @@
# Jev candidates bench — 2026-10-04 (fv-ml1 GPU 3, cap 14.4 GiB @ 32,768 ctx)
Two candidates against the live baseline, per brokkr's brief: `h2oai/h2o-lightning-4b`
(rev 542e9eff, Apache-2.0) and `Cloudflare/clef-flash` (rev 17f0b0ad, Apache-2.0, bf16
and bnb-int8). Baseline: Intern-Decision-4B native, re-measured fresh. Style follows
`jev-candidates-bench-2026-09-30.md` (rest/peak MiB from a 0.2 s poller, CUDA context
outside the vLLM pool; medians of 3 run-medians).
## Decision
**Neither candidate replaces Intern-Decision-4B at the fleet shape.**
- **H2O-lightning-4b** is the strongest candidate we have measured: vendor figure
reproduced exactly (205/231 ×3), best calibration (Brier 0.153 vs 0.178), best
negative-control discipline (follows the moved definition 0.931, clings to the gold
name only 0.028). But it **cannot fit the 14.4 GiB budget as shipped** (rest 15,454
MiB before any request, peak 15,566 at the 32k gate), and it is **2.2× slower on the
21-criteria shape** (184 ms vs 85 ms). If the cap is ever raised ~1.2 GiB or a leaner
engine build trims the Mamba cache, it becomes a real upgrade; at the cap, it is out.
- **Clef-flash** is a net loss on every axis that matters here: −11 JevBench pts (191
bf16 / 192 int8), hard tier 72–73/111 vs baseline 83, slower at short shapes
(bf16 164 vs 85 ms; int8 297 ms), and its 32k context is not real as shipped — the
release path **silently slices every input to exactly 16,384 tokens** (input_tokens
pinned at 16384 on every cell) unless you deviate from the shipped `max_length`.
int8 additionally needs a 126-tensor dtype alignment (bnb leaves layernorm/head
fp32, vendor head forwards bf16) that is not in the vendor path, and it peaks
20.7 GiB on a single 32k request (activations; `use_cache=False`), 43% past the cap.
## Headline (jevbench public /231; battery = our sets, labelled-evidence rows)
| system | jevbench | hard /111 | Brier | battery pooled /398 (Δ vs intern, 95% CI) | rest / peak MiB | crit21 ms | long16 ms |
|---|---|---|---|---|---|---|---|
| **Intern-Decision-4B native** (re-measure) | **202 ×3**, bit-exact vs 09-30 (0 rows flipped over 4+3 repeats) | 83 | 0.178 | 362 (0.9095) baseline | **9,752 / 9,752** — fits | **85** | **214** |
| H2O native (vendor vLLM 0.30.0 + shipped shim) | **205 ×3** (exact vendor fig.) | 86 | 0.153 | 367 (0.9221; **+0.0126**, CI −0.015..+0.044) | 15,454 / 15,566 — **over cap at rest** | 184 | 240 |
| H2O floor-off calibration | 205 — *identical to floored* | — | 0.154 | — | — | — | — |
| Clef bf16 (vendor loader, uncapped ref) | 191 | 72 | 0.235 | 366 (0.9196; +0.010, CI −0.021..+0.042) | 19,696 rest | 164 (flat; `use_cache=False`) | 390 |
| Clef int8 (bnb, dtype-aligned) | 192 | 73 | 0.235 | 365 (0.9171; +0.0075, CI −0.023..+0.038) | **12,064 rest / 13,216 suite peak** — fits; **20,718 gate peak** | 297 | 446 |
Row-level: 33/398 battery rows flip intern→H2O, 29/398 intern→clef-bf16, 30/398
intern→clef-int8; every battery delta straddles zero on a paired group bootstrap
(group = set), i.e. at 4B class our battery cannot separate them. The separations are
all in jevbench/hard, VRAM, and latency.
## Battery by set (labelled-evidence acc, single)
| set | intern | h2o | clef-bf16 | clef-int8 |
|---|---|---|---|---|
| authored144 | 0.917 | 0.958 | 0.924 | 0.910 |
| perturbations108 | 0.926 | 0.917 | 0.954 | 0.963 |
| cicada-w1 | 0.935 | 0.968 | 0.968 | 0.968 |
| cicada-w2 | 0.710 | 0.806 | 0.806 | 0.806 |
| wyrd | 0.940 | 0.893 | 0.893 | 0.893 |
Same 09-30 pattern: candidate gains sit on the NLI-family public sets and partly
reverse on Wyrd. Rotations/repeat/reversed/shuffled/multifield: all four systems 0
failed rows; H2O 0.937 rotations / 0.893 multifield; intern 0.897 / 0.917; clef-bf16
0.920 / 0.821; clef-int8 0.917 / 0.833.
## Name-vs-definition cell (new; 144 rows, descriptions reversed)
| system | name-follow | def-follow |
|---|---|---|
| intern | 0.375 | 0.847 |
| h2o | 0.306 | **0.958** |
| clef-bf16 | 0.375 | 0.840 |
| clef-int8 | 0.368 | 0.854 |
Negative control (gold label moved to another option's definition): same-top 0.097 /
0.028 / 0.111 / 0.090 respectively — no system is cue-clinging except mildly at
baseline level; H2O is the cleanest. All four are definition-followers, not
name-followers.
## Gates (fit / long-input, per amendment)
- **H2O fit gate (vendor path, `--max-num-seqs 16` required — Mamba blocks=181 <
default seqs):** pool accounting PASS at util 0.1506 (rest 14,356 / peak 15,540
shim-measured), served a 32,082-token request at 1,987 ms. nvidia-smi total is
15.4–15.6 GiB once the ~1.1 GiB CUDA context is counted — that is the overage.
- **H2O long-input gate (clean rerun):** PASS. Every depth cell ok, null control
correct (supported=0). Max input_tokens reached: **24,834** — the head+tail seam
truncates ~7k tokens off the nominal 32k state; head+tail keeps the tail (recent
events), which is the wrong end for our trace-replay workload. Latency at depth:
min/med/max 369/962/1,448 ms.
- **Clef shipped-default gate (max_length=16384):** PASS with pinning — every cell
input_tokens **exactly 16384**, i.e. silent server-side slice, no error.
- **Clef raised gate (max_length=32768), bf16 and int8:** PASS clean. input_tokens
tracks request size (22.9k–24.9k), no cliff at any depth cell, null control correct.
Max state tokens reached: **24,898**. Latency min/med/max 829/1,959/23,828 ms
(bf16), 934/2,220/24,211 ms (int8) — the ~24 s max is the first cell after load
(cold cache), median is the honest number. int8 32k call **peaks 20,718 MiB**.
- Latency at 32k-class inputs is where Clef's `use_cache=False` single-forward design
shows: flat per-call cost, ~2 s for a full 24k-token forward.
## Scoring ruling (below-floor) — empirically closed
Floor-off calibration cell: **205/231, identical to the floored runs**, identical
per-row. Below-floor outputs flow through as ordinary scored answers. **MISS is the
correct default for below-floor; no abstain handling needed in the harness.**
## Provenance / gotchas worth keeping
- Both snapshots sha256-verified against lfs.sha256 (6/6, 16/16 after materialisation).
- `hf download` without `HF_HOME` silently writes `~/.cache` — the /tank snapshot then
looks like 11K of configs (symlinks missing) while blobs are present. `cp -rL`
materialises for bind mounts.
- vLLM on H2O needs `--max-num-seqs 16` (Mamba cache blocks=181).
- Clef int8 dtype alignment: cast 126 non-bnb float tensors fp32→bf16 at load. Under
the vendor's own API, but not shipped — treat as integration friction, not a
fallback.
- First H2O long-input gate ran inside a container-collision window; archived as
`gate-h2o-collision-window`, numbers above are from the clean rerun.
- Artifacts: `fv-ml1:/tank/bench-jev-2026-10-04/out/` (vram.csv, sets.json,
shape.json, jevbench/, gate.json per dir), harness `code/` alongside;
jevbench v1.2.16 @ 5e95f23cbb7.