NOCAP // AGENT ARCHITECTURE
DOC 05 · FULL SYSTEM MAP 2026-07-12 · horizon Phase‑1 github.com/rainbowpuffpuff/nocap
Autonomous experiment agent · BottleCapAI NoCap-Test

An agent that finds a faster path to val loss ≤ 3.3821

Not a chatbot. A closed-loop research agent: a flag-instrumented GPT-2 trainer, a two-stage data-curation pipeline, a Modal serverless DAG orchestrator, and a methodology of pre-registered kill gates. The job is to beat the official FineWeb baseline on one GPU — measured against our own re-benchmark — then ship the evidence.

GPT-2 124M · d12 F1 historical · 3.82 h F1_seal DONE · 3.866 h claim Muon+par · MISS 3.386 horizon: noema 3.941 horizon: wsd 3.933 EMA hurts Muon @1600 lobitodser Phase‑1 no official win yet
≤3.3821
Target val loss
3.866h
F1_seal \(T\) @4736
3.380
F1_seal final val
3.386
claim final · MISS
4.218
best proxy @800
no \(T\)
claim never crossed
00

Map of this document

01

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.

OBJECTIVE
Beat baseline wall-clock

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.

DENOMINATOR
F1 re-benchmark, not the 4090 board

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).

AxisAllowed / required by rulesForbidden / trap
DataAny filter/reorder of the given FineWeb tokensNew datasets outside the kit’s FineWeb stream
Model / lossArchitecture, loss, schedule changes (with valid prob. model at eval)Copying Modded-NanoGPT / leaderboard primary ideas
EvalAny seq length that scores the full val set; sliding reported alongside officialChanging val_tokens on real runs (it IS the metric)
HardwareAny GPU; report relative speedup vs self-baselineTreating absolute hours as comparable to the 4090 board
Clock (rules)Training wall-clock only; harness pauses timer during validation; one GPUScoring 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 hardwareUnfair 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 runsSilent env drift between baseline and challenger
HyperparamsSchedule changes justified by underfit regime / matched stepsPure hyperparameter search as the “idea”
Three “baselines” — never conflate them

(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.

01b

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 baselinePrimary 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 validationUse harness train_time_ms, not wall calendar time that includes val
One GPUModal A100-40GB only; never bare A100 (80GB trap)
Fairness: if you tune X for your run, baseline gets X tooSame compile flag, same precision, same pin on denominator and challenger
Official software pin (repo era): PyTorch 2.8.0-dev cu128; compile optional if brokenWe 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)

STACK SEAL
Pinned torch + fingerprint every run

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).

WARM / COMPILE
Compile + early steps are on the clock

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\).

ENDPOINTS
Pre-registered dependent variables

\(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.

NOISE FLOOR
How big is “real”?

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)

RunPathtorch recordedForensic note
F1 baseline (historical)notebooknot in configProvisional only — superseded by F1_seal
F1_seal (rpp)CLI stock 47682.13.0+cu130SEALED \(T\)=3.866 h · val@4736=3.3815 · final 3.3798
F2 / Wave-3notebook2.8.0+cu129Within-family comparisons only
F2b / Wave-4CLI modal_nocap2.13.0+cu130Same unpinned resolve day/family
indeea smoke / proxiesCLI same app2.13.0+cu130Not a cheat kit — same stack as F1_seal / F2b/W4; ordinal only
Going forwardall CLI profilestorch==2.13.0 pinAny pin change = new seal required

D. Claim classes (what is allowed to publish)

ClaimNeeds sealed env?Status after audit
Val ≤ 3.3821 hit/miss (quality)No (log fingerprint anyway)F2 miss · F2b hit SOUND
Wall-clock % vs historical F1YesF2b −2.9% RETRACTED (speed) — below ~6% infra floor
Within-app A/B (Wave-4 wd120 vs wd720)Same pin familySOUND within CLI 2.13
Wave-3 parallel ~1.6%Same notebook 2.8 familyWITHIN-FAMILY ONLY
indeea proxy rankingSame pin on indeeaORDINAL ONLY — not a board %
Published official speedupF1_seal DONE · claim_muon_par MISS (final 3.386, never crossed)NO WIN

E. Seal procedure (mandatory before any speed claim)

  1. Code pin: TORCH_PIN = "torch==2.13.0" in modal_nocap.py + indeea_proxy.py (done; log full 2.13.0+cu130 string).
  2. Smoke on clock account rainbowpuffpuff → fingerprint torch + A100-40.
  3. F1_seal on rainbowpuffpuff: full 4768 stock F1 — DONE · cross @4736 · \(T\)=3.866 h · final 3.3798 · torch 2.13.0+cu130.
  4. Research proxies on indeea = ordinal ranking only.
  5. Claim final also on rainbowpuffpuff vs that F1_seal — no published cross-account cardinal %.
  6. 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.

