Map of this document
Mission & environment constraints
The environment is the BottleCapAI NoCap-Test hiring challenge: train GPT-2 124M on FineWeb to the baseline’s final validation loss, faster.
Reach val loss ≤ 3.3821 on the official disjoint val set, in less training wall-clock than the stock recipe on the same GPU class. Clock pauses during validation. One GPU only.
Rules: re-benchmark baseline on your hardware. F1_seal (rpp, torch 2.13) crossed 3.3821 at step 4736 = 232.0 min (3.866 h), final 3.3798, step_avg ~2939 ms. That is the only speedup denominator. Historical F1 was 229.1 min (provisional).
| Axis | Allowed / required by rules | Forbidden / trap |
|---|---|---|
| Data | Any filter/reorder of the given FineWeb tokens | New datasets outside the kit’s FineWeb stream |
| Model / loss | Architecture, loss, schedule changes (with valid prob. model at eval) | Copying Modded-NanoGPT / leaderboard primary ideas |
| Eval | Any seq length that scores the full val set; sliding reported alongside official | Changing val_tokens on real runs (it IS the metric) |
| Hardware | Any GPU; report relative speedup vs self-baseline | Treating absolute hours as comparable to the 4090 board |
| Clock (rules) | Training wall-clock only; harness pauses timer during validation; one GPU | Scoring validation time, multi-GPU, or absolute 4090 hours as our claim |
| Fairness (rules) | Any generic tuning we take, baseline gets too; re-benchmark stock recipe on our hardware | Unfair comparisons / stack advantages only on the challenger |
| Software (rules) | Official pin was PyTorch 2.8.0-dev (cu128); compile may be off if unstable — both runs | Silent env drift between baseline and challenger |
| Hyperparams | Schedule changes justified by underfit regime / matched steps | Pure hyperparameter search as the “idea” |
(1) Official repo baseline — 5.401 h on RTX 4090, defines target loss 3.3821.
(2) F1 / F1_seal — stock recipe on our A100-40; only a sealed F1 (same torch pin + GPU class as challengers) is a valid speedup denominator. Historical F1 (notebook-era) is provisional.
(3) m0_anchor / proxy control — 800-step reference for cheap A/B only; never appears in the official % claim.
Fair-clock forensic protocol
Competition rules require a honest relative speedup on our hardware. That is necessary but not sufficient for forensic-grade claims: unpinned images, compile warmup, and GPU-class noise can move wall-clock by several percent — enough to fake a “win” or hide a real one. This section states both the official rules and the extra methodology we enforce.
A. What the competition already requires
| Rule (NoCap-Test / BottleCapAI) | How we implement it |
|---|---|
| Reach val ≤ 3.3821 on official disjoint val, faster than baseline | Primary DV: first step where disjoint val ≤ 3.3821 |
| Re-benchmark stock baseline on your GPU; report relative % | F1_seal on A100-40 · torch 2.13 · \(T\)=3.866 h @4736 · DONE |
| Training clock only — timer pauses during validation | Use harness train_time_ms, not wall calendar time that includes val |
| One GPU | Modal A100-40GB only; never bare A100 (80GB trap) |
| Fairness: if you tune X for your run, baseline gets X too | Same compile flag, same precision, same pin on denominator and challenger |
| Official software pin (repo era): PyTorch 2.8.0-dev cu128; compile optional if broken | We diverged on Modal CLI (see below) — so we re-seal, we do not hide it |
| Negative results welcome; no copying Modded-NanoGPT primary speedups as the “idea” | Archive miss configs; kill gates pre-registered |
B. What we add for forensic accuracy (beyond the README)
CLI images used unpinned pip install torch. F2b / Wave-4 / indeea resolved 2.13.0+cu130; notebook F2/W3 were 2.8.0+cu129; historical F1 torch was never logged. Code now pins TORCH_PIN = "torch==2.13.0". Smoke writes /vol/env_fingerprint.txt (profile, torch, CUDA, GPU name, pin).
torch.compile first-iteration overhead and early step instability are included in \(T\) (train_time to first cross). We never start the official clock after a secret warmup that baseline did not get. Steady-state step_avg is reported separately with \(N_{warm}=200\).
\(T\) = train_time_ms at first disjoint val ≤ 3.3821.
\(N^*\) = that step index (sample efficiency).
step_avg = mean over \([200, N^*]\).
Speedup = \((T_{F1\_seal} - T_M) / T_{F1\_seal}\). Never claim from sliding/EMA alone.
Measured stack drift ~6% step-time (802 vs 753 ms) is the empirical floor until sealed CV is known. Single-seed \|X\| < ~6% → do not publish as win. 6–10%: sealed + 2 seeds preferred. >10% or ≥200 steps earlier: 1 seed OK for narrative + fingerprint. Old “<3%” rule was too tight (would call infra a win).
C. Torch audit (why indeea shows 2.13)
| Run | Path | torch recorded | Forensic note |
|---|---|---|---|
| F1 baseline (historical) | notebook | not in config | Provisional only — superseded by F1_seal |
| F1_seal (rpp) | CLI stock 4768 | 2.13.0+cu130 | SEALED \(T\)=3.866 h · val@4736=3.3815 · final 3.3798 |
| F2 / Wave-3 | notebook | 2.8.0+cu129 | Within-family comparisons only |
| F2b / Wave-4 | CLI modal_nocap | 2.13.0+cu130 | Same unpinned resolve day/family |
| indeea smoke / proxies | CLI same app | 2.13.0+cu130 | Not a cheat kit — same stack as F1_seal / F2b/W4; ordinal only |
| Going forward | all CLI profiles | torch==2.13.0 pin | Any pin change = new seal required |
D. Claim classes (what is allowed to publish)
| Claim | Needs sealed env? | Status after audit |
|---|---|---|
| Val ≤ 3.3821 hit/miss (quality) | No (log fingerprint anyway) | F2 miss · F2b hit SOUND |
| Wall-clock % vs historical F1 | Yes | F2b −2.9% RETRACTED (speed) — below ~6% infra floor |
| Within-app A/B (Wave-4 wd120 vs wd720) | Same pin family | SOUND within CLI 2.13 |
| Wave-3 parallel ~1.6% | Same notebook 2.8 family | WITHIN-FAMILY ONLY |
| indeea proxy ranking | Same pin on indeea | ORDINAL ONLY — not a board % |
| Published official speedup | F1_seal DONE · claim_muon_par MISS (final 3.386, never crossed) | NO WIN |
E. Seal procedure (mandatory before any speed claim)
- Code pin: TORCH_PIN = "torch==2.13.0" in modal_nocap.py + indeea_proxy.py (done; log full 2.13.0+cu130 string).
- Smoke on clock account rainbowpuffpuff → fingerprint torch + A100-40.
- F1_seal on rainbowpuffpuff: full 4768 stock F1 — DONE · cross @4736 · \(T\)=3.866 h · final 3.3798 · torch 2.13.0+cu130.
- Research proxies on indeea = ordinal ranking only.
- Claim final also on rainbowpuffpuff vs that F1_seal — no published cross-account cardinal %.
- If claim is 6–10%, prefer 2nd seed; if <~6% single-seed, do not publish as win.
F. Meta AI forensic review (2026-07-11)
External skeptical methods review (Meta AI browser skill). Thread e5e853d3-e8e8-4afa-91f3-e8f525078f98. We adopt the fixes; we do not adopt factual errors.
| Standard | Verdict |
|---|---|
| Competition-legal plan | APPROVE — F1_seal, relative %, train_time, one GPU |
| Forensic / publish-grade after fixes | APPROVE-WITH-FIXES |
| Meta raw tone | “REJECT as written” on pure forensic grounds — accepted as pressure; path is fixes, not stop |
• Published % only on rainbowpuffpuff (F1_seal + claim)
• Noise floor ~6% single-seed (not 3%)
• Proxies = ordinal only; winner’s-curse awareness
• F2b −2.9% retracted for speed (quality hit stands)
• Same-team disclosure; publish failed proxies
• Muon needs attribution if shipped (Modded-NanoGPT adjacency)
• First-passage \(T\) is high-variance; single seed = case study
• “torch 2.13 does not exist” — false; we run 2.13.0+cu130 on Modal
• “~$2 / full run, 20 runs on $60” — false; F1 ≈ 3.8 h × ~$2.10 ≈ $8–10
• Mandatory 3× F1_seal before claim — budget-killing; one seal + optional method seed is plan
• Dual accounts are still good ops; they are not a free statistical lunch
No silent torch upgrades between denominator and challenger.
No published cross-account cardinal % — claim final on clock; indeea is ordinal only.
No single-seed win claim if \|X\| < ~6% until sealed CV says otherwise.
No “indeea won because 2.13” narrative — same CLI stack as F2b/W4.
No claiming from sliding/EMA; official metric is disjoint val only.
Include compile warmup in \(T\); report steady step_avg separately.
Writeup: one team, two workspaces; archive negatives; attribute Muon if used.
Source of truth: private docs/ops/FAIR_CLOCK.md + smoke env_fingerprint.txt.
What the agent is (and is not)
We call it an “agent” because it is a goal-directed, multi-phase system with memory, tools, and a control loop — not because it chatters. Humans set kill gates and recipes; Modal executes the DAG; the volume is durable memory; the kit is the tool surface.
log.csv (train/val/sliding/EMA), config.json, triage_stats.json, billing probes, volume listings. Every keep/kill is trajectory-based, not a single snapshot.
Data shards, features, scores, triage bins, priors, run dirs, LAUNCH markers, runs_logs.zip. Survives container death. Concurrent-writer safe (v2).
Train, score, triage, prior-build, summarize — each a Modal function with hard timeouts, scaledown windows, and idempotent skip rules.
Remote driver: phase DAG, spawn/fan-out, join. modal run --detach decouples local client; panic stop is one CLI command.
Playbook ideas behind flags (defaults = stock). Negative results are first-class outputs. Time-scale hparams re-derived at proxy length.
No tool-calling LLM in the loop. Humans write gates and interpret curves. The “agent” is the experiment runtime + method, not a conversational planner.
Layered architecture
GitHub layout — rainbowpuffpuff/nocap
Private working repo until email submission (synced 2026-07-11, commit family 17b9e95+). Mirrors brain (docs + literature), body (kit), hands (notebooks + indeea scripts), and memory (results logs — no multi‑GB weights in git).
Not in git (local / Modal only): multi‑GB *.pt, FineWeb bins, score npz, Modal tokens. Restore via volume_backup / CLI get-put.
Companion machine workspace: software_i_built/modal/ — full archives, Cloudflare deploy source (cf-pages-nocap-agent/), live pulls (pull_wave4_*, nocap_archive/).
Kit modules — tool surface
Design contract of the trainer: with all new flags at defaults, semantics match the stock baseline (model, loss, schedule, timing protocol). Every experiment is opt-in.
| Module | Role | Key I/O |
|---|---|---|
| train_gpt2_t4.py | Instrumented GPT-2 trainer (d12 / d2 smoke). RoPE, RMSNorm, optional SwiGLU, Canon, parallel block, MTP, loss shaping, prior, EMA, z-loss, sliding val. | bins → runs/<name>/ |
| get_data.py | Fetch FineWeb pre-tokenized chunks from HF into volume/local. | → data/*.bin |
| triage_features.py | Stage-A doc features (len, unique, top, rep8, digit, punct). | → features/*.npz |
| score_docs.py | Stage-B: per-doc mean CE under a trained ckpt; per-shard skip = resumable. | ckpt + bins → scores/*.npz |
| triage_select.py | Junk rules + optional score band + 10% random rescue + optional curriculum order. | → triage_*/fineweb_triage_*.bin |
| build_unigram_prior.py | Corpus unigram log-prior for fixed logit bias. | → unigram_prior.pt / prior_full.pt |
| eval_sliding.py | Boundary-aware sliding-window val (report alongside official disjoint). | ckpt → Δ vs disjoint |
| summarize_runs.py | Table over all run dirs; report zips logs without final.pt. | → console + zip |
| modal_nocap.py | Full experiment DAG as Modal App; phases idempotent; detach-safe orchestrator. | volume as bus |
Trainer flag groups (opt-in ideas)
--logit_prior · --ema_beta · --ema_start_frac · --warmdown_iters · --input_bin (triage_*) · --val_stride · --precision bf16 · --compile 1
--mtp_* · --loss_shape / --ls_* · --mlp swiglu · --canon · --parallel_block · --zloss
Data pipeline architecture
FineWeb10B pre-tokenized GPT-2 BPE: up to 50×100M tokens. Competition budget cap 5B; baseline consumes 2.5B. Our F2 path uses a curated subset scored and banded from 28 chunks.
| Artifact (scale verify, 2026-07-09) | Value |
|---|---|
| docs_total / docs_kept | 4,045,481 → 2,927,881 |
| tokens_total / tokens_kept | 2.796B → 1.922B (kept_frac ≈ 0.687) |
| Score band (mean-loss) | [4.1887, 5.1831] = pct 10–80 of 4,045,472 docs |
| scores/*.npz | 28 shards (expect 28) |
| triage_full bins | 20 shards · ≈3.58 GiB |
| prior_full.pt | ~198 KiB · unigram CE 7.6690 nats |
| Dominant rule_hit | score_band 1,213,639 · unique 33,465 · len 9,532 |
Scoring is offline like the baseline’s own pre-tokenization cost narrative: GPU prep is honest and disclosed in IDEA.md. Training then sees a higher-signal stream (~1.22 epochs of 1.92B curated tokens cycled toward ~2.5B consumed). Proxy isolation: w2_databand alone was −0.051 nats @400 vs raw stream.
Modal orchestrator — control loop
App name: nocap-wave2. Image: debian slim + torch==2.13.0 (pinned) + numpy/huggingface_hub/tiktoken. Volume: nocap version=2. GPU string: A100-40GB (never bare A100). Fingerprint on every smoke.
Phase catalog
Invocation shape
# local entrypoint only spawns the remote orchestrator — safe to close the terminal modal run --detach kit/modal_nocap.py --phase all modal run --detach kit/modal_nocap.py --phase scale --chunks 28 --band 0.10,0.80 modal run --detach kit/modal_nocap.py --phase f2 # panic / observe modal app stop nocap-wave2 modal app list modal volume get nocap runs_logs.zip ./runs_logs_modal.zip
Confirmed recipe brain
Every component proxy-validated at matched steps / hardware. Stack additivity ~70–100% at proxy scale.
| Lever | Mechanism | Proxy effect | Status |
|---|---|---|---|
| Perplexity-band curation | Keep docs in mean-loss pct 10–80 + junk rules + 10% anti-drift rescue | −0.051 @400 | SHIP |
| Unigram logit prior | Fixed corpus log-bias on logits; start ~7.7 not 10.8 | −0.047 @400 | SHIP |
| Shortened warmdown | Early LR decay wasteful while still underfit | −0.013 @800 | SHIP |
| Sliding-window eval | Boundary-aware val; reported with official disjoint | Δ 0.019@800 → 0.060 full (F1) | SHIP (dual-report) |
| EMA weights | β scaled to horizon; dual-eval at end | lag artifact at proxy | MAINTAIN free |
| Stack (data+prior+WD) | Composition for F2 | −0.056 raw / −0.074 w/ eval @800 | F2 RECIPE |
Killed with evidence (submission material)
+11% step time and worse loss @800. Consistent with small-model NLL cautions. Configs + curves archived.
~0 cost, never ahead (+0.007 @800). Val includes every token — down-weighting is a mid-run tax.
Big early lead evaporates by step 800; ends ≈ baseline (4.78).
−0.078 nats (largest training-side effect) but +30% step time naive → net loss. #1 FUTURE lead if fused ≤2% tax.
~1.6% faster, loss-neutral-or-better (−0.005). Out of F2 for composition risk only.
Baseline sits at exactly 20 tok/param (Chinchilla isoline). Resizing unstable sign, ≤2%.
Method — how the agent decides
- Pre-registered kill gates before each arm (RUNBOOK + playbook).
- Matched steps on identical GPU type when step times equal; matched wall-clock when they don’t.
- Paired within-run measurements where possible (immune to run noise).
- Re-derive every time-scale hyperparameter at proxy length (EMA-β lesson: 0.999 full-run ≠ 0.99 proxy).
- Gates on trajectories, not snapshots (sliding Δ grows through training).
- Negatives as first-class outputs — README invites them; we archive configs + CSVs.
- Effects < 0.01 CE need two seeds before keep/kill.
- Pin environment — torch==2.13.0 seal; historical drift 802 vs 753 ms/step (~6%). See fair-clock protocol.
- Compile + GPU warm on clock — \(T\) includes compile first-iter; no secret warmup; steady step_avg after \(N_{warm}=200\).
- Fingerprint every run — torch, CUDA, GPU name, pin, compile, seed, batch×accum×seq → env_fingerprint.txt.
- Noise floor ~6% — measured stack drift; single-seed \|X\| < ~6% is not a published win (Meta review 2026-07-11).
- Proxies ordinal only — 800-step ranks methods; published % = full-horizon \(T\) on clock account.
- Claim on clock — F1_seal + final both on rainbowpuffpuff; no cross-account cardinal %.
model d12 · batch 8 · grad_accum 16 · seq 1024 → 131,072 tok/step (¼ of full 524,288) · LR 4.5e-4 · warmup 128 · warmdown 160 (or 40 with EMA) · val every 100 · bf16 · compile 1 · zloss 1e-4 (F1 drops zloss).
Full finals: 4768 steps · batch 16 · accum 32 · LR 0.0018 · warmup 256 · warmdown 1024 stock / 256 stack · val every 128.
Cost safety, idempotency, serverless semantics
Serverless: no long-lived GPU. timeouts 1h (train) / 8h (finals). scaledown_window=10s. Worst hung arm ~$2.10; absolute multi-hang cap ~$15.
Safe re-run of any phase. score_docs skips per-shard .npz. prep skips prior/features/triage if present.
LAUNCH + log.csv freshness <15 min → fail loud instead of racing twin trainers (learned after a silent double score ~$2 tax).
Volume v1 vs v2: scripts request version=2; creating with default v1 breaks concurrent writers — recreate with --version=2 (or omit version pin when profiles already differ).
Cloudflare 403 on kit download: default Python-urllib UA blocked inside Modal; send curl UA from ensure_kit().
Image build free, cold start billed: smoke in-container 14s ≈ $0.008 GPU; actual bill ~$0.009 with pull.
Preemption + duplicate guard (Wave-4, 2026-07-10): Modal preempted w4_wd120 ~step 1589; restart saw fresh log.csv (<15 min) and raised RuntimeError: another instance appears live — orchestrator died, w4_wd720 never started. Guard is correct for true doubles; needs a preemption-aware path (resume / ignore LAUNCH after worker preemption).
Cross-account data: volumes never share. F2b on acct3 required CLI volume get/put of triage_full/ + prior_full.pt (+ scores/features insurance) from acct1 — pure transfer, no GPU.
Live state — 2026-07-11
| Milestone | Result | Status |
|---|---|---|
| Wave-1 (Colab T4) | fp16 parity, prior, sliding Δ growth, warmdown waste found | DONE |
| Smoke (Modal) | A100 lifecycle on profiles incl. indeea · ~$0.01 each; rainbowpuffpuff profile ready (not smoked yet) | DONE / READY |
| Wave-2 (Modal) | m0 4.7788 · stack 4.7232 · databand −0.051 · MTP/shape kill | DONE |
| Wave-3 (Modal, acct 3) | Canon −0.078 but +30% time · parallel banked · SwiGLU kill | DONE |
| Scale (acct 1) | 28 scores · prior_full · triage_full 1.92B tokens · band [4.19, 5.18] | DONE |
| F1 (acct 2) | Crosses 3.3821 @ step 4736 = 229.1 min · final 3.3795 · step_avg 2903 ms | DONE |
| F2 record (acct 1) | Final 3.4050 (never crossed 3.3821) · 235.0 min · step_avg 2957 ms · WD 256 too short | MISS |
| F2b recovery (acct 3) | Stack + WD 1024 · final 3.377309 · first cross @4736 = 235.6 min · step0 val 7.88 · ~3.95 h | HIT TARGET |
| Official speedup (retracted) | (13746s − 14139s) / 13746s = −2.9% · same step · torch confound + \|X\| < ~6% infra floor — retracted as speed evidence; quality hit still stands. Meta review 2026-07-11. | RETRACTED (SPEED) |
| Meta forensic review | Dual-account idea OK; cross-account cardinal % weak; noise floor → ~6%; proxies ordinal; APPROVE-WITH-FIXES · see §01b·F | ADOPTED FIXES |
| Wave-4 diagnostic (acct 2) | COMPLETE · app stopped · w4_wd120 final val 3.982 · w4_wd720 final val 3.993 · both ~34 min · step_avg ~845–850 ms · pull_wave4_20260711/ | DONE |
| rainbowpuffpuff (clock) | Role = F1_seal + claim · A100-40 + torch==2.13.0 · seal + claim both complete | DONE |
| indeea / indeeaindi (R&D) | Full board + ablations ALL DONE · best muon_par800 4.218 · muon 4.236 · seed42 4.235 · par1600@1600 3.941 | DONE |
| rainbowpuffpuff F1_seal | COMPLETE · first cross @step 4736 val 3.381538 · \(T\)=3.866 h · final 3.379813 · step_avg ~2939 ms · app ap-bWq1… | SEALED |
| rainbowpuffpuff claim_muon_par | COMPLETE · MISS · 4768/4768 · final.pt · never crossed 3.3821 · final val 3.386130 · val@4736=3.3895 · train_time final 3.975 h · step_avg ~3002 ms (+2% vs seal) · Muon+par+curated+prior+EMA · preempt resume @3584 · app ap-G2IC… | MISS |
| lobitodser horizon Phase‑1 | 1600-step causal screen after claim miss · px_muon_wsd 3.933 · px_noema 3.941 · adamw_f2b1600 4.174 (Muon −0.24 CE) · step tax ≤0 · all 4 DONE · wsd 3.933 · claim_repro/noema 3.941 · adamw 4.174 · EMA eval lag 4.234 · app names: HORIZON_ARM | ALL DONE |
| Literature program | 72 objects (36 core + 36 tangential) · experiment cards · gap analysis G1–G15 | ARCHIVED |
Stock AdamW · raw FineWeb · zloss 0 · no prior/EMA · WD 1024 · A100-40 · torch 2.13.0+cu130 · seed 1337 · app ap-bWq1… stopped · final.pt on volume.
First cross ≤ 3.3821: step 4736 · val 3.381538 · \(T_{F1\_seal}\)=13,918,667.5 ms = 231.978 min = 3.866 h · step_avg 2938.91 ms.
Final: val 3.379813 @4768 · train_time 14,011,911 ms (3.892 h) · step_avg 2938.74 ms.
Same cross step as historical F1 (4736); seal wall is ~1.3% slower (232 vs 229 min) under pinned torch — use seal \(T\) only for published %. Logs: results/f1_seal/.
Recipe: Muon (lr=0.02) + parallel + triage_full + prior_full + EMA 0.999 + WD 1024 · same A100-40 / torch 2.13 · seed 1337 · app ap-G2ICxBdq5MBQ5dOjTvYx4e stopped · final.pt · preempt-resumed @3584.
First cross ≤ 3.3821: NONE (sliding final 3.324 does not count).
Final disjoint val: 3.386130 @4768 — MISS target by +0.004 · val@4736=3.389454 · train_time final 3.975 h · step_avg ~3002 ms (~+2% vs seal).
vs F1_seal: no \(T_{cross}\) → no speedup claim. Early val looked better (@768: 3.921 vs F1 4.062) but full-horizon did not hit. Proxy promote of Muon did not transfer to a sealed win. Logs: results/claim_muon_par/.
Causal screen after claim miss. Same pin/GPU · curated+prior · seed 1337 · proxy batch 8×16.
Board @1600: px_muon_wsd 3.933 · px_noema 3.941 · px_adamw_f2b1600 4.174. Muon arms −0.23–0.24 CE vs AdamW with no step tax (avg 850–865 vs 873 ms).
Lessons: (1) EMA is the prime suspect for claim miss — dropping EMA recovers a strong @1600 curve. (2) Mild WSD-like cool (wu160/wd400) slightly beats plain noema. (3) Muon is still real vs AdamW at longer proxy — full-horizon glue (EMA + AdamW finals schedule) was the failure mode, not “Muon is fake.” (4) Ops: 4× concurrent A100 cancelled the oldest; unique app names via HORIZON_ARM.
Promote: next full claim candidate = Muon+parallel+curated+prior · EMA off · wsd-like schedule · vs \(T_{F1\_seal}\). claim_repro resume for complete baseline. Logs: results/horizon_lobitodser/.
Recipe: triage_full + prior_full + EMA β=0.999 + warmdown 1024. Hit val target (3.377 ≤ 3.3821). Wall −2.9% vs historical F1 is retracted as speed evidence (stack confound + below ~6% infra noise floor). Quality hit stands. Official speed number only vs F1_seal \(T\)=3.866 h on rainbowpuffpuff.
wd120 final 3.982 beats wd720 final 3.993 by ~0.01 CE. Curves nearly identical early; wd720 was briefly better at steps 1800–2100 (−0.04 at 2100), then short anneal wins the endpoint. Effect size is small — anneal length is not a free +5% lever at this proxy. Does not overturn F2 (WD256 @ full 4768 miss): full-horizon short anneal still failed; proxy 2400 ≠ finals.
App ap-LuwPnb6EpePg92rZ6zEMk4 stopped. Logs: pull_wave4_20260711/.
1. Stay on A100-40 through end of campaign (no GPU-class switch; VRAM underuse accepted).
2. Win plan approved — executing. Full roadmap: §13b.
3. Phase A+D done: F1_seal \(T\)=3.866 h · claim_muon_par MISS. Horizon Phase‑1 (lobitodser): noema/wsd promote @1600 (3.94/3.93 vs adamw 4.17) — drop EMA for next full claim.
4. Official speedup: still none. Do not re-run identical claim_muon_par. Next full = no-EMA Muon+par (+ wsd schedule).
Literature & hypotheses (why these races)
Closed-loop agent + 72 literature objects in academic_lit/ (core BIB.md + tangential BIB_TANGENTIAL.md). Time-to-target decomposes as:
T_cross ≈ N_steps(data, opt, schedule, arch) × t_step(arch, systems) + T_fixed(compile, val)
What the 2026-focused literature implies
| Cluster | Key papers | Hypothesis we test |
|---|---|---|
| O · Optimizers | Muon scalable (2502.16982) · Newton–Muon (2604.01472) −6% steps / −4% wall on GPT-2 speedrun class · SOAP (2409.11321) | B-Muon: matrix-aware updates cut N_steps — promoted on indeea (−0.50 CE @800). Full dossier: §13c |
| S · Schedules | Anytime pretraining (2602.03702) · ScheduleFree+ (2605.19095) · EMA weights (2411.18704) · Wave-4: wd120 3.982 vs wd720 3.993 @2400 | B-Anytime: F2 short-WD miss = full-horizon issue; at proxy 2400, short vs long anneal Δ≈0.01 — prefer mild WD + averaging, not extreme short-only bets |
| D · Data | Prior-filter (2509.18577) · ADAPT online reweight (2605.05227) · proxy reliability (2512.24503) · FineWeb-Edu | B-PriorFilter / B-Mix / B-Curriculum: static PPL band hit quality not steps; try prior-only filter, mixes, order |
| A · Arch / aux | TOP (2508.19228) · Future summaries (2510.14751) · Parallel tracks (2602.07306) | MTP killed; parallel banked (~1.6%); aux2.0 only with strict step-tax gate |
| T · Tangential gaps | µP transfer · packing · mixing laws · FP8 · critical batch · softcap | G1–G15 fills: free t_step / better proxies / 5B budget use |
Keep: band curation, unigram prior, dual val, parallel, kill-gate discipline.
Kill: MTP, loss shaping, SwiGLU-at-finals, naive Canon, short-WD-only final, EMA-as-early-cross claim.
Park: fused Canon until step tax ≤3%.
Ranked experiments (indeea) — literature-backed
| # | Bet | Why now | Script | Est. $ |
|---|---|---|---|---|
| 0 | Val data seed | Need fineweb_val for official metric | 01_seed_val_data.sh | ~0 |
| 1 | AdamW control @800 curated | Denominator for all proxies on torch 2.13 | 10_proxy_control.sh | ~1–1.5 |
| 2 | Parallel on/off | W3 bank; free t_step (A4 lit) | 15_proxy_parallel.sh | ~2–3 |
| 3 | Schedule WD sweep | Anytime lit + Wave-4 anneal data | 12_proxy_schedule.sh | ~2–4 |
| 4 | Muon (after kit port) | Newton-Muon on GPT-2 class | 11_proxy_muon.sh | ~1–2 |
| 5 | Prior-filter / curriculum / mix | D3 / D7 / mixing laws | 13, 14 + cards | ~2–5 |
Full cards: academic_lit/CARDS/ · synthesis: academic_lit/SYNTHESIS.md · related work draft: RELATED_WORK.md
Dual accounts — clock vs research
Two active ~$30 Modal workspaces split by forensic role, not by GPU class. Both stay on A100-40GB + pin torch==2.13.0 until campaign end (VRAM ~10/40 GiB underused; we accept that for a stable clock).
Workspace rainbowpuffpuff. Clean denominator and official finals only. No proxy clutter on this volume.
Run here: volume create → smoke + fingerprint → raw FineWeb + val → F1_seal (stock 4768) → claim final on this same account when indeea nominates → 2nd seed if claim is 6–10%; never publish single-seed <~6% as win.
Do not run here: Muon/schedule A/B spam, half-finished proxies, Wave-4-style anneal sweeps.
Budget sketch (~$30): F1_seal ~$9–10 · claim final ~$9–10 · buffer/seed ~$10.
Isolated from Wave-4 / F2b. Curated seed already on volume. All risky method search lands here.
Run here: val seed → AdamW control @800 → parallel on/off → mild WD only → Muon when kit ready → at most one data-order bet. Rank vs control, not vs historical F1.
Do not run here: published % vs F1; second full F1_seal (that’s rainbowpuffpuff’s job).
Budget sketch (~$30): proxies ~$12–18 · reserve ~$10–15 for a compose final or hand recipe to rainbowpuffpuff.
What runs where (checklist)
| Work | Account | Est. $ | Status |
|---|---|---|---|
| Re-smoke + env_fingerprint.txt (pin 2.13) | rainbowpuffpuff | ~0.01 | DONE |
| Raw FineWeb + val for stock F1 | rainbowpuffpuff | ~0–1 | DONE |
| F1_seal stock 4768 (sole speed denominator) | rainbowpuffpuff | ~8–10 | DONE · \(T\)=3.866 h |
| Full claim final (Muon+par+stack) | rainbowpuffpuff | ~10–12 | DONE · MISS 3.386 |
| Val shard + readiness | indeea | ~0 | DONE |
| Proxy control · ix_control | indeea | ~0.4 | DONE · 4.731 |
| Parallel on · ix_parallel_on | indeea | ~0.4 | DONE · 4.585 · BANK |
| Muon · ix_muon | indeea | ~0.4 | DONE · 4.236 · PROMOTE |
| Compose / schedule / prior_band | indeea | ~2 | DONE compose≈par · sched park · prior 4.768 kill |
| Full compose / claim @4768 | rainbowpuffpuff | ~8–10 | ONLY IF PROXY WINS |
Retired / archive accounts (do not burn for new science)
| Profile | Past role | Now |
|---|---|---|
| acalincarol | Scale · F2 record | Archive / data source |
| stufflaters | F1 historical · Wave-4 | Done — no more anneal GPU |
| deeferentleeg | Wave-3 · F2b | Archive (quality hit, provisional wall) |
rainbowpuffpuff — clock commands (when approved)
# profile is local name = workspace rainbowpuffpuff MODAL_PROFILE=rainbowpuffpuff modal volume create nocap --version=2 MODAL_PROFILE=rainbowpuffpuff modal run modal_nocap.py --phase smoke # confirm /vol/env_fingerprint.txt → torch 2.13.0 + A100-40 MODAL_PROFILE=rainbowpuffpuff modal run modal_nocap.py --phase data --chunks 28 MODAL_PROFILE=rainbowpuffpuff modal run --detach modal_nocap.py --phase f1 # → runs/f1_baseline (or f1_seal name) = sole T denominator
indeea — research commands (when approved)
| Item | Status |
|---|---|
| Volume nocap v2 | CREATED |
| Curated seed (triage_full 20 · scores 28 · features 28 · prior) | SEEDED |
| Smoke A100-SXM4-40GB · torch 2.13.0+cu130 | OK |
| Readiness f2b_ok | TRUE (raw train optional) |
| Scripts indeea_scripts/*.sh + indeea_proxy.py | DRY-RUN READY |
# always dry-run first; --execute only when approved cd software_i_built/modal/indeea_scripts ./00_check.sh ./01_seed_val_data.sh --execute ./10_proxy_control.sh --execute ./15_proxy_parallel.sh --execute # mild schedule only — not extreme short-WD finals ARM=wd160 ./12_proxy_schedule.sh --execute MODAL_PROFILE=indeea modal run indeea_proxy.py --arm control --iters 800 --input curated
Published speedup: both \(T_{F1\_seal}\) and \(T_M\) on rainbowpuffpuff only (same pin, A100-40, compile warm in \(T\)). No cross-account cardinal %.
indeea ranks methods vs its own proxy control — ordinal only; a “win” is a nomination, never a board %.
Same team: writeup discloses two workspaces, one methodology (not two independent competitors).
Noise: single-seed \|X\| < ~6% is not a publishable win until sealed CV known.
indeea torch 2.13 = same CLI stack as F2b — not a cheat kit. Protocol: §01b · docs/ops/FAIR_CLOCK.md.
Legacy anchor #indeea redirects conceptually to §13 Dual accounts.
Win plan — best Modal path (approved · executing)
Goal: disjoint val ≤ 3.3821 with \(T < T_{F1\_seal}\) by a margin that survives ~6% noise, A100-40 + torch==2.13, claim on rainbowpuffpuff, story that is not “paste Modded-NanoGPT.” F2b proved quality stack alone does not win the clock — we need \(N^*\) and/or \(t_{step}\) levers under fair-clock rules.
Phase A COMPLETE: F1_seal \(T\)=3.866 h @4736 · final 3.3798 · app ap-bWq1….
Phase B COMPLETE: indeea ordinal board · best muon_par800 4.218.
Phase D COMPLETE · MISS: claim_muon_par on rpp · app ap-G2ICxBdq5MBQ5dOjTvYx4e · final disjoint 3.386130 · never crossed 3.3821 · train_time 3.975 h · step_avg ~3002 ms · early vals better than F1, late curve failed · proxy→full transfer negative. Do not publish as win.
Private doc: docs/ops/WIN_PLAN.md · fair clock: §01b.
Tier 0 — clock (mandatory)
| # | Work | Account | Est. $ | Status |
|---|---|---|---|---|
| 0a | Volume + smoke + fingerprint | rainbowpuffpuff | ~0.01 | DONE |
| 0b | Raw FineWeb + val (data --chunks 28) | rainbowpuffpuff | ~0–1 | DONE |
| 0c | F1_seal stock 4768 | rainbowpuffpuff | ~8–10 | DONE · \(T\)=3.866 h @4736 |
| B* | indeea full board + Muon ablations | indeea | ~$6–8 | ALL DONE |
Tier 1 — highest EV for a real win (implement then run)
| Rank | Bet | Code? | Why it can win | Where |
|---|---|---|---|---|
| 1 | Muon / Newton-Muon + AdamW embed/head | Kit port required | Only big untried \(N^*\) lever; GPT-2-class lit | indeea proxy → rpp claim |
| 2 | Compose: F2b stack + parallel (+ Muon if #1) | Parallel flags exist | Free \(t_{step}\) + known quality hit | rpp claim |
| 3 | Horizon-free / anytime + registered averaging | Schedule code | Explains F2/F2b; earlier first-cross | indeea → rpp |
| 4 | Prior-filter or raw/curated mix | Light CPU + proxy | Original data story; may cut \(N^*\) | indeea → rpp |
| 5 | Prior anneal (strong early → 0) | Small flag | Uses existing prior asset | indeea → rpp |
Tier 2 — ordinal screens (indeea)
| # | Action | Account | Est. $ | Status |
|---|---|---|---|---|
| 1 | muon_par800 | indeea | 4.218 | BEST |
| 2 | muon / seed42 / lr01 | indeea | 4.23–4.24 | seed-robust · lr0.01≈0.02 |
| 3 | muon_noprior / raw | indeea | ~4.26 | prior+curated help a little |
| 4 | parallel / compose | indeea | 4.58 | BANK systems |
| 5 | control | indeea | 4.731 | denom |
| — | muon_par1600 | indeea | 3.941@1600 | longer horizon OK |
| — | lr05 / prior / sched | indeea | 4.41–4.81 | kill/park |
Best @800: muon+parallel 4.218 · muon alone 4.236 · seed42 4.235 (not a fluke) · lr 0.05 hurts (4.409).
@1600: muon+parallel 3.941 — keeps falling (proxy→full transfer hopeful).
Claim recipe: Muon (lr≈0.02) + parallel + curated + prior on rpp vs F1_seal. Attribute Keller Muon.
Kill schedule/data fast if Δ < 0.01 CE; put remaining $ into Muon + one full claim. Proxies never publish board %.
Phased execution
# PHASE A — CLOCK (rpp) ~$10 MODAL_PROFILE=rainbowpuffpuff modal volume create nocap --version=2 MODAL_PROFILE=rainbowpuffpuff modal run modal_nocap.py --phase smoke MODAL_PROFILE=rainbowpuffpuff modal run modal_nocap.py --phase data --chunks 28 MODAL_PROFILE=rainbowpuffpuff modal run --detach modal_nocap.py --phase f1 # PHASE B — SCREEN (indeea) while coding Muon ~$8–12 cd indeea_scripts ./00_check.sh ./01_seed_val_data.sh --execute ./10_proxy_control.sh --execute ./15_proxy_parallel.sh --execute # + implement Muon in train_gpt2_t4.py # PHASE C — MUON DECISION (indeea) ~$3–5 after kit ./11_proxy_muon.sh --execute # unblocked only after port # PHASE D — CLAIM (rpp) ~$9–18 # if Muon promotes: Muon + parallel + stack # else: parallel + stack + best data/schedule nominee # if |X| in 6–10%: 2nd seed; if <~6%: do not publish as win
Skip (do not burn credits)
- Extreme short-WD finals · re-score whole FineWeb for another static PPL band
- Historical F1 as denominator · cross-account published %
- Single-seed <~6% “win” · torch/GPU shopping · blind Modded-NanoGPT dump
- 3× F1_seal “for science” without a claim plan
Seal clock → implement Muon → proxy on indeea → if promote, full claim = Muon + parallel + proven stack on rpp vs F1_seal. Fallback if Muon fails: anytime + prior-filter/mix + parallel compose.
Deep dive: §13c Muon (theory · kit · full indeea board · claim recipe · attribution).
Muon — theory, kit, indeea board, claim
This is the campaign’s main optimizer bet. After data+prior+EMA+long warmdown (F2b) hit quality but not earlier first-cross, we needed a lever that cuts steps-to-target \(N^*\), not just step time. Muon is that lever at proxy scale. Full claim still waits on sealed \(T_{F1}\) on rainbowpuffpuff.
Hybrid Muon on 2D hidden weights + AdamW on embed/head reaches val@800 ≈ 4.23–4.24 vs AdamW control 4.731 (≈ −0.50 CE), is seed-stable, prefers lr ≈ 0.01–0.02, stacks slightly with parallel (4.218), and at 1600 steps still falls to 3.941. Not a board % — nomination for a full 4768 claim.
What Muon is
Muon treats each 2D weight matrix as a matrix, not a bag of scalars. It runs Nesterov-style momentum on the gradient, then approximates a polar / zero-power map via Newton–Schulz iteration so the update is closer to an orthogonal direction in spectral geometry. Scale factor \(\sqrt{\max(1,\,m/n)}\) restores a sensible magnitude after NS.
AdamW is excellent and remains our embed / lm_head / 1D path. Hidden Linear weights are low-rank-ish operators; matrix-aware updates often reduce the number of steps to a CE target on GPT-2-class runs — exactly the \(N^*\) gap F2b left open.
Standard practice from Keller Jordan / community Muon: do not Muon the embedding or lm_head; keep AdamW there with its own LR group.
Muon LRs are not AdamW LRs. Our board: 0.01 ≈ 0.02; 0.05 hurts (4.409). Default claim: --muon_lr 0.02.
Kit uses the standard 5-step NS coeffs (3.4445, −4.7750, 2.0315) in bf16, same family as public Muon implementations.
Why Muon for NoCap (campaign logic)
| Fact from earlier waves | Implication |
|---|---|
| F2 miss: short WD @ full horizon never crossed 3.3821 | Anneal length is fragile; not our primary \(N^*\) bet |
| F2b hit quality (3.377) but first-cross @ same step 4736 as F1 | Data+prior+EMA+long WD ≠ earlier passage time |
| Wave-4 @2400: WD120 vs WD720 Δ≈0.01 CE | Anneal is a small dial at proxy — park as main strategy |
| Parallel ~1.6% faster step @ historical proxy | Bank \(t_{step}\); cannot alone open a ≥6% win |
| Literature O1/O2: Muon / Newton-Muon cut steps on GPT-2 speedrun class | Highest-EV untried lever → kit port → indeea board |
Pre-registered card: private docs/academic_lit/CARDS/B-Muon.md — promote if proxy dominates AdamW early; claim only with sealed fair-clock \(T\).
Literature we cite (not a paste of Modded-NanoGPT)
| ID | Paper / note | What we take | What we do not take |
|---|---|---|---|
| O1 | 2502.16982 · Muon is Scalable for LLM Training | Matrix Muon on hidden weights; hybrid with AdamW; scale facts | Whole speedrun repo as submission body |
| O2 | 2604.01472 · Newton–Muon | Second-order motivation; reported −6% steps / −4% wall on GPT-2-class | Unverified port before hybrid Muon ships |
| O3 | 2602.21545 · Better Muon + norm | Optional later refinement if hybrid plateaus | Extra knobs on first claim |
| Blog | Keller Jordan · kellerjordan.github.io/posts/muon/ | Algorithm clarity, NS intuition, hybrid grouping | Claiming their wall-clock as ours |
Competition writeup must attribute Muon (Keller Jordan et al.) and note Modded-NanoGPT adjacency if we ship this optimizer. We motivate via our F2b failure mode + sealed ablations — not “we downloaded a leaderboard script.” Meta forensic review: same rule (adopted).
Kit implementation (what we actually run)
Embedded single-device hybrid (no extra pip): zeropower_via_newtonschulz5, muon_update, SingleDeviceMuonWithAuxAdam, build_muon_adam_optimizer. Shipped via volume kit_override/ so Modal picks it up without republishing the whole tarball.
--optimizer {adamw,muon} · --muon_lr (default: follow --learning_rate; proxies often 0.02). LR schedule scales each param-group relative to its base (spectral vs AdamW). GradScaler path stays AdamW-safe; Muon path is bf16-friendly.
| Param group | Optimizer | Typical defaults in kit |
|---|---|---|
| Hidden 2D weights (use_muon=True) | Muon | lr 0.02 · momentum 0.95 · NS 5 · WD 0 |
| embed / lm_head / 1D biases norms | AdamW | lr ~3e-4 class · β=(0.9, 0.95) · eps 1e-10 |
# indeea proxy shape (ordinal) MODAL_PROFILE=indeea ./11_proxy_muon.sh --execute # or direct flags once kit override is live: # --optimizer muon --muon_lr 0.02 --iters 800 --input curated (+ prior) # claim shape (after F1_seal) on rainbowpuffpuff only # Muon + parallel + curated + prior · full 4768 · report train_time to first disjoint ≤3.3821
indeea protocol (how the board was run)
- Hardware / pin: A100-40 · torch==2.13.0 (same CLI stack as F2b / Wave-4 — not a cheat kit).
- Proxy length: 800 steps primary; one 1600-step horizon check on best compose.
- Base recipe: d12 · batch 8 · grad_accum 16 · seq 1024 · bf16 · compile 1 · val every 100.
- Denominator: ix_control AdamW + curated + prior → val@800 4.731 (step0 val ~7.88 from prior).
- Metric for ranking: disjoint val at matched steps. Never published as % vs historical F1.
- Kill gates (card): worse than AdamW by >0.02 CE; or step tax >10% without ≥0.03 better val; or NaN/explosion.
Full ordinal board (2026-07-11) — COMPLETE
| Rank | Run | Val@800 | step_avg | Call |
|---|---|---|---|---|
| 1 | ix_muon_par800 | 4.218 | 937 | BEST COMPOSE |
| 2 | ix_muon | 4.236 | 902 | PROMOTE strong alone |
| 3 | ix_muon_seed42 | 4.235 | 906 | SEED-ROBUST ≈ seed 1337 |
| 4 | ix_muon_lr01 | 4.231 | 947 | lr 0.01 ≈ 0.02 |
| 5 | ix_muon_noprior | 4.256 | 944 | prior helps ~0.02 |
| 6 | ix_muon_raw | 4.258 | 972 | curated helps ~0.02 |
| 7 | ix_parallel_on | 4.585 | 866 | BANK systems |
| 8 | ix_compose800 | 4.583 | 875 | ≈ parallel |
| 9 | ix_control | 4.731 | 878 | AdamW denom |
| 10 | ix_sched_wd160 | 4.734 | 929 | PARK |
| 11 | ix_prior_band | 4.768 | 925 | KILL |
| 12 | ix_sched_wd400 | 4.814 | 881 | PARK |
| — | ix_muon_lr05 | 4.409 | 902 | LR TOO HIGH |
| Longer horizon | Val@1600 | step_avg | Notes |
|---|---|---|---|
| ix_muon_par1600 | 3.941 | 835 | Still falling · claim-shaped · not a seal |
What the board taught us
~0.50 CE vs control at 800 steps — larger than parallel, schedule, or data ablations combined. Seed 1337 vs 42 is a coin flip (4.236 vs 4.235). lr 0.01–0.02 is flat; do not “turn it up.”
muon+par 4.218 vs muon 4.236 (~0.02 CE). Parallel alone 4.585 is a systems bank (often better step_avg on non-Muon arms). Ship both on claim.
Drop prior → 4.256; raw → 4.258. Keep F2b-style curated+prior for continuity and ~0.02 CE — they do not replace Muon.
prior_band kill (4.768). Schedule WD160/400 park. Muon lr 0.05 kill. Another short-WD final is still low EV after F2/W4.
Ran: Muon lr=0.02 + parallel + curated + prior + EMA 0.999 · full 4768 on rpp vs F1_seal.
Result: final disjoint 3.386130 · no first-cross · train_time 3.975 h · step_avg ~3002 ms (+2% vs seal ~2939).
Publish: NO — quality miss and no \(T_{cross}\). Sliding 3.324 is not the metric.
Lesson: indeea @800 promote (4.218) was real ordinal signal but proxy→full transfer failed for this compose. Early claim vals beat F1; late horizon did not reach ≤3.3821 (F2b still the only quality hit on stack lineage).
Fair-clock constraints (Muon-specific)
| Rule | Why |
|---|---|
| indeea board = ordinal only | Different workspace; proxies rank methods, they do not print board % |
| Both \(T_{F1\_seal}\) and \(T_M\) on rainbowpuffpuff | No cross-account cardinal speedup |
| Same torch==2.13.0 pin + A100-40 | Otherwise stack confound (see F2b −2.9% retraction) |
| Disjoint val only for first-cross | Sliding/EMA are diagnostic, not claim metrics |
| Attribute Muon in writeup | Forensic / scientific honesty; Modded-NanoGPT adjacency |
| Proxy→full transfer unproven until claim finishes | 3.941@1600 is hopeful, not a seal |
Status vs next action
| Step | Status | Notes |
|---|---|---|
| Card B-Muon + lit map | DONE | docs/academic_lit/CARDS/B-Muon.md |
| Kit port + volume override | DONE | muon_opt.py · --optimizer muon |
| indeea full board + ablations | DONE | Best compose 4.218 · logs under results/indeea/ |
| F1_seal on rpp | SEALED | \(T\)=3.866 h @4736 · final 3.3798 · results/f1_seal/ |
| Full claim 4768 on rpp | MISS | final 3.386 · never crossed · 3.975 h · results/claim_muon_par/ |
| Horizon Phase‑1 lobitodser | ALL DONE | wsd 3.933 · claim_repro/noema 3.941 · adamw 4.174 · EMA@1600 4.234 · results/horizon_lobitodser/ |
| Next full claim | PROMOTE | Muon+par+curated+prior · EMA off · wsd-like · vs F1_seal |
| Newton-Muon refinements | LATER | Only after a hitting no-EMA Muon full run |
Muon was proxy-validated @800, failed full claim with EMA+F2b glue (3.386 miss). Horizon @1600 on lobitodser shows no-EMA Muon still −0.24 CE vs AdamW and slightly better with a longer cool. Leading hypothesis: drop EMA + Muon-native schedule for the next sealed full run — not “abandon Muon.” Live: claim_muon_wsd on lobitodser. Book research map for post-result adaptations: §13d.
Book research → NoCap experiment map
Offline study corpus: research/ai-ml-foundations-books/ (HF ai-ml-foundations-book-collection, 25 PDFs). Per-book TOCs: tocs/*.md · full dossier: NOCAP_RESEARCH_FROM_BOOKS.md. Not training data — NoCap allows FineWeb only; this section is method research for FineWeb-legal flags.
Do not tokenize books into the trainer. Val target stays FineWeb disjoint CE ≤ 3.3821. Speed vs sealed \(T_{F1\_seal}=3.866\,\mathrm{h}\) only.
High-relevance books (why these, not all 25)
| Book | Role for NoCap | Chapters / themes we extracted |
|---|---|---|
| Algorithms for Optimization | Schedules · 1st/2nd-order · Adam/momentum | Gradients · line search · GD · conjugate GD · momentum / Nesterov · Adam · hypergradient · Newton / quasi-Newton · stochastic / noisy descent |
| Convex Optimization (Boyd) | Duality · regularization geometry | Dual problems · regularized approximation · unconstrained minimization |
| Understanding Deep Learning | Practice optim · norm · gen | Optimizers · SGD/Adam · learning-rate · regularization · generalization · init/normalization themes |
| Build a Large Language Model (From Scratch) | Pretrain recipe (legal if FineWeb) | Data prep · attention · pretraining · evaluation · fine-tuning · LR/warmup/WD practice |
| Murphy — Probabilistic ML Intro | MAP ↔ WD · priors | Optimization · gradient methods · MAP / regularization / priors |
| Bishop PRML | Overfitting · Bayesian→ML | Regularization · priors · MAP · evidence · optimization |
| Mathematics for ML | Matrix calculus (Muon intuition) | Gradients · eig/SVD · linear algebra for matrix optimizers |
| UML (Shalev-Shwartz) | SGD · stability · gen theory | SGD · convex · regularization · generalization |
| Principles of DL Theory | Init / width (secondary) | Criticality · GP limits · training dynamics |
| NLP with Transformers | Train practice (arch mostly fixed) | Fine-tuning · efficient training · LR practice |
| MacKay · ESL | CE metric · averaging/shrinkage | Cross-entropy / model selection / shrinkage / averaging |
Park for this race: multi-agent RL, fairness institutional chapters, pure product AI-eng without a trainer flag.
Empirical board ↔ book themes
| What we measured | Book interpretation | Already adapted? |
|---|---|---|
| F1_seal \(T=3.866\,\mathrm{h}\) @4736 | Proper scoring / CE risk (MacKay) | SEALED denominator fixed |
| claim_muon_par final 3.386 · EMA 3.50 | Averaging can lag late (UDL/ESL); first-cross needs raw weights | YES — EMA off on claim_muon_wsd |
| Horizon Muon −0.23 CE vs AdamW @1600 | Matrix-aware / adaptive updates (opt books, MML) | YES — keep Muon |
| EMA path step_avg +15% vs noema | Extra state/update cost | YES — no EMA for wall |
| wsd 3.933 best @1600 | Schedule design (Alg. for Opt · UDL) | YES — wu~10% / wd~25% live |
| F2b quality hit with prior+curated | MAP / data selection (Bishop/Murphy) | YES — keep stack; prior_band killed |
Ideas derived → future experiments (gated on claim_muon_wsd)
Live run: lobitodser · claim_muon_wsd · app ap-cEFn… · Muon+par+curated+prior · no EMA · WSD-like. Adaptations below fire only after that result is known.
Writeup attributes Keller Muon; cite schedule/EMA negative results; optional 2nd seed if 6–10%. Books used as theory narrative only.
Newton-Muon / better NS (2nd-order chapters) · Muon LR floor late · wd fraction grid @1600 · polyak/SWA only as diagnostic average if allowed · faster orthogonalization.
F2b + parallel, no Muon (known quality path) · retune AdamW group LR under Muon · longer stable / shorter cool · raw+curated mix · prior anneal early→0 · not prior_band.
Profile step tax · keep parallel · ns_steps 3 vs 5 kill-gate · val frequency · no concurrent A100 cancel.
Chapter → flag sketch (implementable on our kit)
| Chapter theme | Book(s) | Possible kit experiment | When |
|---|---|---|---|
| Momentum / Nesterov / Adam | Alg. for Optimization · UDL | Already hybrid Muon (NS on momentum) + AdamW head; ablate muon momentum 0.9–0.95 | After claim result |
| Newton / quasi-Newton | Alg. for Optimization · Convex | Newton-Muon port; 1600 ordinal then full | Hit but short of 6% |
| LR schedules / line search spirit | Alg. for Optimization · LLM book | WSD fractions; muon_lr floor; cosine on Adam groups only | Live WSD; refine if miss |
| MAP / Gaussian prior ↔ WD | Murphy · Bishop | WD sweep on Adam groups; keep unigram prior; prior scale anneal | Quality miss |
| Model averaging / shrinkage | ESL · UDL | Do not use EMA for first-cross; optional end-window average for report only | Always for \(T\) |
| Cross-entropy / likelihood | MacKay | No change — disjoint CE is correct DV | — |
| Matrix decompositions | MML | Narrative for Muon; NS step ablations | Tax-bound |
| Pretrain data hygiene | LLM-from-scratch | Only FineWeb filters/order already in kit | Data A/B if miss |
| Init / criticality | PDLT | Low EV for stock d12 unless desperate | Park |
Reading order (team, not full curriculum)
- Algorithms for Optimization — momentum, Adam, Newton (tocs + PDF)
- Understanding Deep Learning — optim + gen + norm
- Build LLM from Scratch — pretrain hparams
- Murphy Intro / Bishop — MAP, priors
- MML — matrix tools for Muon writeup
research/ai-ml-foundations-books/*.pdf — full books
research/ai-ml-foundations-books/tocs/INDEX.md — all 25 TOCs
research/ai-ml-foundations-books/NOCAP_RESEARCH_FROM_BOOKS.md — long-form dossier + snippets
Four-book idea bank (≥50 each)
Structured ideas from Algorithms for Optimization, Understanding Deep Learning, Build a Large Language Model (From Scratch), and Murphy PML Intro. Each idea: why it fits our FineWeb d12 one-GPU setup, why not, and what experiment to run (or park). Source: research/book-ideas/ideas_by_book.json.
Book PDFs are offline research only. Non-FineWeb train proposals are illegal/park.
Algorithms for Optimization (53 ideas)
PDF: Algorithms for Optimization.pdf
| ID | Idea | Why | Why not | Experiment | Status |
|---|---|---|---|---|---|
| afo-01 | Gradient as improvement direction Ch. Derivatives and Gradients | Train CE is smooth in logits/weights; reverse-mode grads already drive AdamW/Muon on d12, so first-order directions are the only free improvement signal we get each step. | Improving 'how we compute grads' alone rarely moves first-cross T — the kit autodiff path is already correct; missing update geometry or schedule is the usual bottleneck. | Baseline hygiene: log per-group grad norms mid claim_muon_wsd; treat anomalies as forensics, not a new claim lever. | proxy-or-full |
| afo-02 | Numerical differentiation for debug Numerical Differentiation | Finite-diff checks catch broken Muon/Adam group wiring after kit_override swaps of muon_opt.py or train_gpt2_t4.py before spending a full A100 claim. | Finite differences are far too slow for training and cannot reduce N* or t_step; they are a correctness tool only. | CPU unit test: compare autograd vs central finite-diff on one Linear after kit_override load (no GPU claim hours). | proxy-or-full |
| afo-03 | Automatic differentiation discipline Automatic Differentiation | Our train path is reverse-mode AD; any silent .detach() on the CE path would make Muon/Adam updates garbage and fake a schedule miss. | AD correctness does not by itself reduce steps or wall-clock — it only prevents false negatives when we change optimizers. | Assert no detach on main loss; smoke already exercises AD; re-run smoke after every kit_override edit. | proxy-or-full |
| afo-04 | SPSGA-style gradient noise Simultaneous Perturbation Stochastic Gradient Approximation | Zeroth-order SPSA-style noise is a classic black-box fallback when gradients are unavailable — theoretically a regularizer, practically obsolete for CE with AD. | We have exact grads; multi-query SPSA multiplies forward cost and wastes the Muon matrix path that already needs full g. | PARK — do not run SPSA/black-box optim on FineWeb CE while full AD is available. | park |
| afo-05 | Unimodal bracketing of LR Bracketing / Finding an Initial Bracket | Muon spectral lr and Adam embed/head lr are 1D continuous knobs; classical bracketing formalizes the cheap LR search we already do on proxies. | Full-horizon 4768 grids are expensive; bracketing assumes approximate unimodality of val@proxy which is often violated by schedule interactions. | Proxy 800: bracket muon_lr on {0.005,0.01,0.02,0.04} ordinal vs fixed-seed claim_repro control; promote only if Δval≥0.02 and tax≤2%. | proxy-or-full |
| afo-06 | Golden-section search on warmdown length Golden Section Search | Warmdown fraction is continuous-ish and horizon already showed WSD schedule sensitivity (wsd 3.933 vs claim_repro 3.941 @1600). | Val@800–1600 is noisy; golden-section without seed repeats can chase noise and burn budget on false optima. | Proxy 1600: golden-section on warmdown_frac∈[0.15,0.35] maximize Δval vs claim_repro; stop after 5 probes max. | proxy-or-full |
| afo-07 | Quadratic fit of val vs LR Quadratic Fit Search | After three LR probes, a quadratic surrogate is a cheap classical way to pick a vertex without another full factorial. | Val noise and non-quadratic true response can put the vertex outside the safe region or reverse rank at full horizon. | After 3 muon_lr proxies at 800, fit quadratic; pick vertex; one confirm seed at 800 before any full claim change. | proxy-or-full |
| afo-08 | Local descent with fixed step factor Local Descent / Step Factors | Our LR schedule multiplies base_lr each step — it is exactly a time-varying step-factor schedule from the local-descent chapter. | Fixed step without schedule already fails at full horizon (horizon adamw 4.174 much worse); constant factor is not competitive. | Document WSD/cosine as step-factor schedule; forbid fixed-LR full finals; if testing fixed factor, proxy 800 kill-gate only. | proxy-or-full |
| afo-09 | Exact line search (impractical) Line Search | Exact line search would pick the optimal step along the Muon/Adam update direction and is the textbook optimal 1D subproblem. | Extra forwards each step destroy wall-clock on A100; not used in modern LM pretrain SOTA and would tax T even if CE improves. | PARK for full claim; optional offline 1-step line-search diagnostic on a saved checkpoint only. | park |
| afo-10 | Approximate line search (Armijo) Approximate Line Search | Armijo backtracking could reject destructive Muon steps if bf16 instability or LR too high shows CE spikes mid-run. | On stable d12 bf16 spikes are rare; Armijo adds sync points and a new code path risk without proven T gain. | Only if train CE spikes: enable Armijo on Muon group for 100-step proxy; kill if t_step tax >3% without val gain. | proxy-or-full |
| afo-11 | Trust-region style update clipping Trust Region Methods | Clipping spectral update Frobenius norm to a trust radius is the practical trust-region analogue for Muon matrix steps. | Too-tight radius slows progress; not in stock kit so it needs careful implementation and a tax budget. | Proxy: muon_update *= min(1, R/||U||_F) for R∈{1,2,5}; kill if val worse >0.02 vs control @800. | proxy-or-full |
| afo-12 | Termination on first-cross not full horizon Termination Conditions | Primary DV is first-passage T to disjoint≤3.3821, matching classical 'stop when goal met' rather than fixed-horizon risk. | We still need final.pt/report continuity; premature process kill can break resume and writeup artifacts. | Log T at first disjoint≤3.3821; continue to 4768 only for final metrics; never redefine T as end-of-run. | proxy-or-full |
| afo-13 | Gradient descent as AdamW special case Gradient Descent | AdamW on embed/head is adaptive GD; the chapter justifies keeping first-order methods for non-matrix params while Muon handles 2D. | Pure GD on all weights loses badly to Muon/Adam on LMs (horizon adamw already weaker than Muon). | Do not switch full model to plain GD; keep hybrid Muon+AdamW grouping for any claim-class run. | proxy-or-full |
| afo-14 | Conjugate gradient for 1D heads Conjugate Gradient | Small embed/head parameter blocks could in theory be polished with multi-step CG near the end of training. | Hybrid CG+Muon is weird, multi-step CG is expensive per outer step, and no prior NoCap evidence supports it. | PARK unless late plateau with dedicated budget for an exotic head-opt research arm (not claim v2). | park |
| afo-15 | Heavy-ball momentum Momentum | Muon already carries a heavy-ball-style momentum buffer; β is a first-class book lever that can change effective step size. | Changing β without a seed-fixed proxy risks a silent regression against claim_repro/wsd board ranks. | Proxy 800: muon momentum ∈{0.9,0.95,0.98} vs seed-fixed control; promote only if ordinal win and tax≤2%. | proxy-or-full |
| afo-16 | Nesterov momentum Nesterov Momentum | Kit Muon nesterov=True matches the Nesterov chapter; look-ahead momentum is already part of the claim recipe. | Disabling Nesterov may hurt; full $10 A/B is wasteful without a proxy ordinal signal first. | Confirm kit nesterov flag on for claim_muon_wsd; only proxy-disable if we edit muon_opt for another reason. | proxy-or-full |
| afo-17 | AdaGrad for sparse token ids AdaGrad | Embedding rows see sparse token-id updates; AdaGrad historically helps sparse features and is a natural embed candidate. | We already use AdamW on embeds; AdaGrad often underperforms Adam on modern LMs and adds a third optim class. | Optional proxy: AdamW→AdaGrad on embed only @800; kill if val worse or step tax >2%. | proxy-or-full |
| afo-18 | RMSProp on head RMSProp | RMSProp gives second-moment adaptivity for lm_head without Adam's bias-correction machinery. | AdamW already covers head; a third optimizer path increases bug surface with no board evidence of gain. | PARK — keep AdamW on lm_head; do not introduce RMSProp for claim-class runs. | park |
| afo-19 | Adadelta Adadelta | Adadelta is a classical LR-free adaptive method that could remove one LR knob if it worked. | Rarely SOTA for LM pretrain; interaction with Muon hybrid is unknown and not worth a full claim risk. | PARK — document only; no GPU run unless a later promote board explicitly names Adadelta. | park |
| afo-20 | Adam (as AdamW cousin) Adam | Adam chapter directly justifies AdamW on embed/head groups while Muon owns matrix parameters. | Full-model Adam already lost ordinal to Muon on the 800-step board; do not re-open full-Adam claims. | Keep AdamW only on non-Muon groups; any full-Adam arm is research-only and must beat Muon @800 first. | proxy-or-full |
| afo-21 | Hypergradient descent on LR Hypergradient Descent | Online hypergradients could auto-tune muon_lr or adam_lr during a run without a separate grid search. | Unstable, hard to fair-clock, and extra compute; can silently change effective recipe mid-run. | Proxy-only research arm at ≤800 steps; never first published claim without a sealed fixed-LR protocol. | proxy-or-full |
| afo-22 | Newton's method on small blocks Newton's Method | True Newton on tiny subblocks is the classical second-order ideal; Newton-Muon literature is the practical matrix path. | Full Hessians for d12 blocks are still costly; vanilla Newton is the wrong port compared to Muon-style updates. | Prefer Newton-Muon lit ports over vanilla Newton; any new second-order code needs 800-step tax+val kill-gate. | proxy-or-full |
| afo-23 | Secant / quasi-Newton (L-BFGS) Secant / Quasi-Newton | L-BFGS can polish smooth finite-sum problems and is sometimes used for endgame fine-tuning of small nets. | Stochastic FineWeb minibatches break L-BFGS assumptions; history buffers cost memory and steps. | PARK for streaming FineWeb pretrain; do not mix L-BFGS into claim optimizers. | park |
| afo-24 | Levenberg–Marquardt Levenberg-Marquardt | LM is the classic damped Gauss-Newton method for nonlinear least squares — elegant when the loss is sum-of-squares. | Next-token CE is not a sum-of-squares residual structure; the algorithm class does not match our objective. | PARK — wrong loss structure for CE LM; no implementation effort. | park |
| afo-25 | Noisy descent as regularization Noisy Descent / Stochastic Methods | Mini-batch noise is already present via microbatch+accum=32; book frames noise as implicit regularizer for generalization. | Extra injected weight noise can hurt val CE and confounds schedule/optim comparisons. | Only if overfit gap grows large: Gaussian weight-noise proxy @800, kill if val worsens vs control. | proxy-or-full |
| afo-26 | Population / evolutionary methods Population methods (book later ch.) | Population search is appropriate for offline hparam search (lr, wd, warmdown) when each eval is a short proxy train. | Evolutionary weight updates on 124M params are absurdly expensive vs Muon/Adam on one GPU. | Use population methods only for offline hparam search of lr/wd on ≤400–800 step proxies, never for weight updates. | proxy-or-full |
| afo-27 | Constrained optimization / projections Constrained (book duality) | Projecting weights onto max-norm balls is a classical constrained-opt regularizer that can stabilize large updates. | Hard projections may fight Muon spectral geometry and add per-step tax without CE gain. | Proxy max-norm on Linear weights @800; kill if step tax >5% without val gain ≥0.01. | proxy-or-full |
| afo-28 | Dual ascent intuition for WD Duality themes | Weight decay as dual of a constrained-norm problem justifies WD on Adam groups even when Muon uses WD=0. | Duality does not prescribe the Muon WD=0 choice we use; wrong dual can over-regularize matrices. | Keep Muon WD=0; sweep Adam WD ∈{0.05,0.1,0.2} @800 vs claim_repro control. | proxy-or-full |
| afo-29 | KKT / early stop as complementarity Optimality conditions | Stopping when population risk is stationary is the KKT-flavored story for early stop; proxies use patience for budget. | Official T is first-cross threshold, not KKT stationarity; patience on noisy val can stop too early or late. | Use val patience only for proxy budget control; never redefine official T via KKT-style stationarity. | proxy-or-full |
| afo-30 | Multi-start seeds Global optimization multi-start | Multi-start is the classical hedge for nonconvex basins; a second seed bounds luck when speedup is in the 6–10% band. | Each extra seed doubles A100 hours; cannot multi-start every exploratory idea. | Pre-register: second seed only if |speedup|∈[6%,10%] vs F1_seal after first claim-class finish. | proxy-or-full |
| afo-31 | Coordinate descent Coordinate methods | Coordinate descent updates one coordinate/block at a time and can be optimal for separable problems. | On GPU it serializes work and destroys utilization; FineWeb CE is not coordinate-separable in practice. | PARK — do not run coordinate descent weight updates on d12 A100 training. | park |
| afo-32 | Block coordinate: attn then MLP Block methods | Alternating Muon steps on attention vs MLP matrices is a block-coordinate variant that might rebalance capacity. | Unusual desync of residual stream; high risk of regression and hard-to-debug training dynamics. | Proxy curiosity only @800 vs simultaneous Muon; not claim v2 unless large ordinal win + tax ok. | proxy-or-full |
| afo-33 | Stochastic average gradient (SAG/SAGA) Variance-reduced SGD | SAG/SAGA cut variance on finite-sum objectives by remembering per-example gradients — great for epoch-style data. | FineWeb is a streaming quasi-infinite corpus; finite-sum variance reduction assumptions do not hold. | PARK for FineWeb stream — variance-reduced methods need finite epochs we do not have. | park |
| afo-34 | Importance sampling tokens Stochastic methods / sampling | Upsampling hard (high-loss) tokens within FineWeb docs can focus capacity where CE is worst. | Biases the language model toward hard tokens and can break val calibration / official metric fairness. | Soft loss-weighted sampling within batch only @800 kill-gate; never hard-filter the legal FineWeb stream. | proxy-or-full |
| afo-35 | Curriculum on difficulty Applications / process | Ordering FineWeb by prior/typicality scores is a curriculum process idea; bands were tried and prior_band killed. | prior_band failed; aggressive curricula can starve the model of diverse early tokens and hurt final val. | Proxy: typical_last vs random order triage @800 ordinal only; kill if no gain vs random control. | proxy-or-full |
| afo-36 | Restarted momentum schedules Momentum + schedules | Restarting momentum every K steps (SGDR-like) can escape plateaus when heavy-ball velocity is stale. | Interacts badly with Muon Newton-Schulz state; restarts can inject instability right before first-cross. | Proxy restart every 500 steps @800; kill if train CE spikes or val worse vs no-restart control. | proxy-or-full |
| afo-37 | Warm restarts of LR (SGDR) First-order + schedules | Cosine warm restarts can escape late plateaus after a long stable phase — classical first-order schedule trick. | First-cross metric hates late restarts that temporarily raise val and push the crossing later. | If claim_muon_wsd plateaus late, try one restart cycle first at proxy 1600 before any full re-claim. | proxy-or-full |
| afo-38 | Polyak step size Step size rules | Polyak steps use function-value gaps and smoothness to pick theoretically justified step sizes. | Unknown smoothness L for deep CE on FineWeb makes Polyak step sizes impractical and unstable. | PARK — do not implement Polyak step sizes for d12 FineWeb pretrain. | park |
| afo-39 | Gradient clipping as trust Trust region / stability | Global grad-norm clip is the practical trust-region guard before Adam/Muon steps when explosions appear. | Muon bf16 path may already control norms; over-clipping can slow CE progress and confound optim comparisons. | Log max grad; if explosions, clip 1.0 on Adam groups only @proxy; measure tax before any claim change. | proxy-or-full |
| afo-40 | Separable optimizers per module Applications modular opt | We already separate Muon (2D matrices) from AdamW (1D/embed/head) — modular optim is a banked win. | Further splits (per-QKV orthogonalization) need code and can regress fused kernels. | If fused QKV issues appear, split orthogonalization per O1 note; otherwise keep current grouping. | proxy-or-full |
| afo-41 | Hyperparameter response surface Optimization process | Treat (muon_lr, adam_wd, warmdown_frac) as a design surface — classical DOE for process optimization. | Full 3D surfaces need many proxies; easy to overfit noise and winner-curse a lucky cell. | After live claim: 2³ factorial at 800 steps (≤8 cheap runs); promote only robust cells across seeds if close. | proxy-or-full |
| afo-42 | Robust optimization to batch noise Stochastic robustness | Larger accumulation reduces gradient noise (we use 32); robust-opt view says lower noise helps late training. | Larger accum can mean fewer optimizer steps per wall-second or different effective LR — recipe class change. | Do not increase accum without measuring t_step and val@800; hold tokens/step for claim-class fair clock. | proxy-or-full |
| afo-43 | Minimax / adversarial training Robust opt | Adversarial/minimax training can improve robustness, which is a real ML goal outside pure speedruns. | Extra inner-loop compute taxes wall-clock; not the NoCap objective (val CE first-cross speed). | PARK for NoCap speed — adversarial training is out of scope for T vs F1_seal. | park |
| afo-44 | Derivative-free CMA-ES on 3 hparams Population methods | CMA-ES can search (lr, wd, warmdown) offline when each evaluation is a short proxy train — classical DFO. | Each eval is still a train; without automation and very short proxies this burns A100 hours fast. | Only if automated ≤400-step proxies exist; cap total CMA budget to a fixed GPU-hour envelope. | proxy-or-full |
| afo-45 | Early stopping on sliding val Termination | Sliding-window val is smoother and useful for diagnostics of whether we are approaching 3.3821. | Cannot publish official T from sliding; rules require disjoint val first-cross. | Log sliding for forensics; never use sliding for claim T or published speedup %. | proxy-or-full |
| afo-46 | Stationarity of train CE Optimality | Detecting train-CE slope≈0 can trigger schedule phase switches (enter warmdown) without fixed step counts. | Noisy train CE makes slope detectors unreliable; hard to pre-register and fair-clock across runs. | Optional adaptive cool-start when train CE slope~0 for 200 steps — proxy only, not claim v2 default. | proxy-or-full |
| afo-47 | Mirror descent / Bregman Advanced first-order | Mirror descent / Bregman geometry is the theoretical cousin of matrix-aware updates that motivate Muon-like methods. | Heavy theory port; Muon already encodes a practical geometry for matrices — new mirror maps are high risk. | Narrative + lit link only unless implementing a concrete new mirror map with 800-step kill-gate. | proxy-or-full |
| afo-48 | Natural gradient Second-order / Fisher | Natural gradient / Fisher preconditioning is the classical geometry-aware second-order method for probabilistic models. | K-FAC memory and compute are heavy; Muon is the cheaper matrix path already winning ordinal boards. | PARK vs Muon unless a tax-bound K-FAC/Muon comparison is funded as research, not claim. | park |
| afo-49 | Hessian-free optimization Second-order | Hessian-free CG was historically used for deep nets as a second-order alternative to pure SGD. | Complex to implement correctly; outdated vs Muon for this d12 scale and one-GPU budget. | PARK — do not implement HF-CG for NoCap claim path. | park |
| afo-50 | Spectral norm regularization Constraints / regularization | Penalizing large spectral norms of weight matrices is a classical constraint-style regularizer for stability. | May undo Muon benefits that already control update geometry; extra power-iteration tax each step. | Proxy small spectral penalty @800; kill if val worse or t_step tax >3%. | proxy-or-full |
| afo-51 | Update clipping by RMS Trust / adaptive | Scaling Muon updates by historical RMS is an adaptive trust mechanism related to RMSProp-style normalizers. | Risk of double-adaptation on top of Muon/Adam; can shrink effective steps and slow first-cross. | Proxy only if instability observed; otherwise leave Muon update scale as kit default. | proxy-or-full |
| afo-52 | Asynchronous updates Stochastic systems | Async Hogwild-style updates are a multi-worker stochastic systems idea for scaling beyond one device. | NoCap fair-clock is one GPU; multi-worker async is outside the sealed single-A100 protocol. | ILLEGAL under one-GPU fair-clock — do not run multi-worker async training for claims. | illegal |
| afo-53 | Batch size scaling rules Stochastic methods practice | Linear LR scaling with batch size is the classical rule when increasing tokens/step on large-batch SGD. | We fix tokens/step for fair clock vs F1_seal; changing batch changes recipe class and comparability. | If batch changes, re-seal baseline or do not publish % vs F1_seal; any scale test is proxy-only first. | proxy-or-full |
Understanding Deep Learning (52 ideas)
PDF: Understanding Deep Learning.pdf
| ID | Idea | Why | Why not | Experiment | Status |
|---|---|---|---|---|---|
| udl-01 | Supervised CE learning frame Supervised learning / Loss | NoCap is supervised next-token prediction with CE — the exact supervised learning setup UDL uses for classification-style losses. | The supervised frame alone adds no new optimizer/schedule lever; it only constrains legal objectives. | Keep next-token CE; dual-report sliding val only as diagnostic, never as substitute for disjoint val. | proxy-or-full |
| udl-02 | Maximum likelihood = CE Loss: Maximum likelihood / Cross-entropy | UDL equates MLE with CE for categorical outcomes; official val CE is therefore the right proper scoring rule for the race. | No legal upside to replacing CE with non-proper losses; hinge/ranking would break leaderboard comparability. | Never replace CE with hinge/ranking/contrastive primary losses on claim-class runs. | proxy-or-full |
| udl-03 | Multiclass softmax head Multiclass classification loss | lm_head is multiclass softmax over vocab — UDL multiclass chapter matches our head exactly. | Historical loss-shape experiments were killed; reshaping softmax CE rarely helps and can invalidate metrics. | No loss_shape experiments without a strong pre-registered prior and 800-step kill-gate. | proxy-or-full |
| udl-04 | Gradient descent training loop Fitting models: GD | The basic GD training loop in UDL is the skeleton of train_gpt2_t4: forward, loss, backward, step. | Plain GD is insufficient vs Adam/Muon on d12; horizon already showed AdamW alone weaker than Muon. | Keep hybrid Muon+AdamW loop; do not strip adaptivity for a pure-GD ablation on full horizon. | proxy-or-full |
| udl-05 | SGD mini-batching Stochastic gradient descent | Microbatch + gradient accumulation is SGD with large effective batch — core UDL SGD chapter in our trainer. | Changing batch/accum breaks seal comparability to F1_seal tokens/step and can fake speed or quality. | Hold batch×accum fixed for claim-class runs; any change needs re-seal or proxy-only labeling. | proxy-or-full |
| udl-06 | Momentum in deep nets Momentum | UDL momentum section supports Muon’s momentum buffer as the right first-order acceleration for deep nets. | UDL textbook defaults are not our β; blind copy of book defaults can regress the board. | Proxy muon β ∈{0.9,0.95,0.98} @800 seed-fixed vs control (shared design with afo-15). | proxy-or-full |
| udl-07 | Adam for deep nets Adam | UDL presents Adam as the practical deep-net default — we use AdamW on embed/head for that reason. | Full-model Adam lost ordinal to Muon on our board; Adam is not the matrix-parameter winner. | AdamW embed/head only; refuse full-Adam claim unless it beats Muon @800 with tax ok. | proxy-or-full |
| udl-08 | Training hyperparameters as first-class Training algorithm hyperparameters | lr, wd, warmup, warmdown, iters are first-class UDL training hyperparameters — also our actual race variables. | Too many simultaneous hparam changes cause winner’s curse and uninterpretable claim diffs. | Pre-register ≤1–2 hparam changes per full claim; everything else stays at last sealed recipe. | proxy-or-full |
| udl-09 | Backprop correctness Backpropagation algorithm | Backprop correctness is prerequisite for any optimizer claim; broken backward = fake schedule/optim results. | Backprop correctness is not a speed lever by itself — it only protects validity of other levers. | Smoke + optional gradcheck on tiny model after every kit_override change; no GPU hours for 'better backprop'. | proxy-or-full |
| udl-10 | Parameter initialization Parameter initialization | Bad init kills trainability; d12 stock init is known-good and banked for seal comparability. | Retuning init mid-campaign confounds optimizer/schedule comparisons and can invalidate F1_seal relative %. | Only if train CE stuck high in first 200 steps: init-scale proxy @800; else leave stock init. | proxy-or-full |
| udl-11 | Sources of error decomposition Measuring performance: sources of error | UDL’s approx vs optimization vs estimation error frame helps narrate whether we need capacity, optim, or data. | We cannot cleanly measure the three terms on FineWeb with one val number; easy to overfit the narrative. | Writeup framing only; experimental decisions still use val@proxy and first-cross T, not unmeasured error terms. | proxy-or-full |
| udl-12 | Double descent awareness Double descent | Over-param d12 may sit past interpolation; longer training can still improve val after train CE looks good. | Double descent encourages over-training past first-cross, which hurts T even if final val improves. | Optimize T to first-cross ≤3.3821; do not chase final val for the speed claim after crossing. | proxy-or-full |
| udl-13 | Hyperparameter selection protocol Choosing hyperparameters | UDL’s hparam selection chapter argues for disciplined search — matches our proxy→promote→claim ladder. | Ad-hoc hparam thrash burns budget and produces unreproducible 'wins' that fail on full horizon. | Enforce: 800/1600 ordinal board before any full claim change; log rejected cells on the site. | proxy-or-full |
| udl-14 | Regularization chapter Regularization | Regularization (WD, early stop, dropout, data) is the UDL toolkit for generalization — we mainly use WD + data triage. | Stacking many regularizers can underfit and push first-cross later even if train looks stable. | Change at most one regularizer at a time on proxies; default stack stays WD+triage/prior as banked. | proxy-or-full |
| udl-15 | Explicit L2 / weight decay Regularization (WD) | Explicit L2/WD is the primary regularizer we can sweep on Adam groups without changing architecture. | Too much WD underfits; Muon group WD=0 is intentional — applying Adam WD logic to Muon can hurt. | Sweep Adam WD ∈{0.05,0.1,0.2} @800; keep Muon WD=0 unless a dedicated Muon-WD proxy wins. | proxy-or-full |
| udl-16 | Early stopping Regularization / performance | Early stopping is classical regularization; our first-cross T is a threshold stop, not patience-based ES. | Patience ES on noisy val can stop before true first-cross or stop too late; official metric is fixed threshold. | Use patience only to stop failed proxies; official T remains first disjoint≤3.3821, not patience ES. | proxy-or-full |
| udl-17 | Ensemble / model average Reducing error / ensembles | Ensembling or weight averaging can reduce val CE in UDL’s error-reduction chapter (related to EMA story). | EMA eval lag hurt Muon on horizon (4.234 vs 3.941); multi-model ensembles break one-run fair clock. | EMA stays OFF for claim_muon_wsd; multi-checkpoint ensemble is research-only, not claim T. | proxy-or-full |
| udl-18 | Dropout Regularization dropout | Dropout is a standard UDL regularizer that can reduce co-adaptation in residual blocks. | GPT-2 d12 recipes often keep residual dropout low/off for pretrain speed; adding it can raise train CE. | PARK unless overfit gap is large; then residual-dropout {0,0.05,0.1} @800 kill-gate only. | park |
| udl-19 | Label smoothing Loss variants | Label smoothing softens targets and can improve calibration in classification settings from UDL. | Changes the loss surface and can raise CE on hard one-hot next-token targets used by the official metric. | PARK for official CE race — label smoothing confounds val CE comparability. | park |
| udl-20 | Batch normalization Normalization (if covered) | BatchNorm is a major UDL normalization tool for CNNs; transformers use LayerNorm instead. | BN is a bad fit for variable-length LM batches and would be an architecture change vs GPT-2 d12 seal. | Do not swap LN→BN; if testing norm variants, only LN-family tweaks with architecture-risk labeled. | proxy-or-full |
| udl-21 | Layer normalization already present Deep nets / transformer practice | LayerNorm is already in GPT-2 blocks; UDL deep-net practice supports keeping LN for stable deep residual training. | Replacing LN without strong evidence risks instability and invalidates architecture-matched comparisons. | Keep stock LN placement; RMSNorm swap only as labeled architecture proxy @800 with kill-gate. | proxy-or-full |
| udl-22 | GELU activations Activations | GELU in FFN is GPT-2 stock and matches UDL activation discussion for modern nets. | Swapping activations (SiLU/ReLU) is an architecture change with weak expected gain at fixed d12. | Keep GELU; any activation swap is architecture-risk proxy only, not silent claim default. | proxy-or-full |
| udl-23 | Depth vs width Shallow vs deep | UDL depth-vs-width tradeoffs matter for capacity, but d12 depth/width are sealed for fair architecture class. | Changing depth/width breaks comparability to F1_seal and is effectively a different model class. | PARK architecture scaling — stay d12; capacity changes need a new seal class, not relative % to F1_seal. | park |
| udl-24 | Residual / shortcut connections Deep nets | Residual shortcuts make 12-layer training stable; removing them would break GPT-2 trainability. | Residuals are already banked — not a free lever unless we change residual scaling or dropout on them. | Keep residuals; optional residual-scale proxy only if instability appears (rare). | proxy-or-full |
| udl-25 | Universal approximation Shallow nets UAT | UAT says capacity exists in principle; it does not prescribe depth, width, or training time for first-cross T. | UAT is non-constructive for speedruns — knowing approximation is possible does not reduce wall-clock. | PARK as experiment — narrative only; no UAT-inspired architecture churn for claim. | park |
| udl-26 | Ethics chapter Ethics | UDL ethics chapter is important for deployed systems but orthogonal to NoCap wall-clock first-cross mechanics. | Ethics content does not produce a trainable optimizer/schedule/data lever under FineWeb CE rules. | PARK for experiments — no GPU run; keep human writeup honesty about dual-account/process ethics separately. | park |
| udl-27 | Unsupervised / SSL pretexts Unsupervised learning | SSL pretexts (masked LM variants, contrastive) are UDL unsupervised tools but change the pretrain objective class. | NoCap claim phase is CLM on FineWeb; non-CLM pretexts or non-FineWeb SSL data are out of rules. | ILLEGAL as claim path if it means non-FineWeb data or non-CE primary objective; stay CLM FineWeb. | illegal |
| udl-28 | RL for LM training Reinforcement learning intro | RLHF/RL fine-tuning appears in modern LM stacks but is a post-pretrain stage, not the FineWeb CE speedrun. | RL adds reward model complexity and is not scored by disjoint val CE first-cross. | PARK — no RL training for NoCap pretrain claim T. | park |
| udl-29 | Data augmentation for text Reducing error / data | Text augmentation (dropout-on-tokens, span noise) is a UDL data regularizer that stays inside FineWeb tokens. | Aggressive token noise can raise CE and slow first-cross; must not invent non-FineWeb documents. | Optional FineWeb-internal token-dropout proxy @800; kill if val worse; never mix external corpora. | proxy-or-full |
| udl-30 | Train/val split discipline Measuring performance | UDL insists on held-out measurement; official disjoint val is the only legal first-cross metric. | Training on val or leaking val into triage destroys the race and is a hard integrity failure. | Hard rule: never train on val; triage/prior must not use official val tokens; audit loaders if in doubt. | proxy-or-full |
| udl-31 | Learning curves Fitting models | Learning curves (train/val vs step) are the primary UDL diagnostic for under/overfitting and schedule health. | Curves alone do not move T; misreading noise as signal causes bad promote decisions. | Always plot train+disjoint val vs step for proxies and claims; promote only on pre-registered thresholds. | proxy-or-full |
| udl-32 | Learning rate as critical hparam Training hyperparameters | UDL flags LR as the most critical training hparam — matches our muon_lr/adam_lr sensitivity on boards. | Wrong LR search (too few probes, no seed control) produces lucky proxies that fail at full horizon. | LR changes always go through 800-step ordinal board before claim; no full-run LR lottery. | proxy-or-full |
| udl-33 | Batch size as hparam Training hyperparameters | Batch size is a UDL first-class hparam that trades noise vs step count and wall-clock. | Changing batch changes fair-clock comparability to F1_seal unless re-sealed. | Hold batch for claim-class; batch experiments are proxy-only with explicit non-comparable labeling. | proxy-or-full |
| udl-34 | Number of epochs vs steps Fitting models | UDL discusses epochs; we use fixed steps on a stream — steps are the right unit for first-cross T. | Epoch thinking encourages multipass over a finite set; FineWeb stream is quasi-infinite and step-based. | Keep step-based schedules (warmup/warmdown in steps); do not convert claim recipe to epoch language. | proxy-or-full |
| udl-35 | Generalization gap monitoring Sources of error | Monitoring train–val gap diagnoses overfit vs underfit as UDL recommends during fitting. | Gap alone does not decide promote; a small gap with high val still loses the race. | Log train–val gap each val event; use it to choose among WD/data levers, not to redefine T. | proxy-or-full |
| udl-36 | Overfitting diagnostics Regularization | Rising val while train falls is classic overfit; on FineWeb it may signal need for WD or less aggressive triage. | False overfit readings on noisy val can cause unnecessary WD increases that slow first-cross. | If val rises while train falls for ≥2 val events, WD-up proxy @800 before any full claim change. | proxy-or-full |
| udl-37 | Underfitting diagnostics Sources of error | High train and high val together mean underfit — need longer train, higher LR, or less WD, not more regularizers. | Mislabeling underfit as overfit leads to more WD and worse T. | If both train and val high early, prefer LR-up / less WD proxies over new regularizers. | proxy-or-full |
| udl-38 | Adam β2 / ε defaults Adam | Adam β2 and ε are secondary hparams UDL notes; they can matter for sparse embed rows and numerical stability. | Sweeping β2/ε without need is noise; defaults usually fine if training is stable. | Only if embed/head instability: proxy β2∈{0.95,0.999} or ε tweak @800; else leave defaults. | proxy-or-full |
| udl-39 | Gradient noise scale SGD | Gradient noise scale ideas relate batch size to effective noise; can guide whether accum is too large/small. | We rarely measure GNS cleanly; changing batch for GNS reasons risks fair-clock breaks. | Optional GNS logging research; do not change batch from GNS without t_step+val proxy package. | proxy-or-full |
| udl-40 | Warmup rationale Init + optim practice | Warmup protects early training from large updates at random init — critical with Muon spectral steps. | Too-long warmup delays progress toward first-cross; claim_muon_wsd already moves to ~10% warmup. | Proxy warmup_frac ∈{0.05,0.10,0.15} @1600 vs claim_repro; promote only with ordinal win. | proxy-or-full |
| udl-41 | Cool-down / anneal LR schedules in practice | Cool-down/anneal is how models settle to lower CE late; WSD warmdown is the live claim schedule lever. | Wrong anneal length was a historical miss mode (F2 WD too short); over-long anneal can waste late steps. | Warmdown length remains a primary board lever; tune via 1600 proxies before full re-claim. | proxy-or-full |
| udl-42 | Multiplicative LR schedules Training hyperparameters | Multiplicative schedules (cosine, linear decay) are the practical UDL schedule class we implement as step factors. | Exotic piecewise schedules without theory can overfit proxy noise. | Prefer simple WSD/cosine pieces; any multi-piece schedule needs 1600 ordinal vs WSD control. | proxy-or-full |
| udl-43 | Clip gradients for stability Fitting models practical | Grad clipping is standard UDL practical advice for deep training stability under large losses. | Over-clipping slows learning; under-clipping risks rare spikes that ruin a long claim run. | Log grad norms; enable clip on Adam groups only if spikes observed; measure tax @proxy first. | proxy-or-full |
| udl-44 | Mixed precision Practical training | Mixed precision (bf16/fp16) is practical UDL systems advice that enables d12 throughput on A100. | Unstable mixed precision can NaN a multi-hour claim; precision changes need smoke+proxy before full. | Keep banked bf16 path; any precision change requires smoke + 800-step stability proxy. | proxy-or-full |
| udl-45 | Compile / graph optimization Systems adjacent in UDL practice | torch.compile / graph opts can reduce t_step without changing the mathematical recipe — pure wall-clock lever. | Compile can fail or regress on custom Muon ops; must measure step_avg carefully under torch 2.13 pin. | Proxy compile on/off measuring step_avg and val@800; promote only if tax↓ and val not worse. | proxy-or-full |
| udl-46 | Reproducibility / seeds Experimental practice | Fixed seeds make ordinal boards interpretable — UDL experimental practice applied to our proxy ladder. | Over-claiming single-seed wins in the 6–10% band is statistically fragile. | Seed-fixed proxies for ordinal; second seed only in pre-registered close-call band for claims. | proxy-or-full |
| udl-47 | Model selection vs final test Choosing hyperparameters | UDL separates model selection from final test; we must not tune on official val then report the same number as pure held-out. | Proxy selection on too-short horizons can mis-rank methods that only win late. | Use proxies for ranking; full claim is the only publishable T; never 'peek' official val for hparam thrash. | proxy-or-full |
| udl-48 | Shortcut / residual learning Deep nets | Shortcut learning dynamics explain why residual GPT blocks train; residual scale is a subtle optional lever. | Unmotivated residual-scale changes are architecture churn with low expected upside at fixed d12. | Keep stock residual path; only proxy residual scaling if gradient health metrics look pathological. | proxy-or-full |
| udl-49 | Width / channels Deep nets | Width scaling is a major capacity lever in UDL, but d12 width is part of the sealed model class. | Wider models change FLOPs/step and invalidate F1_seal relative wall-clock comparisons. | PARK width changes for claim % vs F1_seal; would need a new sealed baseline class. | park |
| udl-50 | Multivariate outputs Loss multiclass | Next-token prediction is a huge multiclass multivariate output problem — UDL multiclass loss applies directly. | Treating tokens as independent when they are not is already handled by autoregressive factorization; no free fix. | Keep autoregressive CE factorization; do not invent non-AR multivariate heads for claim. | proxy-or-full |
| udl-51 | Toy problems for debugging Toy example / backprop | UDL toy examples (small nets) are the right way to debug optim/kit changes before A100 hours. | Toy wins do not transfer to FineWeb d12; over-trusting toy CE is a common failure mode. | Mandatory: tiny CPU/GPU smoke after kit_override; never promote from toy alone to full claim. | proxy-or-full |
| udl-52 | Code as specification Example training code | UDL training code examples reinforce that the trainer script is the true specification of the recipe. | Docs/site can drift from kit_override; code drift causes unreproducible claims. | Treat train_gpt2_t4.py + modal_nocap.py as source of truth; site must quote actual flags for claims. | proxy-or-full |
Build a Large Language Model (From Scratch) (52 ideas)
PDF: Build-a-large-language-models.pdf
| ID | Idea | Why | Why not | Experiment | Status |
|---|---|---|---|---|---|
| llm-01 | GPT architecture match 1.6 GPT architecture / 4.x GPT model | Our d12 is GPT-2-class; the book’s GPT chapters validate block design (attn+MLP+LN+residual) we already seal. | Expanding to GPT-2-medium/large changes FLOPs/step and needs a new seal class — not a free relative % to F1_seal. | PARK architecture upsizing — keep d12; document match only; no size-up claim without new sealed baseline. | park |
| llm-02 | Stages of building LLMs 1.3 Stages of building and using LLMs | Book stages (data→pretrain→optional FT) clarify that our race is only the pretrain stage on FineWeb. | Jumping into fine-tune stages does not improve FineWeb val CE first-cross and can waste budget. | Stay in CLM pretrain stage for all claim-class runs; FT stages are out of scope for T. | proxy-or-full |
| llm-03 | Large datasets principle 1.5 Utilizing large datasets | Book argues scale of data matters; FineWeb streaming + triage/prior is our legal large-data path. | Cannot add non-FineWeb corpora; 'more data' outside FineWeb is illegal for claims. | Improve FineWeb use via triage/prior/packing only; never mix books/C4/etc. as train data. | proxy-or-full |
| llm-04 | Tokenization BPE 2.5 Byte pair encoding | BPE tokenization is fixed for GPT-2 d12 comparability; book explains why BPE is the default LM tokenize path. | Retokenizing FineWeb with a new tokenizer breaks val comparability and seals. | Keep stock GPT-2 tokenizer; no retokenize experiments for claim-class numbers. | proxy-or-full |
| llm-05 | Sliding window sampling 2.6 Data sampling with a sliding window | Sliding-window sampling of token streams is how we form sequences; packing efficiency sits here. | Naive sliding with huge overlap can waste tokens or leak near-duplicates into batches. | Audit sampler overlap/packing; proxy alternate packing stride @800 if packing bugs suspected. | proxy-or-full |
| llm-06 | Positional encodings 2.8 Encoding word positions | Positional encodings (learned absolute in GPT-2) are required for order; book covers the design space. | Swapping to RoPE/ALiBi is an architecture change with nontrivial risk and seal impact. | PARK positional swap for claim % vs F1_seal; RoPE only as labeled architecture research proxy. | park |
| llm-07 | Self-attention 3.3–3.4 Self-attention | Self-attention is the core sequence mixer; correctness and efficiency of attention dominate t_step. | Replacing attention with linear alternatives is architecture research, not a free drop-in for sealed d12. | Keep stock attention; optimize implementation (flash/SDPA) only with step_avg+val proxy package. | proxy-or-full |
| llm-08 | Causal mask 3.5 Causal attention | Causal masking is mandatory for CLM; a mask bug would train a bidirectional model and invalidate CE. | Causal mask is already correct in stock GPT-2 — not a new performance lever if correct. | Unit-test causal mask after any attention kernel change; no 'better mask' claim experiments. | proxy-or-full |
| llm-09 | Multi-head attention 3.6 Multi-head attention | Multi-head attention is stock GPT-2; head count is part of sealed architecture. | Changing n_head changes compute pattern and comparability; low expected free lunch at fixed width. | PARK head-count changes for claim vs F1_seal; architecture research only with new seal class. | park |
| llm-10 | LayerNorm 4.2 Layer normalization | LayerNorm placement (pre/post) matters for training stability; stock GPT-2 LN is banked. | LN↔RMSNorm or pre/post flips are architecture edits that can regress without long proxies. | Keep stock LN; RMSNorm/pre-post only as labeled 800-step architecture proxies with kill-gate. | proxy-or-full |
| llm-11 | GELU FFN 4.3 GELU feed forward | GELU FFN is stock GPT-2 MLP; book’s FFN chapter matches our block compute bottleneck. | Swapping activation or FFN expansion ratio changes FLOPs and architecture class. | Keep GELU+stock expansion; FFN-ratio experiments are architecture-risk, not silent defaults. | proxy-or-full |
| llm-12 | Residual shortcuts 4.4 Shortcut connections | Residual shortcuts enable deep GPT training; book stresses they are not optional glue. | Residuals already present — no free lever unless residual dropout/scale is intentionally changed. | PARK residual removal; optional residual-dropout only if overfit diagnostics demand it (see UDL). | park |
| llm-13 | Transformer block structure 4.5 Connecting attention and linear layers | Block order (LN-attn-LN-MLP) is the sealed GPT-2 structure; book shows why this composition works. | Reordering block internals is high-risk architecture churn with weak speedrun evidence. | Keep stock block wiring; any rewiring is research proxy only with explicit architecture label. | proxy-or-full |
| llm-14 | Pretrain on unlabeled data 5 Pretraining on unlabeled data | Chapter 5 is exactly our phase: unsupervised CLM pretrain on large text (FineWeb) before any FT. | Calling it 'unlabeled' does not unlock new corpora; FineWeb remains the only legal train stream. | Stay CLM pretrain on FineWeb; refuse any non-FineWeb 'unlabeled' mix for claim runs. | proxy-or-full |
| llm-15 | Evaluating generative models 5.1 Evaluating generative text models | Book evaluation includes CE/perplexity and generation quality; our official metric is val CE only. | Generation samples are not the race metric; optimizing samples can distract from first-cross T. | Log CE rigorously; generation samples optional for forensics, never for promote decisions. | proxy-or-full |
| llm-16 | Training an LLM loop 5.2 Training an LLM | The book’s training loop (batch, loss, backward, optim, log) is isomorphic to train_gpt2_t4. | Loop structure alone is not a lever; bugs in logging/step accounting can fake T though. | Audit train_time_ms accounting and val pause rules after trainer edits; smoke before claim. | proxy-or-full |
| llm-17 | Decoding strategies 5.3 Decoding strategies | Temperature/top-p decoding matters for chat demos, not for teacher-forced val CE first-cross. | Decoding does not change training T; spending time on decode is out of scope for the speedrun. | PARK decoding experiments for claim T — inference-only, no training GPU budget. | park |
| llm-18 | Checkpoint save/load 5.4 Loading and saving weights | Checkpointing enables preempt resume (claim_muon_par resumed @3584) and crash recovery on Modal. | Corrupt or incomplete checkpoints waste hours; over-frequent saves tax wall-clock slightly. | Keep save_every insurance before warmdown; verify resume loads optim+model state, not weights only. | proxy-or-full |
| llm-19 | Loading foreign pretrained weights 5.5 Loading pretrained weights from OpenAI | Book shows loading OpenAI GPT-2 weights — useful for demos, illegal for a from-scratch FineWeb claim. | Starting from OpenAI weights is not a NoCap from-scratch pretrain and invalidates the race. | ILLEGAL for claim — never load foreign pretrained weights into a scored FineWeb pretrain run. | illegal |
| llm-20 | Fine-tuning classification 6 Fine-tuning for classification | Classification FT is a book stage after pretrain; it does not reduce FineWeb val CE first-cross. | FT stages use different objectives/data and burn budget without helping the official pretrain metric. | PARK classification FT for NoCap T — out of pretrain scope. | park |
| llm-21 | Instruction / preference FT Later fine-tune chapters | Instruction/preference fine-tuning is post-pretrain productization, not the FineWeb CE race. | Preference data and RLHF-like loops are non-FineWeb and non-CE-primary for our seal. | PARK instruction/preference FT for claim T. | park |
| llm-22 | Learning rate warmup in pretrain 5.2 Training practice | Book pretrain practice includes warmup; claim_muon_wsd moves warmup toward ~10% of steps as a live lever. | Too little warmup risks early instability with Muon; too much delays CE descent. | Proxy warmup_frac ∈{0.05,0.10,0.15} @1600 vs control; promote with ordinal win only. | proxy-or-full |
| llm-23 | Weight decay in pretrain 5.2 Training | Book pretrain recipes use weight decay; we apply WD on Adam groups and WD=0 on Muon matrices. | Blind book WD on all params can over-regularize Muon geometry and hurt val. | Keep Muon WD=0; Adam WD sweep @800 as with AFO/UDL; document split WD in claim writeup. | proxy-or-full |
| llm-24 | Cosine LR decay Training schedules (common in LLM books) | Cosine decay is the common LLM-book schedule; WSD is a related piecewise alternative winning ordinal so far. | Cosine vs WSD must be compared fairly; mid-run schedule swaps invalidate comparisons. | Proxy cosine vs WSD @1600 seed-fixed; full claim only for the ordinal winner. | proxy-or-full |
| llm-25 | Gradient accumulation Training LLM practical | Grad accumulation simulates large batches under memory limits — we already use accum for effective batch. | Changing accum changes noise and possibly steps/sec; fair-clock requires careful measurement. | Hold accum for claim-class; accum proxies must report t_step and val@800 package. | proxy-or-full |
| llm-26 | Sequence length 1024 Context / training | Context length 1024 is part of the sealed GPT-2-small training setup for fair FLOPs/step. | Longer context raises compute per step and changes the data mixture geometry. | PARK seq-len changes for claim % vs F1_seal; would need re-seal if ever pursued. | park |
| llm-27 | Batch size tokens/step Training | Tokens/step is the fair-clock unit; book batch settings map to our microbatch×accum×seq design. | Silent tokens/step changes make T incomparable to F1_seal. | Pin tokens/step for claim-class; any change is either re-seal or non-comparable research. | proxy-or-full |
| llm-28 | Eval interval Evaluating during training | Eval interval trades diagnostic resolution vs val pause overhead (clock pauses during val). | Too-frequent val taxes wall-clock; too-rare val can miss the true first-cross step granularity. | Keep banked val_loss_every for claims; proxy denser val only for research diagnostics, not published T hacks. | proxy-or-full |
| llm-29 | Train/val leakage discipline Data chapters | Book data chapters require clean splits; leakage into train from official val is an integrity kill. | Triage/prior pipelines can accidentally touch val if path configs are wrong. | Audit that triage_full/prior_full inputs exclude official val; fail closed if uncertain. | proxy-or-full |
| llm-30 | Data cleaning Working with text data | Book data cleaning maps to FineWeb triage filters — legal because it stays inside FineWeb documents. | Over-aggressive cleaning reduces diversity and can hurt val; under-cleaning wastes steps on junk. | Triage threshold proxies @800; kill if val worse than unfiltered control by >0.02. | proxy-or-full |
| llm-31 | Document packing Sampling / efficiency | Packing multiple docs into a sequence improves token efficiency — book sampling efficiency theme. | Bad packing (no doc boundary awareness) can create unnatural transitions and hurt CE. | Proxy packing strategies @800 ordinal; keep best packing for claim-class data path. | proxy-or-full |
| llm-32 | BOS/EOS handling Special tokens | Special token handling affects document boundaries in packed streams; book covers BOS/EOS discipline. | Wrong special-token policy can silently change effective data and break comparability. | Freeze BOS/EOS policy to stock for claim-class; any change needs proxy + explicit writeup note. | proxy-or-full |
| llm-33 | Embedding tying Architecture GPT | Weight tying between embed and lm_head is a common GPT efficiency/architecture choice. | Untying or retying mid-campaign changes parameter count and optimization dynamics. | Keep stock tying policy; untie/tie experiment only as labeled architecture proxy @800. | proxy-or-full |
| llm-34 | Dropout in residual GPT coding chapters | Residual dropout appears in many GPT coding tutorials; can regularize deep residual streams. | Extra dropout often hurts pure pretrain CE at this scale and slows first-cross. | Default stock dropout; only raise if overfit gap large, via 800-step kill-gate. | proxy-or-full |
| llm-35 | Attention implementation efficiency Attention coding | Efficient attention kernels (SDPA/flash) cut t_step without changing math — pure systems lever. | Kernel mismatches can change numerics slightly; must verify val parity and step_avg on torch 2.13. | Proxy SDPA/flash on/off: require step_avg↓ and val not worse @800 before claim default change. | proxy-or-full |
| llm-36 | KV cache Inference | KV cache is an inference optimization for autoregressive decode, not for teacher-forced training steps. | Training does not use decode KV cache; implementing it does not reduce train T. | PARK for training claim — inference-only topic. | park |
| llm-37 | Mixed precision training Practical pretrain | Book practical pretrain uses mixed precision; our bf16 path is banked for A100 throughput. | Precision bugs cause NaNs that waste multi-hour claims; precision is safety-critical. | Keep bf16; smoke after any autocast/Muon dtype edit; abort claim on first NaN policy. | proxy-or-full |
| llm-38 | Gradient checkpointing Memory | Gradient checkpointing trades compute for memory — useful if we were memory-bound, maybe not speed-bound. | On A100-40 d12 we are usually not activation-memory bound; checkpointing often raises t_step. | PARK unless a future architecture change OOMs; then measure tax carefully. | park |
| llm-39 | Distributed data parallel Scaling (book context) | DDP multi-GPU scaling is how books discuss larger pretrains — outside our one-GPU fair-clock rule. | Multi-GPU is not allowed for fair T comparison under NoCap one-GPU protocol. | ILLEGAL multi-GPU DDP for claim T — single A100 only. | illegal |
| llm-40 | Gradient clipping in pretrain scripts Training LLM | Book pretrain scripts often clip grads; we use clipping as a stability guard on Adam groups if needed. | Always-on aggressive clip can slow Muon/Adam progress without benefit on stable runs. | Clip only on observed spikes; proxy measure tax; default leave unclipped if logs are clean. | proxy-or-full |
| llm-41 | Seed control Reproducibility | Book reproducibility advice maps to our seed=1337 claim discipline and seed-fixed ordinal boards. | Single-seed overconfidence remains a risk in the close speedup band. | Fix seed for claim-class; second seed only under pre-registered close-call policy. | proxy-or-full |
| llm-42 | Logging metrics Evaluation | Logging train CE, val CE, step time, and LR is mandatory for debugging schedules and optimizers. | Missing logs make it impossible to distinguish tax vs quality failures (claim_muon_par miss forensics). | Require complete metric logs for every proxy and claim; site tables must quote real numbers. | proxy-or-full |
| llm-43 | Model size GPT-2 small Building LLM | GPT-2 small (d12) is the sealed model size class matching our F1_seal denominator. | Larger models are a different competition class for wall-clock and quality. | Stay GPT-2-small d12 for all relative % vs F1_seal. | proxy-or-full |
| llm-44 | Context packing efficiency Data sampling | Higher packing efficiency increases useful tokens per step without changing model architecture. | Over-packing with poor boundaries can hurt CE; efficiency ≠ free quality. | Measure tokens_kept and packing stats; proxy packing variants @800 with val kill-gate. | proxy-or-full |
| llm-45 | Vocabulary size fixed Token IDs | Vocab size is fixed by GPT-2 tokenizer; book treats vocab as part of model interface. | Changing vocab requires retokenization and breaks seals. | PARK vocab changes — keep GPT-2 vocab for claim-class. | park |
| llm-46 | Pretrain then stop at target CE Training loop | Stop-at-target is exactly first-cross T philosophy: pretrain until val CE ≤3.3821, minimize wall-clock. | Continuing far past target for nicer final.pt is fine for artifacts but is not the speed metric. | Log first-cross T as primary DV; continue to 4768 only for final.pt continuity if needed. | proxy-or-full |
| llm-47 | Don't use chat templates FT chapters | Chat templates are fine-tune/inference formatting; they do not belong in FineWeb CLM pretrain streams. | Injecting chat templates into pretrain would distort FineWeb token statistics. | PARK chat templates for pretrain claim — keep raw FineWeb CLM formatting. | park |
| llm-48 | Dataset streaming Large datasets | Streaming datasets match FineWeb scale without loading all shards into RAM — book large-data practice. | Streamer bugs (shuffle, epoch reset, duplication) can silently corrupt training distribution. | Audit streamer for duplication and shuffle policy; proxy if streamer code changes. | proxy-or-full |
| llm-49 | Avoid data duplication bug Data loading | Accidental duplicate shards/docs waste steps and can overfit repeated docs — common loader bug class. | Duplication is hard to see without counters; can look like 'good train CE' while val stalls. | Add/verify unique-doc counters in triage/stream; fix before any claim if duplication detected. | proxy-or-full |
| llm-50 | Activation checkpoint off by default Memory/speed | Leaving activation checkpointing off avoids unnecessary recompute tax when memory allows (A100-40 d12). | Turning it on 'just in case' often slows t_step with no quality gain. | Default checkpointing OFF; enable only on OOM with measured tax acceptance. | proxy-or-full |
| llm-51 | torch.compile for train Modern stacks | torch.compile can lower step_avg on torch 2.13 without recipe math changes — attractive systems lever. | Compile interaction with custom Muon ops may fail or slow first iterations (compile overhead). | Proxy compile on/off over ≥200 steady steps for step_avg + val@800; promote only if net T benefit. | proxy-or-full |
| llm-52 | Save optimizer state for resume Checkpointing | Resuming without optim state restarts Adam/Muon moments and can destroy late-training progress after preempt. | Larger checkpoints cost storage/IO but are required for correct preempt resume on Modal. | Always save optim+model (+RNG if available); verify resume parity on a short proxy after trainer edits. | proxy-or-full |
Probabilistic Machine Learning: An Introduction (Murphy) (55 ideas)
PDF: book1 - Probabilistic Machine Learning - An Introduction.pdf
| ID | Idea | Why | Why not | Experiment | Status |
|---|---|---|---|---|---|
| mur-01 | ML as probabilistic prediction 1 Introduction | Murphy frames ML as predicting p(y|x); an LM is p(token|context) — our CE objective is exactly that probabilistic prediction. | The probabilistic frame alone does not pick optimizer, schedule, or data filters; it only justifies CE. | Keep probabilistic CE objective; refuse non-probabilistic primary losses for claim-class runs. | proxy-or-full |
| mur-02 | Supervised learning 1.2 Supervised learning | Next-token prediction is supervised learning with labels = future tokens from FineWeb — Murphy supervised template. | Supervised framing does not authorize extra labeled datasets outside FineWeb. | Use FineWeb self-supervision only; no external labeled corpora for claim pretrain. | proxy-or-full |
| mur-03 | Data chapter discipline 1.5 Data | Murphy’s data chapter stresses quality, quantity, and leakage — maps to triage/prior and val isolation. | Data discipline is process, not a single magic filter; over-filtering can reduce coverage. | Keep triage/prior as legal FineWeb filters; proxy thresholds; audit val isolation continuously. | proxy-or-full |
| mur-04 | Univariate probability models 2 Probability: Univariate | Token-level categorical distributions are univariate categorical models per position given context. | Univariate theory does not by itself yield a better architecture or optim for d12. | Use as teaching frame for CE/softmax; no separate univariate-model experiment on claim path. | proxy-or-full |
| mur-05 | Multivariate probability 3 Probability: Multivariate | Sequences are multivariate objects factorized autoregressively — Murphy multivariate + chain rule story. | Full joint models without AR factorization are intractable at vocab scale; not a practical alternative. | Keep AR factorization; do not attempt non-factorized joint sequence models for claim. | proxy-or-full |
| mur-06 | Statistics / estimation 4 Statistics | Training is statistical estimation of model parameters from FineWeb samples; sample size ≈ tokens seen. | Estimation theory does not free us from wall-clock — more tokens still cost T. | Prefer higher-quality FineWeb tokens (triage) over raw token count when budget-limited; proxy quality filters. | proxy-or-full |
| mur-07 | MAP estimation 4 Statistics / later MAP | MAP with Gaussian prior ≈ weight decay — Murphy connects Bayesian priors to L2/WD used on Adam groups. | Wrong prior strength (WD) under/overfits; MAP story does not set Muon WD automatically. | Interpret Adam WD as MAP prior strength; sweep WD @800; keep Muon WD=0 unless evidence otherwise. | proxy-or-full |
| mur-08 | Decision theory / Bayes risk 5 Decision Theory | Official metric is a decision rule: stop when estimated risk (val CE) ≤3.3821 — decision-theoretic stop. | Alternate decision losses (0-1, hinge) are not the race metric and would mis-train relative to CE. | PARK alternate decision losses for training; CE remains the decision criterion for T. | park |
| mur-09 | Information theory chapter 6 Information Theory | CE and KL are information-theoretic; Murphy’s IT chapter is the language of our val metric and train loss. | IT identities do not by themselves reduce T; they prevent metric confusion in writeups. | Use CE/KL language correctly in writeups; do not invent IT-based exotic losses without proxy evidence. | proxy-or-full |
| mur-10 | KL as training gap 6 Information Theory | Train CE − H(data) relates to KL(data||model); reducing CE reduces KL to the token empirical distribution. | We cannot compute true entropy of FineWeb cleanly; KL gap is interpretive, not a new optim knob. | Track train/val CE only operationally; use KL narrative in writeups, not as a separate train objective. | proxy-or-full |
| mur-11 | Cross-entropy decomposition 6 Information Theory | CE decomposes into entropy + KL; improving model means reducing KL term given data entropy. | Decomposition does not say whether optim, data, or capacity is the bottleneck without more probes. | Use decomposition as diagnostic narrative alongside learning curves, not as a standalone experiment. | proxy-or-full |
| mur-12 | Linear algebra for ML 7 Linear Algebra | Muon orthogonalization and spectral ideas sit on linear algebra (SVD/orthogonality) Murphy reviews. | LA background alone is not a lever; wrong spectral ops can tax t_step. | Any new matrix op in muon_opt needs 800-step tax+val kill-gate before claim default. | proxy-or-full |
| mur-13 | Eigendecomposition / SVD intuition 7 Linear Algebra | SVD/eigen intuition motivates spectral normalization and Muon-like matrix updates. | Full SVD each step is too expensive; practical methods use cheap orthogonalization iterations. | Prefer cheap Newton-Schulz-style iterations already in Muon over exact SVD per step. | proxy-or-full |
| mur-14 | Optimization chapter 8 Optimization | Murphy optim chapter covers GD/SGD/Adam — the menu we already narrowed to Muon+AdamW hybrid. | Re-opening full optim zoo without ordinal boards wastes A100 hours (horizon already ranked arms). | New optimizers must beat px_muon_wsd/claim_repro @800–1600 before full claim consideration. | proxy-or-full |
| mur-15 | SGD noise as implicit regularizer 8 Optimization | SGD noise can act as implicit regularizer — justifies not over-enlarging batch just to reduce noise. | Too much noise (tiny batch) can also slow convergence; noise is not free lunch. | Hold tokens/step; only change noise via batch/accum with full t_step+val proxy package. | proxy-or-full |
| mur-16 | Convex vs nonconvex 8 Optimization | Deep CE is nonconvex; multi-start and schedule design matter more than convex rates. | Convex theory can mislead (exact line search, global optima) if applied naively to d12. | Use nonconvex-aware practice: proxies, seeds, schedules; avoid convex-only algorithms (L-BFGS full). | proxy-or-full |
| mur-17 | Logistic regression → softmax LM 10 Logistic Regression | Softmax LM is multiclass logistic regression with a deep feature map — Murphy logistic chapter scales up. | Does not justify switching to linear models; linear softmax cannot hit 3.3821 on FineWeb. | Keep deep GPT features; use logistic/softmax theory only to justify CE gradients on lm_head. | proxy-or-full |
| mur-18 | Linear regression less relevant 11 Linear Regression | Squared loss linear regression is not the next-token objective; chapter is mostly out of domain for CE LMs. | Using MSE on logits would change the metric class and break official CE comparison. | PARK linear regression / MSE-on-logits for claim training. | park |
| mur-19 | GLMs 12 GLM | Softmax CE is a GLM with categorical likelihood and deep features — GLM view explains link functions. | GLM theory does not provide a new d12 training lever beyond CE+softmax we already use. | PARK GLM-family loss swaps; keep categorical CE link for official metric alignment. | park |
| mur-20 | Neural nets tabular 13 NN tabular | Tabular NN chapters are for feature tables, not token sequences; wrong data modality for FineWeb LM. | Tabular methods do not transfer to GPT pretrain architecture or data pipeline. | PARK tabular NN methods for NoCap LM pretrain. | park |
| mur-21 | NN for images 14 NN images | Conv nets / vision chapters are modality-specific; we train language, not images. | Vision augmentations and CNNs do not apply to FineWeb token streams. | PARK vision methods — wrong modality for this race. | park |
| mur-22 | NN for sequences 15 Neural Networks for Sequences | Sequence NN chapter is the direct ancestor of modern LM stacks; validates attention/RNN history for our GPT. | Reverting to RNN/LSTM from transformers would be a large architecture regression for d12 CE. | Stay transformer GPT; use sequence chapter as historical context, not RNN reintroduction. | proxy-or-full |
| mur-23 | RNN vanishing gradients lesson 15 Sequences | Vanishing gradients in RNNs historically motivated better architectures and residual/LN practice. | We already use transformers; re-learning RNN vanishing does not create a new Muon/schedule lever. | Keep residual+LN transformer; no RNN claim experiments. | proxy-or-full |
| mur-24 | Attention as sequence model 15 Sequences (modern) | Attention is the sequence model we run; Murphy-style sequence chapters justify attention over fixed windows. | Attention already stock; only implementation efficiency remains as a practical lever. | Optimize attention kernels with step_avg proxies; do not replace attention math lightly. | proxy-or-full |
| mur-25 | Exemplar methods / kNN 16 Exemplar | kNN/exemplar methods are non-parametric alternatives for prediction, not neural pretrain recipes. | Cannot replace d12 GPT with kNN over FineWeb at claim scale; memory and CE quality fail. | PARK exemplar/kNN as primary model for NoCap claim. | park |
| mur-26 | Kernel methods 17 Kernel Methods | Kernel machines are classical nonlinear methods; not competitive for large-vocab sequence CE pretrain. | Kernel methods do not map onto GPU transformer training stack we seal. | PARK kernel machines for claim pretrain. | park |
| mur-27 | Trees / forests / boosting 18 Trees Forests Boosting | Tree/forest/boosting chapters are strong for tabular tasks, not token-level LM pretrain. | No practical path to 3.3821 FineWeb CE with GBDT at this setup. | PARK trees/forests/boosting as primary learners for NoCap LM. | park |
| mur-28 | Bagging / ensembles 18 Bagging | Bagging/ensembles reduce variance — related to multi-seed and weight averaging discussions. | True bagging multiplies train cost; not fair for single-run T vs F1_seal. | Keep single-run claim policy; do not bag multiple full trains for T; optional offline weight-average research only after final.pt. | proxy-or-full |
| mur-29 | Boosting residuals 18 Boosting | Boosting fits residuals iteratively; multi-stage residual models are not our single-network pretrain recipe. | Boosting stages multiply wall-clock and complicate fair-clock claims. | PARK boosting stages for claim T — single network pretrain only. | park |
| mur-30 | Few labeled examples 19 Learning with Fewer Labels | Few-label methods matter when labels are scarce; FineWeb CLM has abundant self-labels (next tokens). | Few-label techniques can distract into semi-supervised setups that need non-FineWeb labels. | Stay CLM next-token labels on FineWeb; refuse few-label FT stages for claim T; document abundance-of-labels setting only. | proxy-or-full |
| mur-31 | Dimensionality reduction 20 Dimensionality Reduction | PCA/UMAP-style reduction is for analysis/visualization of embeddings, not for training the LM itself. | Reducing token embedding dim mid-campaign changes architecture and capacity. | PARK PCA-style dim reduction as a training method; optional offline embedding analysis only. | park |
| mur-32 | Clustering 21 Clustering | Clustering FineWeb docs could drive curricula or triage bands (group similar docs). | Clustering quality is noisy; bad clusters create harmful curricula (prior_band already failed once). | Only soft clustering curricula as 800-step ordinal proxies; kill if no gain vs random order. | proxy-or-full |
| mur-33 | Recommender systems 22 Recommenders | Recommender chapters are a different prediction task (users×items), not next-token CE on text. | Recsys losses/metrics do not transfer to FineWeb LM claim metric. | PARK recommender methods for NoCap LM pretrain. | park |
| mur-34 | Graph embeddings 23 Graph Embeddings | Graph embedding methods assume graph structure we do not have on raw FineWeb streams. | Building a doc graph is extra pipeline complexity without proven T benefit. | PARK graph embeddings for claim path unless a future board funds a graph-triage research arm. | park |
| mur-35 | Bayesian priors on weights Probability + NN | Gaussian priors on weights recover L2/WD — Bayesian view of Adam WD we already use. | Full Bayesian neural nets (MCMC/VI) are far too expensive for d12 pretrain wall-clock. | Keep MAP/WD interpretation; no MCMC/VI Bayesian NN training for claim T. | proxy-or-full |
| mur-36 | Empirical Bayes / prior strength Statistics | Empirical Bayes suggests tuning prior strength (WD) from data — i.e., WD sweep from proxies. | EB can overfit the proxy horizon if WD is tuned too aggressively to 800-step noise. | WD chosen on 800/1600 boards; confirm on full claim only after ordinal robustness. | proxy-or-full |
| mur-37 | Hierarchical priors Bayesian themes | Hierarchical priors could place different WD on embed vs matrices — related to our split optim groups. | Complex hierarchical Bayes is not implementable cheaply; split WD by group is the practical version. | Keep practical group-wise WD (Adam vs Muon); park full hierarchical Bayes machinery. | proxy-or-full |
| mur-38 | Evidence lower bound (ELBO) Latent variable (if touched) | ELBO/VI is for latent-variable models; standard GPT CLM is not trained with an ELBO objective. | Switching to VAE-style ELBO changes the objective class and metric relationship to CE. | PARK ELBO/VAE training for claim — stay standard CLM CE. | park |
| mur-39 | Calibration of probabilities Decision theory / stats | Well-calibrated token probabilities matter for CE; severe miscalibration often shows up as CE floors. | Calibration metrics beyond CE are secondary; optimizing them can conflict with pure CE race. | Monitor CE; optional reliability diagnostics offline; do not replace CE with calibration losses. | proxy-or-full |
| mur-40 | Proper scoring rules Decision theory | CE is a proper scoring rule — Murphy decision theory supports CE as honest probability training. | Improper scoring rules can incentivize miscalibrated predictors and break leaderboard meaning. | Refuse improper primary scoring rules for training; CE stays primary. | proxy-or-full |
| mur-41 | Bias-variance for model size Stats | Bias-variance intuition warns that d12 capacity is fixed; gains must come from optim/data/schedule, not width. | Chasing variance reduction via ensembles multiplies cost against fair single-run T. | Fix d12 capacity; invest experimental budget in optim/schedule/data, not model size. | proxy-or-full |
| mur-42 | Bootstrap for uncertainty on T Statistics | Bootstrap/resampling ideas motivate multi-seed uncertainty on T when speedup is close. | Full bootstrap of training is impossibly expensive; we approximate with 1–2 seeds only. | Use pre-registered second seed in 6–10% band; do not claim tight CIs from one run. | proxy-or-full |
| mur-43 | Multiple testing / hparam search Statistics | Many hparam trials inflate false discovery risk — winner’s curse on proxy boards. | Ignoring multiple testing leads to promoting noise; too-strict corrections may kill real small gains. | Limit concurrent hparam arms; require pre-registration for claim; log all dead cells on site. | proxy-or-full |
| mur-44 | Covariate shift FineWeb slices Data / stats | Triage/prior reweight FineWeb slices and can induce covariate shift vs official val distribution. | Shift can improve train CE while hurting val if filters overfit non-val characteristics. | Always kill data filters that worsen disjoint val @800 even if train CE improves. | proxy-or-full |
| mur-45 | Label noise model Stats | Next-token 'labels' from web text are noisy/heterogeneous; triage is a practical noise filter. | Explicit noise-robust losses can conflict with CE metric and are hard to tune. | Prefer data triage over noise-robust loss changes; any robust loss needs 800-step CE kill-gate. | proxy-or-full |
| mur-46 | Missing data mechanisms Data | Missing-data theory (MCAR/MAR) is mostly about incomplete tables, not streaming web documents. | Forcing missing-data machinery onto FineWeb adds complexity without a clear T mechanism. | PARK classical missing-data EM machinery for this LM pretrain setting. | park |
| mur-47 | Conjugate priors Probability | Conjugate priors give closed-form updates in classical Bayesian models — elegant but not how GPT trains. | Deep nets do not use conjugate closed forms; SGD/Muon are the practical estimators. | PARK conjugate-prior closed-form trainers — keep SGD/Muon estimators; narrative only in writeups. | park |
| mur-48 | Mutual information features Info theory | MI feature selection could rank FineWeb docs by estimated information content for triage. | MI estimates are noisy and expensive; can recreate prior_band-style failures. | PARK MI feature selection unless a cheap proxy MI score is validated @800 against random triage. | park |
| mur-49 | Rate–distortion intuition Info theory | Rate–distortion thinking frames compression vs fidelity; LMs are related to compression of text. | RD theory does not yield a concrete new hyperparameter without a specific codec-style objective. | Use RD as writeup intuition linking CE to compression; no separate RD loss experiment for claim. | proxy-or-full |
| mur-50 | Natural parameters / exp family Probability | Categorical/softmax is exponential family; natural parameters are logits — explains lm_head geometry. | Exp-family theory rarely suggests a new practical step rule beyond what Muon/Adam already do. | Keep softmax logits; no exotic exp-family reparameterization experiments without strong prior. | proxy-or-full |
| mur-51 | Gradient of log-partition Exp family / optim | Gradients of log-partition functions recover expectations; for softmax, that is the familiar CE gradient. | Re-deriving CE grads does not change implementation — PyTorch CE already matches the theory. | No new experiment; use as correctness check if someone reimplements loss by hand. | proxy-or-full |
| mur-52 | Second-order methods in ch. optim 8 Optimization | Murphy optim survey includes second-order methods; Muon is our practical second-order-ish matrix path. | Classical Newton/K-FAC may tax more than Muon for this scale (see AFO natural gradient park). | Prefer Muon over classical second-order; any K-FAC arm needs strict tax budget and 800 kill-gate. | proxy-or-full |
| mur-53 | Line search (Murphy optim) 8 Optimization | Murphy also covers line search; same wall-clock objections as AFO exact line search apply. | Extra forwards per step destroy T even if CE per step improves slightly. | PARK line search for stochastic FineWeb pretrain on A100 claim path. | park |
| mur-54 | Adam recommendation in modern notes 8 Optimization / DNN | Modern optim notes often recommend Adam for deep nets — we follow that for embed/head, Muon for matrices. | Adam-for-everything is outdated relative to our Muon ordinal wins on matrix params. | Hybrid remains default; full-Adam only if it re-beats Muon on a fresh 800 board (unlikely). | proxy-or-full |
| mur-55 | Regularization path Stats/optim | Regularization paths (sweep λ) are classical stats practice — our WD sweeps are regularization paths. | Full paths are expensive; coarse 3-point WD grids are the practical compromise. | Run coarse Adam WD path @800 (3–5 values); pick robust λ, not the single best noisy cell. | proxy-or-full |
Future architecture (post-finals leads)
After F2b, Wave-4, indeea Muon board, claim miss, horizon screen, and book research §13d: primary path is live claim_muon_wsd; next bets depend on HIT/MISS (Tier B/C/D above).
| # | Lead | Why it matters |
|---|---|---|
| 1 | Muon no-EMA + WSD (live) | claim_muon_wsd on lobitodser. Book support: opt schedules + EMA lag. §13c · §13d |
| 2 | Newton-Muon / NS cost | 2nd-order chapters if quality hits but wall short |
| 3 | F2b + parallel (no Muon) | Fallback if Muon full still misses quality |
| 4 | Prior anneal / data mix | MAP + curriculum themes; FineWeb-only |
| 5 | Parallel + systems tax | Banked \(t_{step}\) |
| 6 | Packing / FP8 | Tangential |
How to run the agent
# once per workspace pip install modal modal setup modal volume create nocap --version=2 # cheap proof (~$0.01) modal run kit/modal_nocap.py --phase smoke # proxy DAG (~$4–6, 60–80 min wall) modal run --detach kit/modal_nocap.py --phase all # full curated dataset for F2 modal run --detach kit/modal_nocap.py --phase scale --chunks 28 # finals (per-account profiles — volumes do NOT share) MODAL_PROFILE=stufflaters modal run --detach kit/modal_nocap.py --phase f1 MODAL_PROFILE=acalincarol modal run --detach kit/modal_nocap.py --phase f2 MODAL_PROFILE=deeferentleeg modal run --detach kit/modal_nocap.py --phase f2b MODAL_PROFILE=stufflaters modal run --detach kit/modal_nocap.py --phase wave4 MODAL_PROFILE=indeea modal run kit/modal_nocap.py --phase smoke # indeea research proxies (dry-run unless --execute) cd indeea_scripts && ./10_proxy_control.sh # add --execute when approved # readiness / transfer (CPU only — no GPU) MODAL_PROFILE=<name> modal run kit/modal_nocap.py --phase readiness MODAL_PROFILE=acalincarol modal volume get nocap triage_full/ ./triage_full/ MODAL_PROFILE=indeea modal volume put nocap ./triage_full triage_full -f # fetch evidence modal volume get nocap runs_logs.zip . python kit/summarize_runs.py runs
01–04 campaign docs → 05 this map → academic_lit/ · indeea_scripts/ · volume_backup/MANIFEST.md · LESSONS.md
modal_nocap.py · academic_lit (72 papers) · indeea_scripts · volume_backup · pull_20260711 · nocap_archive
One-line summary
A serverless FineWeb experiment agent with F1_seal DONE (\(T\)=3.866 h), claim_muon_par MISS (final 3.386, never crossed), F2b quality hit (3.377) with −2.9% wall retracted, indeea Muon board promote @800 that did not transfer to a sealed win, dual accounts, Meta forensic review → APPROVE-WITH-FIXES. No official speedup.