Files
esh-pfi-infrastructure/docs/pfi/jev-candidates-bench-2026-10-04.md
T
vh 867f33d672 docs(pfi): amend 10-04 bench doc per brokkr review
- Fit gap restated on nvidia-smi accounting (~17 MiB rest / ~130 MiB peak
  over, vs the live seat's 15,220/15,437 headroom); the 1.2 GiB figure
  conflated the torch pool fraction with nvidia-smi totals
- Footnote: baseline peak row is suite-only, not shape-matched to the
  candidate gate peaks
- namedef cell labeled as the description-reversal stand-in, not the
  loaded-name variant of arXiv 2609.26758; columns are overlaps
2026-10-04 23:12:41 -07:00

135 lines
8.3 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.
# 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 budget as shipped** and is **2.2× slower on
the 21-criteria shape** (184 ms vs 85 ms). On like-for-like nvidia-smi accounting the
miss is small: ~17 MiB over at rest, ~130 MiB at peak, against the live seat's own
15,220-of-15,437 MiB headroom (the earlier "~1.2 GiB" line conflated the torch pool
fraction — which excludes the CUDA context — with nvidia-smi totals that include it;
brokkr correction 2026-10-05). Both the pool fraction and `--max-num-seqs` are
tunable, so a leaner build closes the fit; but at parity on accuracy, 2.2× slower
crit21, ~24.8k effective context through the seam, and a floored yes/no distribution,
it stays a lateral move. If the cap is ever revisited, re-derive the gap from the
nvidia-smi totals above, not from the 1.2 GiB figure.
- **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 |
† Intern's 9,752 MiB is the capped-suite figure only — this bench's battery never
pushed the baseline through the 32k long-input gate (it is already the live seat and
was gate-proven at that shape on 09-30). H2O/Clef peaks include the 32k gate calls, so
the peak column is not shape-matched for the baseline row. For like-for-like reference:
the live seat's own 32k peak on GPU 1 is 15,220 MiB of a 15,437 MiB budget (n=3,
persistent-memory intern-decision entry).
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)
**Variant caveat (brokkr, 2026-10-05):** this cell reverses *descriptions* under the
same option names, which with odd option counts leaves the middle option's pair
unmoved — an option can count as both name-followed and def-followed, so the two
columns can sum above 1. It is a reasonable stand-in, **not** the loaded-name variant
of arXiv 2609.26758; read the columns as overlaps, not a partition.
| 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 — true for the description-reversal manipulation run; the loaded-name
variant is untested here.
## 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.