StandardVerdict
Competition-legal planAPPROVE — F1_seal, relative %, train_time, one GPU
Forensic / publish-grade after fixesAPPROVE-WITH-FIXES
Meta raw tone“REJECT as written” on pure forensic grounds — accepted as pressure; path is fixes, not stop
ADOPTED
What we changed

• 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

NOT ADOPTED
Meta errors / overreach

• “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

Rules of conduct — forensic, not marketing

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.

02

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.

PERCEPTION
Metrics & artifacts

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.

MEMORY
Modal Volume nocap v2

Data shards, features, scores, triage bins, priors, run dirs, LAUNCH markers, runs_logs.zip. Survives container death. Concurrent-writer safe (v2).

ACTUATION
Kit + GPU/CPU functions

Train, score, triage, prior-build, summarize — each a Modal function with hard timeouts, scaledown windows, and idempotent skip rules.

CONTROL
orchestrate()

Remote driver: phase DAG, spawn/fan-out, join. modal run --detach decouples local client; panic stop is one CLI command.

POLICY
Pre-registered gates

Playbook ideas behind flags (defaults = stock). Negative results are first-class outputs. Time-scale hparams re-derived at proxy length.

NOT THIS
Not an LLM agent

No tool-calling LLM in the loop. Humans write gates and interpret curves. The “agent” is the experiment runtime + method, not a conversational planner.

03

Layered architecture

L5 · CLAIM
Submission surface
IDEA.md (method + negatives) · RESULTS.md (timing, configs, repro) · git bundle · email subject = measured speedup. Docs 01–04 + this architecture map are the narrative spine.
L4 · CONTROL
Modal app nocap-wave2
Phases: smoke → data → prep ∥ anchors → score → wave2 → report; plus wave25 / wave3 / scale / f1 / f2. Peak 5 GPUs (Starter plan). Orchestrator spawns arms; local entrypoint only fires-and-forgets.
L3 · TOOLS
kit/ — instrumented trainer + pipeline
train_gpt2_t4.py (all ideas as flags) · get_data · triage_features / score_docs / triage_select · build_unigram_prior · eval_sliding · summarize_runs · modal_nocap.py · RUNBOOK.md
L2 · MEMORY
Volume layout under /vol
data/ · features/ · scores/ · triage_{a,b,c,bord,full}/ · unigram_prior.pt / prior_full.pt · runs/<name>/{config,log,main,final,LAUNCH} · runs_logs.zip
L1 · COMPUTE
Serverless containers
Debian slim + PyTorch 3.12 image · A100-40GB (explicit; avoid silent 80GB upgrade) · bf16 + compile on finals · Colab T4 fp16 for Wave-1 proxies · CPU workers for triage/prior
L0 · VENUES
Three Modal accounts + free Colab
Acct1 acalincarol: scale + F2 curated stack · Acct2 stufflaters: F1 + Wave-4 · Acct3 deeferentleeg: Wave-3 + F2b · Colab A/B: Wave-1 at $0. Volumes do not share across profiles.
04

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).

nocap/ # github.com/rainbowpuffpuff/nocap · PRIVATE ├── docs/ │ ├── 01-preflight-briefing.html │ ├── 02-idea-playbook.html │ ├── 03-wave1-retrospective.html │ ├── 04-campaign-report.html │ ├── 05-agent-architecture.html # this site map (Doc 05) │ ├── 06-sparse-delta-memory-for-nocap.md │ ├── 07-research-plan-indeea.md │ ├── academic_lit/ # 72 lit objects · BIB + tangential + CARDS │ │ ├── BIB.md · BIB_TANGENTIAL.md · SYNTHESIS.md │ │ ├── RELATED_WORK.md │ │ └── CARDS/ # B-Muon, B-Anytime, B-PriorFilter, … │ ├── ops/ # LESSONS, smoke writeup, scale-verify, modal ref │ └── papers/ # optional PDFs (e.g. SDM) ├── kit/ # trainer + pipeline + Modal orchestrator │ ├── train_gpt2_t4.py · get_data.py · triage_*.py · score_docs.py │ ├── build_unigram_prior.py · eval_sliding.py · summarize_runs.py │ ├── modal_nocap.py # DAG + preemption-safe guard │ └── RUNBOOK.md ├── notebooks/ │ ├── colab/ · modal/ · wave3/ · wave4/ │ ├── finals/ # F1 / F2 / F2b │ └── executed/ # F1 + F2 executed evidence ├── results/ # logs only (no *.pt / *.bin in git) │ ├── colab-accountA/ │ ├── modal-wave2/ · modal-wave3/ │ ├── f1_baseline/ # speedup denominator │ ├── finals/f2_record/ · f2b_record/ │ ├── wave4/ # w4_wd120 + w4_wd720 + SUMMARY │ └── volume_backup/ # MANIFEST + smoke markers · indeea ENV ├── tools/indeea_scripts/ # dry-run proxies · MODAL_PROFILE=indeea │ ├── RUN_ORDER.md · indeea_proxy.py · 00–20_*.sh ├── refs/ ├── README.md # live status board └── FUTURE.md # ranked leads post F2b + Wave-4

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/).

