Skip to content

Night report: the loop closed, the fleet landed, the base is the wall

What ran while the owner slept, in the order it happened, with the numbers a reader can check against ~/logs/.

1. The quality loop closed at 7/10 (three rounds, the owner accepted it)

Section titled “1. The quality loop closed at 7/10 (three rounds, the owner accepted it)”
round score what moved it
the code audit 6/10 an init the seed did not control; an SFT corpus that shared its answers with the RL/bench verifier
round 1 7/10 two gates that could not fail; the new counter reason crashed opt_graph
round 2 6/10 a sympy RCE in the math verifier and a jail bypass; two regressions the previous wave introduced
round 3 7/10 the reward path died on a 23-byte answer; the LFB scope stopped at the pretrain trainer; a mixture resume rewound

Every finding is in docs/reviews/2026-10-19-findings-ledger.md with its status, and the fixes carry revert-checked gates. The three reports are in docs/reviews/2026-10-19-review-round-1.md, -round-2.md and -round-3.md, the protocol and the final verdict in docs/reviews/2026-10-19-review-loop.md.

The fix list from the last round, all landed: (2**1000)**1000 is refused before the power is computed (worst allowed expression 0.31 ms, was 5.45 s); a verifier bug fails the sample, not the batch; the SFT corpus holds no solution the verifier can score; the no---eval tail is sized in reads (20 windows, not 19); the LFB sidecar is LOUD only on a training resume and lfb_counts restarts with the load; a mixture resume replays its prefix by step index; and the SFT/RL checkpoint lines carry the nvfp4 tally.

2. Multi-GPU and heterogeneous hardware landed (multigpu, merged)

Section titled “2. Multi-GPU and heterogeneous hardware landed (multigpu, merged)”

A device-capability layer (per-device dtype/kernel policy: bf16 → fp16 → fp32, Triton-MoE needs bf16, FLA needs fp16/bf16), DDP verified on two CPU ranks (|Δloss| vs one process 5.5e-3 at a 1e-2 tolerance, parameters 3e-8 apart), FSDP2 for the AdamW arm and a LOUD refusal for Muon (measured cause: _foreach_add_ mixing Tensor and DTensor), a per-rank capacity profile with token-weighted loss scaling (1.1e-5 against the hand-computed mean), and a --fit <GB> knob that names the mechanisms it engages: small and medium fit a 4 GB card with none, b1 needs moe_offload + engram_ram on 16 GB (8.03 GiB).

Three fleet traps are LOUD refusals with the measurement behind them: host Engram tables (never reduced), capacity-padded MoE (logits differ by 0.357 at capacity=1.0, by 1.2e-6 at dropless) and the forward-mutating LFB controller.

What needs the second card is named in docs/architecture/multi-gpu.md, including the one command that checks a 1650 when it arrives.

3. The base model: honest verdict on the chat

Section titled “3. The base model: honest verdict on the chat”

sft12 (SFT on the 80k-step mix1, 4000 steps, corpus without verifier-scored pairs) finished at CE 1.437 / BPB 2.073 on the 32 768 B holdout, first= 29-36%. Its chat transcript (~/logs/chat_sft12_transcript.txt) is word salad.

The cause is not SFT: the base produces the same salad. dormouse decode on mix1 at temp 0.05 gives “The capital of France is a family and the fact that the fact that…” — the syntax of a model that predicts bytes well (eval 1.901 BPB over 196 608 B) and has seen 0.85% of the 230 GB mixture. Both decode arms (chunked and recurrent) agree, so the decoder is not the difference.

That is the size/data wall, stated plainly: 88M stored / ~20M active at 1.9 GB seen does not speak.

mix1 resumed to 170 000 steps (from 80 000): +2.2 GB of the four-source mixture, the stage plan moving with the budget (S2 at 119k, S3 decay at 153k), all the measured optimizations on (Triton NS, optimizer CUDA-graph, bf16 Muon state, dropless Triton MoE, Engram in host RAM, tf32).

~/logs/mix1_long2.{log,jsonl}, ~40.7k tok/s, ETA ~15 h. The .lfb break-glass is the checkpoint’s missing sidecar (moe_lb_coef=0, COUNTED on the load line).

When it finishes: bench on the new checkpoint, then sft13 (bilingual corpus: rudialog for RU, dolly + agentic for EN, the hand-written .qa files for tone; short answers on purpose), then serve and a transcript.