05

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.

ModuleRoleKey I/O
train_gpt2_t4.pyInstrumented 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.pyFetch FineWeb pre-tokenized chunks from HF into volume/local.data/*.bin
triage_features.pyStage-A doc features (len, unique, top, rep8, digit, punct).features/*.npz
score_docs.pyStage-B: per-doc mean CE under a trained ckpt; per-shard skip = resumable.ckpt + bins → scores/*.npz
triage_select.pyJunk rules + optional score band + 10% random rescue + optional curriculum order.triage_*/fineweb_triage_*.bin
build_unigram_prior.pyCorpus unigram log-prior for fixed logit bias.unigram_prior.pt / prior_full.pt
eval_sliding.pyBoundary-aware sliding-window val (report alongside official disjoint).ckpt → Δ vs disjoint
summarize_runs.pyTable over all run dirs; report zips logs without final.pt.→ console + zip
modal_nocap.pyFull experiment DAG as Modal App; phases idempotent; detach-safe orchestrator.volume as bus

Trainer flag groups (opt-in ideas)

SHIPPED IN STACK
Prior · EMA · warmdown · data path

--logit_prior · --ema_beta · --ema_start_frac · --warmdown_iters · --input_bin (triage_*) · --val_stride · --precision bf16 · --compile 1

INSTRUMENTED / KILLED OR PARKED
Architecture & loss experiments

--mtp_* · --loss_shape / --ls_* · --mlp swiglu · --canon · --parallel_block · --zloss

06

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.

Two-stage triage (idea #4) + prior (idea #3)
Stage-A is cheap heuristics · Stage-B is model-scored perplexity band · Prior is zero-cost logit bias
FETCH
FineWeb bins
get_data · HF chunks
STAGE A
Features
triage_features
SCORER
m0_anchor ckpt
800-step reference
STAGE B
score_docs
per-doc mean CE
↓ band pct 10–80 · junk rules · 10% random rescue
SELECT
triage_full
~1.92B kept tokens · 20 shards
PRIOR
prior_full.pt
CE 7.67 nats vs ln V 10.82
TRAIN
F2 record
stack recipe · 4768 steps
Artifact (scale verify, 2026-07-09)Value
docs_total / docs_kept4,045,481 → 2,927,881
tokens_total / tokens_kept2.796B → 1.922B (kept_frac ≈ 0.687)
Score band (mean-loss)[4.1887, 5.1831] = pct 10–80 of 4,045,472 docs
scores/*.npz28 shards (expect 28)
triage_full bins20 shards · ≈3.58 GiB
prior_full.pt~198 KiB · unigram CE 7.6690 nats
Dominant rule_hitscore_band 1,213,639 · unique 33,465 · len 9,532
Why curation is on-clock-legal prep

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.

07

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 DAG — --phase all
data → [prep CPU ∥ 4 anchor GPUs] → score → [2 wave2 GPUs] → report · peak ≤ 5 GPUs
DATA
fetch_data
chunks=3 (proxy) / 28 (scale)
↓ parallel fan-out
PREP
prior + features + triage_a
CPU 8 / 16GB
m0
m0_anchor
stock · scorer ckpt
m1
m1_ema
β=0.99 · short WD
A
w2_mtp
killed
B
w2_shape
killed
↓ uses m0 final.pt
SCORE
score_stage_b
scores + triage_b band 10–80
↓ parallel
DATA ARM
w2_databand
400 steps · triage_b
STACK
w2_stack
prior+EMA+curated · 800
REPORT
summarize + zip logs
runs_logs.zip on volume

Phase catalog

smoke
Lifecycle proof
One A100 ~60–90s: bf16, synthetic shards, 10 trainer steps, volume marker, auto-shutdown. Validates billing lifecycle before real spend (~$0.01–0.04).
data
Fetch FineWeb
CPU function; commits bins to volume.
prep
Prior + stage-A
Idempotent if prior/features/triage_a already exist.
anchors
4-way GPU race
m0 / m1 / mtp / shape in parallel via spawn().
score
Stage-B band
score_docs + triage_select → triage_b.
wave2
Data isolation + stack
w2_databand ∥ w2_stack.
wave25
Data variants
Harder band / curriculum / stack seed 2029 (optional; skipped in rev 2 plan).
wave3
Architecture race
swiglu ∥ canon ∥ parallel_block vs m0 curve.
scale
Full corpus prep for F2
fetch N · score_all · finalize_data(band, order) → prior_full + triage_full.
f1 / f2
Finals via train_long
4768 steps, timeout 8h. F1 stock (zloss 0). F2 stack on triage_full + prior_full + EMA 0.999 + warmdown 256.

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
08

Confirmed recipe brain

Every component proxy-validated at matched steps / hardware. Stack additivity ~70–100% at proxy scale.

LeverMechanismProxy effectStatus
Perplexity-band curationKeep docs in mean-loss pct 10–80 + junk rules + 10% anti-drift rescue−0.051 @400SHIP
Unigram logit priorFixed corpus log-bias on logits; start ~7.7 not 10.8−0.047 @400SHIP
Shortened warmdownEarly LR decay wasteful while still underfit−0.013 @800SHIP
Sliding-window evalBoundary-aware val; reported with official disjointΔ 0.019@800 → 0.060 full (F1)SHIP (dual-report)
EMA weightsβ scaled to horizon; dual-eval at endlag artifact at proxyMAINTAIN free
Stack (data+prior+WD)Composition for F2−0.056 raw / −0.074 w/ eval @800F2 RECIPE

Killed with evidence (submission material)

KILL
MTP module

+11% step time and worse loss @800. Consistent with small-model NLL cautions. Configs + curves archived.

KILL
Token-loss shaping

~0 cost, never ahead (+0.007 @800). Val includes every token — down-weighting is a mid-run tax.

KILL (FINALS)
SwiGLU

Big early lead evaporates by step 800; ends ≈ baseline (4.78).

PARK
Canon layers

−0.078 nats (largest training-side effect) but +30% step time naive → net loss. #1 FUTURE lead if fused ≤2% tax.

BANK
Parallel block

~1.6% faster, loss-neutral-or-better (−0.005). Out of F2 for composition risk only.

TRAP
Model resizing

Baseline sits at exactly 20 tok/param (Chinchilla isoline). Resizing unstable sign, ≤2%.

09

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 environmenttorch==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 %.
PROXY SCALE
Standard A100 proxy config

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.

10

Cost safety, idempotency, serverless semantics

AUTO-SHUTOFF
Containers die with the call

Serverless: no long-lived GPU. timeouts 1h (train) / 8h (finals). scaledown_window=10s. Worst hung arm ~$2.10; absolute multi-hang cap ~$15.

IDEMPOTENT SKIP
final.pt / scores exist → skip

Safe re-run of any phase. score_docs skips per-shard .npz. prep skips prior/features/triage if present.

DUPLICATE GUARD
At-least-once spawn

LAUNCH + log.csv freshness <15 min → fail loud instead of racing twin trainers (learned after a silent double score ~$2 tax).

Operational lessons paid for in blood

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.

11

Live state — 2026-07-11

MilestoneResultStatus
Wave-1 (Colab T4)fp16 parity, prior, sliding Δ growth, warmdown waste foundDONE
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 killDONE
Wave-3 (Modal, acct 3)Canon −0.078 but +30% time · parallel banked · SwiGLU killDONE
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 msDONE
F2 record (acct 1)Final 3.4050 (never crossed 3.3821) · 235.0 min · step_avg 2957 ms · WD 256 too shortMISS
F2b recovery (acct 3)Stack + WD 1024 · final 3.377309 · first cross @4736 = 235.6 min · step0 val 7.88 · ~3.95 hHIT 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 reviewDual-account idea OK; cross-account cardinal % weak; noise floor → ~6%; proxies ordinal; APPROVE-WITH-FIXES · see §01b·FADOPTED 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 completeDONE
indeea / indeeaindi (R&D)Full board + ablations ALL DONE · best muon_par800 4.218 · muon 4.236 · seed42 4.235 · par1600@1600 3.941DONE
rainbowpuffpuff F1_sealCOMPLETE · 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_parCOMPLETE · 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‑11600-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_ARMALL DONE
Literature program72 objects (36 core + 36 tangential) · experiment cards · gap analysis G1–G15ARCHIVED
F1_seal result — sealed denominator (2026-07-11)

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/.

claim_muon_par — official claim (2026-07-12) · MISS

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/.

Horizon Phase‑1 (lobitodser, 1600-step) — what we learned

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/.

F2b result (honest)

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.

Wave-4 result (anneal diagnostic @ 2400 steps, raw FineWeb)

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/.

What we run next (and why)

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).

12

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

ClusterKey papersHypothesis we test
O · OptimizersMuon 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_stepspromoted on indeea (−0.50 CE @800). Full dossier: §13c
S · SchedulesAnytime pretraining (2602.03702) · ScheduleFree+ (2605.19095) · EMA weights (2411.18704) · Wave-4: wd120 3.982 vs wd720 3.993 @2400B-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 · DataPrior-filter (2509.18577) · ADAPT online reweight (2605.05227) · proxy reliability (2512.24503) · FineWeb-EduB-PriorFilter / B-Mix / B-Curriculum: static PPL band hit quality not steps; try prior-only filter, mixes, order
A · Arch / auxTOP (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 · softcapG1–G15 fills: free t_step / better proxies / 5B budget use
Core empirical prior (ours)

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

#BetWhy nowScriptEst. $
0Val data seedNeed fineweb_val for official metric01_seed_val_data.sh~0
1AdamW control @800 curatedDenominator for all proxies on torch 2.1310_proxy_control.sh~1–1.5
2Parallel on/offW3 bank; free t_step (A4 lit)15_proxy_parallel.sh~2–3
3Schedule WD sweepAnytime lit + Wave-4 anneal data12_proxy_schedule.sh~2–4
4Muon (after kit port)Newton-Muon on GPT-2 class11_proxy_muon.sh~1–2
5Prior-filter / curriculum / mixD3 / D7 / mixing laws13, 14 + cards~2–5

Full cards: academic_lit/CARDS/ · synthesis: academic_lit/SYNTHESIS.md · related work draft: RELATED_WORK.md

13

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).

CLOCK · CLAIM
rainbowpuffpuff

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.

RESEARCH · PROXIES
indeea → workspace indeeaindi

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)

WorkAccountEst. $Status
Re-smoke + env_fingerprint.txt (pin 2.13)rainbowpuffpuff~0.01DONE
Raw FineWeb + val for stock F1rainbowpuffpuff~0–1DONE
F1_seal stock 4768 (sole speed denominator)rainbowpuffpuff~8–10DONE · \(T\)=3.866 h
Full claim final (Muon+par+stack)rainbowpuffpuff~10–12DONE · MISS 3.386
Val shard + readinessindeea~0DONE
Proxy control · ix_controlindeea~0.4DONE · 4.731
Parallel on · ix_parallel_onindeea~0.4DONE · 4.585 · BANK
Muon · ix_muonindeea~0.4DONE · 4.236 · PROMOTE
Compose / schedule / prior_bandindeea~2DONE compose≈par · sched park · prior 4.768 kill
Full compose / claim @4768rainbowpuffpuff~8–10ONLY IF PROXY WINS

Retired / archive accounts (do not burn for new science)

ProfilePast roleNow
acalincarolScale · F2 recordArchive / data source
stufflatersF1 historical · Wave-4Done — no more anneal GPU
deeferentleegWave-3 · F2bArchive (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)

ItemStatus
Volume nocap v2CREATED
Curated seed (triage_full 20 · scores 28 · features 28 · prior)SEEDED
Smoke A100-SXM4-40GB · torch 2.13.0+cu130OK
Readiness f2b_okTRUE (raw train optional)
Scripts indeea_scripts/*.sh + indeea_proxy.pyDRY-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
Split rules (forensic · post–Meta review)

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.

13b

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.

Status 2026-07-12 — F1_seal SEALED · claim_muon_par MISS · no official win

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)

#WorkAccountEst. $Status
0aVolume + smoke + fingerprintrainbowpuffpuff~0.01DONE
0bRaw FineWeb + val (data --chunks 28)rainbowpuffpuff~0–1DONE
0cF1_seal stock 4768rainbowpuffpuff~8–10DONE · \(T\)=3.866 h @4736
B*indeea full board + Muon ablationsindeea~$6–8ALL DONE

Tier 1 — highest EV for a real win (implement then run)

RankBetCode?Why it can winWhere
1Muon / Newton-Muon + AdamW embed/headKit port requiredOnly big untried \(N^*\) lever; GPT-2-class litindeea proxy → rpp claim
2Compose: F2b stack + parallel (+ Muon if #1)Parallel flags existFree \(t_{step}\) + known quality hitrpp claim
3Horizon-free / anytime + registered averagingSchedule codeExplains F2/F2b; earlier first-crossindeea → rpp
4Prior-filter or raw/curated mixLight CPU + proxyOriginal data story; may cut \(N^*\)indeea → rpp
5Prior anneal (strong early → 0)Small flagUses existing prior assetindeea → rpp

Tier 2 — ordinal screens (indeea)

#ActionAccountEst. $Status
1muon_par800indeea4.218BEST
2muon / seed42 / lr01indeea4.23–4.24seed-robust · lr0.01≈0.02
3muon_noprior / rawindeea~4.26prior+curated help a little
4parallel / composeindeea4.58BANK systems
5controlindeea4.731denom
muon_par1600indeea3.941@1600longer horizon OK
lr05 / prior / schedindeea4.41–4.81kill/park
indeea ablations COMPLETE (2026-07-11)

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)

Win path in one line

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).

13c

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.

One-sentence result (indeea, ordinal only)

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

ALGORITHM
Orthogonalized momentum on matrices

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.

WHY NOT ADAMW-ONLY
Coordinate-wise optimizers ignore matrix structure

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.

HYBRID
2D → Muon · rest → AdamW

Standard practice from Keller Jordan / community Muon: do not Muon the embedding or lm_head; keep AdamW there with its own LR group.

SPECTRAL LR
Typical scale ~0.02

Muon LRs are not AdamW LRs. Our board: 0.01 ≈ 0.02; 0.05 hurts (4.409). Default claim: --muon_lr 0.02.

NS STEPS
Newton–Schulz ×5

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 wavesImplication
F2 miss: short WD @ full horizon never crossed 3.3821Anneal length is fragile; not our primary \(N^*\) bet
F2b hit quality (3.377) but first-cross @ same step 4736 as F1Data+prior+EMA+long WD ≠ earlier passage time
Wave-4 @2400: WD120 vs WD720 Δ≈0.01 CEAnneal is a small dial at proxy — park as main strategy
Parallel ~1.6% faster step @ historical proxyBank \(t_{step}\); cannot alone open a ≥6% win
Literature O1/O2: Muon / Newton-Muon cut steps on GPT-2 speedrun classHighest-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)

IDPaper / noteWhat we takeWhat 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
Honesty / attribution

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)

FILES
kit/muon_opt.py

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.

TRAINER HOOKS
train_gpt2_t4.py

--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 groupOptimizerTypical defaults in kit
Hidden 2D weights (use_muon=True)Muonlr 0.02 · momentum 0.95 · NS 5 · WD 0
embed / lm_head / 1D biases normsAdamWlr ~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)

Full ordinal board (2026-07-11) — COMPLETE

RankRunVal@800step_avgCall
1ix_muon_par8004.218937BEST COMPOSE
2ix_muon4.236902PROMOTE strong alone
3ix_muon_seed424.235906SEED-ROBUST ≈ seed 1337
4ix_muon_lr014.231947lr 0.01 ≈ 0.02
5ix_muon_noprior4.256944prior helps ~0.02
6ix_muon_raw4.258972curated helps ~0.02
7ix_parallel_on4.585866BANK systems
8ix_compose8004.583875≈ parallel
9ix_control4.731878AdamW denom
10ix_sched_wd1604.734929PARK
11ix_prior_band4.768925KILL
12ix_sched_wd4004.814881PARK
ix_muon_lr054.409902LR TOO HIGH
Longer horizonVal@1600step_avgNotes
ix_muon_par16003.941835Still falling · claim-shaped · not a seal

What the board taught us

PROMOTE
Muon is the real lever

~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.”

COMPOSE
Parallel is additive, small

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.

DATA
Prior + curated help a little

Drop prior → 4.256; raw → 4.258. Keep F2b-style curated+prior for continuity and ~0.02 CE — they do not replace Muon.

KILL / PARK
Stop burning budget here

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.

Claim recipe — EXECUTED 2026-07-12 · MISS

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)

RuleWhy
indeea board = ordinal onlyDifferent workspace; proxies rank methods, they do not print board %
Both \(T_{F1\_seal}\) and \(T_M\) on rainbowpuffpuffNo cross-account cardinal speedup
Same torch==2.13.0 pin + A100-40Otherwise stack confound (see F2b −2.9% retraction)
Disjoint val only for first-crossSliding/EMA are diagnostic, not claim metrics
Attribute Muon in writeupForensic / scientific honesty; Modded-NanoGPT adjacency
Proxy→full transfer unproven until claim finishes3.941@1600 is hopeful, not a seal

Status vs next action

StepStatusNotes
Card B-Muon + lit mapDONEdocs/academic_lit/CARDS/B-Muon.md
Kit port + volume overrideDONEmuon_opt.py · --optimizer muon
indeea full board + ablationsDONEBest compose 4.218 · logs under results/indeea/
F1_seal on rppSEALED\(T\)=3.866 h @4736 · final 3.3798 · results/f1_seal/
Full claim 4768 on rppMISSfinal 3.386 · never crossed · 3.975 h · results/claim_muon_par/
Horizon Phase‑1 lobitodserALL DONEwsd 3.933 · claim_repro/noema 3.941 · adamw 4.174 · EMA@1600 4.234 · results/horizon_lobitodser/
Next full claimPROMOTEMuon+par+curated+prior · EMA off · wsd-like · vs F1_seal
Newton-Muon refinementsLATEROnly after a hitting no-EMA Muon full run
Bottom line

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.

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.

Legal boundary

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)

BookRole for NoCapChapters / themes we extracted
Algorithms for OptimizationSchedules · 1st/2nd-order · Adam/momentumGradients · line search · GD · conjugate GD · momentum / Nesterov · Adam · hypergradient · Newton / quasi-Newton · stochastic / noisy descent
Convex Optimization (Boyd)Duality · regularization geometryDual problems · regularized approximation · unconstrained minimization
Understanding Deep LearningPractice optim · norm · genOptimizers · 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 IntroMAP ↔ WD · priorsOptimization · gradient methods · MAP / regularization / priors
Bishop PRMLOverfitting · Bayesian→MLRegularization · priors · MAP · evidence · optimization
Mathematics for MLMatrix calculus (Muon intuition)Gradients · eig/SVD · linear algebra for matrix optimizers
UML (Shalev-Shwartz)SGD · stability · gen theorySGD · convex · regularization · generalization
Principles of DL TheoryInit / width (secondary)Criticality · GP limits · training dynamics
NLP with TransformersTrain practice (arch mostly fixed)Fine-tuning · efficient training · LR practice
MacKay · ESLCE metric · averaging/shrinkageCross-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 measuredBook interpretationAlready adapted?
F1_seal \(T=3.866\,\mathrm{h}\) @4736Proper scoring / CE risk (MacKay)SEALED denominator fixed
claim_muon_par final 3.386 · EMA 3.50Averaging can lag late (UDL/ESL); first-cross needs raw weightsYES — EMA off on claim_muon_wsd
Horizon Muon −0.23 CE vs AdamW @1600Matrix-aware / adaptive updates (opt books, MML)YES — keep Muon
EMA path step_avg +15% vs noemaExtra state/update costYES — no EMA for wall
wsd 3.933 best @1600Schedule design (Alg. for Opt · UDL)YES — wu~10% / wd~25% live
F2b quality hit with prior+curatedMAP / 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.

IF QUALITY HIT · SPEED ≥6%
Publish path

Writeup attributes Keller Muon; cite schedule/EMA negative results; optional 2nd seed if 6–10%. Books used as theory narrative only.

IF QUALITY HIT · SPEED 0–6%
Tier B — cut \(t_{step}\) or \(N^*\)

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.

IF QUALITY MISS
Tier C — change compose

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.

IF SLOWER THAN SEAL
Tier D — systems

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 themeBook(s)Possible kit experimentWhen
Momentum / Nesterov / AdamAlg. for Optimization · UDLAlready hybrid Muon (NS on momentum) + AdamW head; ablate muon momentum 0.9–0.95After claim result
Newton / quasi-NewtonAlg. for Optimization · ConvexNewton-Muon port; 1600 ordinal then fullHit but short of 6%
LR schedules / line search spiritAlg. for Optimization · LLM bookWSD fractions; muon_lr floor; cosine on Adam groups onlyLive WSD; refine if miss
MAP / Gaussian prior ↔ WDMurphy · BishopWD sweep on Adam groups; keep unigram prior; prior scale annealQuality miss
Model averaging / shrinkageESL · UDLDo not use EMA for first-cross; optional end-window average for report onlyAlways for \(T\)
Cross-entropy / likelihoodMacKayNo change — disjoint CE is correct DV
Matrix decompositionsMMLNarrative for Muon; NS step ablationsTax-bound
Pretrain data hygieneLLM-from-scratchOnly FineWeb filters/order already in kitData A/B if miss
Init / criticalityPDLTLow EV for stock d12 unless desperatePark

Reading order (team, not full curriculum)

  1. Algorithms for Optimization — momentum, Adam, Newton (tocs + PDF)
  2. Understanding Deep Learning — optim + gen + norm
  3. Build LLM from Scratch — pretrain hparams
  4. Murphy Intro / Bishop — MAP, priors
  5. MML — matrix tools for Muon writeup
Local paths

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

13e

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.

Not training data

Book PDFs are offline research only. Non-FineWeb train proposals are illegal/park.

Algorithms for Optimization (53 ideas)

PDF: Algorithms for Optimization.pdf

IDIdeaWhyWhy notExperimentStatus
afo-01Gradient 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-02Numerical 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-03Automatic 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-04SPSGA-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-05Unimodal 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-06Golden-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-07Quadratic 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-08Local 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-09Exact 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-10Approximate 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-11Trust-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-12Termination 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-13Gradient 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-14Conjugate 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-15Heavy-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-16Nesterov 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-17AdaGrad 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-18RMSProp 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-19Adadelta
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-20Adam (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-21Hypergradient 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-22Newton'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-23Secant / 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-24Levenberg–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-25Noisy 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-26Population / 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-27Constrained 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-28Dual 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-29KKT / 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-30Multi-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-31Coordinate 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-32Block 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-33Stochastic 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-34Importance 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-35Curriculum 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-36Restarted 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-37Warm 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-38Polyak 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-39Gradient 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-40Separable 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-41Hyperparameter 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-42Robust 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-43Minimax / 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-44Derivative-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-45Early 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-46Stationarity 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-47Mirror 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-48Natural 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-49Hessian-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-50Spectral 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-51Update 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-52Asynchronous 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-53Batch 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

IDIdeaWhyWhy notExperimentStatus
udl-01Supervised 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-02Maximum 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-03Multiclass 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-04Gradient 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-05SGD 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-06Momentum 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-07Adam 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-08Training 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-09Backprop 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-10Parameter 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-11Sources 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-12Double 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-13Hyperparameter 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-14Regularization 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-15Explicit 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-16Early 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-17Ensemble / 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-18Dropout
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-19Label 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-20Batch 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-21Layer 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-22GELU 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-23Depth 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-24Residual / 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-25Universal 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-26Ethics 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-27Unsupervised / 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-28RL 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-29Data 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-30Train/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-31Learning 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-32Learning 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-33Batch 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-34Number 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-35Generalization 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-36Overfitting 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-37Underfitting 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-38Adam β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-39Gradient 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-40Warmup 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-41Cool-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-42Multiplicative 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-43Clip 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-44Mixed 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-45Compile / 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-46Reproducibility / 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-47Model 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-48Shortcut / 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-49Width / 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-50Multivariate 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-51Toy 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-52Code 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

IDIdeaWhyWhy notExperimentStatus
llm-01GPT 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-02Stages 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-03Large 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-04Tokenization 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-05Sliding 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-06Positional 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-07Self-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-08Causal 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-09Multi-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-10LayerNorm
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-11GELU 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-12Residual 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-13Transformer 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-14Pretrain 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-15Evaluating 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-16Training 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-17Decoding 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-18Checkpoint 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-19Loading 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-20Fine-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-21Instruction / 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-22Learning 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-23Weight 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-24Cosine 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-25Gradient 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-26Sequence 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-27Batch 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-28Eval 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-29Train/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-30Data 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-31Document 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-32BOS/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-33Embedding 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-34Dropout 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-35Attention 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-36KV 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-37Mixed 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-38Gradient 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-39Distributed 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-40Gradient 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-41Seed 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-42Logging 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-43Model 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-44Context 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-45Vocabulary 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-46Pretrain 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-47Don'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-48Dataset 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-49Avoid 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-50Activation 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-51torch.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-52Save 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

IDIdeaWhyWhy notExperimentStatus
mur-01ML 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-02Supervised 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-03Data 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-04Univariate 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-05Multivariate 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-06Statistics / 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-07MAP 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-08Decision 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-09Information 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-10KL 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-11Cross-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-12Linear 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-13Eigendecomposition / 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-14Optimization 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-15SGD 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-16Convex 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-17Logistic 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-18Linear 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-19GLMs
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-20Neural 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-21NN 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-22NN 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-23RNN 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-24Attention 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-25Exemplar 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-26Kernel 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-27Trees / 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-28Bagging / 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-29Boosting 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-30Few 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-31Dimensionality 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-32Clustering
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-33Recommender 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-34Graph 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-35Bayesian 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-36Empirical 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-37Hierarchical 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-38Evidence 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-39Calibration 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-40Proper 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-41Bias-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-42Bootstrap 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-43Multiple 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-44Covariate 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-45Label 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-46Missing 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-47Conjugate 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-48Mutual 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-49Rate–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-50Natural 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-51Gradient 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-52Second-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-53Line 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-54Adam 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-55Regularization 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
14

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).

#LeadWhy it matters
1Muon no-EMA + WSD (live)claim_muon_wsd on lobitodser. Book support: opt schedules + EMA lag. §13c · §13d
2Newton-Muon / NS cost2nd-order chapters if quality hits but wall short
3F2b + parallel (no Muon)Fallback if Muon full still misses quality
4Prior anneal / data mixMAP + curriculum themes; FineWeb-only
5Parallel + systems taxBanked \(t_{step}\)
6Packing / FP8Tangential
15

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
COMPANION DOCS
Read order

01–04 campaign docs → 05 this map → academic_lit/ · indeea_scripts/ · volume_backup/MANIFEST.md · LESSONS.md

LOCAL WORKSPACE
software_i_built/modal/

modal_nocap.py · academic_lit (72 papers) · indeea_scripts · volume_backup · pull_20260711 · nocap_archive

One-line summary

The agent, compressed

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.