# Cascade-EP ablation program — standard multi-layer LLM, EP only in training **Date opened:** 2026-07-09 · **Trigger:** user directive — product form = standard L-layer transformer (plain-forward inference); the looped/weight-tied block is demoted to physics testbed. **Bridge:** layered energy E = Σ_l ½‖z_l − f_l(z_{l−1})‖² over DISTINCT standard blocks. Free equilibrium == the standard forward pass (E=0) ⟹ inference is a normal LLM forward. Training = two-phase (±β·CE at the top), relax states to nudged equilibria, ∇θ = (1/2β)[∂E/∂θ|₊ − ∂E/∂θ|₋]. Lineage: predictive-coding≈BP theorem family (Whittington-Bogacz 17; Song+ 20 / Z-IL), EP two-phase readout. **First gate (2026-07-09):** `cascade_probe.py` L3 C128 random init → cos(cascEP, BP) **0.9968** (blocks 0.9975/0.9980/0.9992, |EP|/|BP| 0.80–0.91). ## The five claims we are buying evidence for - **K1 exactness-on-trajectory** — the two-phase gradient matches BP not just at init but along a real training trajectory (weights with grown Jacobians stiffen the relaxation). - **K2 cost** — the nudged relaxation can be engineered to a small multiple of a BP step (scheme × K frontier), and the *physical* (Jacobi/parallel) scheme is not hopeless (analog story). - **K3 training parity** — full training closes to BP final CE at equal arch/steps (the money claim). - **K4 depth scaling** — no depth penalty vs BP at matched params (signal attenuation under control). - **K5 analog price** — per-block Jᵀ feedback, dynamic noise, quantization: the tolerance ledger ports from the looped-block program; PAR wall applies per block. Honest cost framing: on GPU cascade-EP is strictly MORE expensive per step than BP (K relax sweeps, each ≈ one fwd+state-vjp). The value is: standard-form deployment + local rules + analog trainability. The looped-EP precedent multiplier was ~230× BP; the K-frontier decides whether cascade beats that. --- ## STATUS 2026-07-11: K1+K2+K3 SEALED; D-tier in flight - K1 exactness: cos 0.9998-1.0000 on-trajectory + BP-free formally audited (test_bp_free.py in repo). - K2 cost: exact mode ~3.6x BP (v7); Sol audit says remaining eager headroom 5-10% (v8 queued). - K3 quality: **matched-tuning PARITY n=3** (EP-exact 2.0500±0.015 vs BP 2.0530±0.004 @ C256 L6, lr 1e-3 both). Arc: fake-win (lr artifact) -> fake-tax (v7 dedups) -> parity. Fast mode = documented -4%CE/+20%speed dial. A0.4: TF32 free, bf16 production-only (cos 0.9427). - D1a (L12xC512 45M): BP 1.917 sealed; EP + Muon arms landing. D1b long-run demo gated on D1a parity. - E-tier: next in queue (softmax pathology / error-channel SNR / write pricing) -> Demo-0 spec sheet. ## STATUS 2026-07-09 (same day): Tier 0 CLOSED GREEN via the zil scheme; C1 running - **Naive relaxation FAILS at depth** (the B1-lite sweep): jacobi K=40·L → cos 0.82 (L6) / 0.67 (L12) / 0.53 (L24), shrink dying 0.41→0.28; gsf/gsr with small-η+momentum no better; β-insensitive (0.01/0.03/0.1 identical) ⟹ binding error = RELAXATION INCOMPLETENESS, not Taylor bias. warp2.0 catastrophic (cos 0.11) under naive descent. - **Two implementation traps found:** (1) NBT-normalized energy made γ=1 actually γ=1/128; (2) plain γ=1 reverse sweep WITHOUT interleaved reads contaminates e_l with J_l·δ_{l−1} (same β-order as the signal) — final-state readout is directionally ruined (cos 0.30@L6). - **The fix = zil scheme (interleaved reverse sweep):** update z_l (γ=1, SUM units) then read θ_l IMMEDIATELY (e_l = −β·δ_l exact at the feedforward point; δ-recursion has NO linearization error). Single phase, β cancels exactly. **Results: cos = 1.0000 at L=6/12/24; io gate 0.9999; warp2.0 → 1.0000; real-trajectory ckpts (casc_bp6 s0→s4000) → 0.9998–1.0000. A0.1/A0.2/A0.3 all green.** Honest framing: zil is numerically BP restructured as per-layer local two-factor energy reads (no global backward graph); the EQUILIBRIUM mode (jacobi/CG to convergence) remains the physically-meaningful EP column — priced expensive by the sweep, CG/preconditioning is the B2 job, and it is the analog-hardware rung (E-tier). - **C1 (zil) ran and is RETIRED with zil itself:** casc_ep6 best 3.3236 vs BP twin 2.9746 (gap 0.35 — single-sided zil top-read carries an O(β) shift on the readout term; moot now). **USER DIRECTIVE (2026-07-09 night): zil is NOT the route — it is BP in disguise; the project stays on TRUE EP = equilibrium-mode two-phase relaxation.** zil survives only as (a) a diagnostic upper bound, (b) optionally a numerical STATE-INIT trick for GPU simulation (`--init_sweep`: readout still taken at the relaxed equilibrium = clean EP semantics; hardware needs no init trick — physics settles). **Critical path = B2: make the equilibrium solver cheap** (Adam-on-states / init-sweep warm start / GS-multi-sweep / λ_l preconditioning), then rerun C1 in equilibrium mode. ## Tier 0 — gate hardening (probe-scale, hours, no training) → K1 | ID | question | design | decision rule | |---|---|---|---| | A0.1 | does cos survive depth? | cos vs L ∈ {3,6,12,24}, C128, Jacobi K auto-scaled; ≥4 batches | cos ≥ 0.98 at L12 or B1 must fix it | | A0.2 | does cos survive training? | BP-train C256 L6 4k steps saving every 500 (`casc_bp_train.py`); gate at every ckpt; ALSO record required-K to reach res-tol | cos ≥ 0.97 at all ckpts; K growth ≤ 3× init→4k | | A0.3 | full-θ gate | include emb/pos/readout(tied) grads in the gate | all groups ≥ 0.97 | | A0.4 | precision | fp32 vs TF32 vs bf16 on the two-phase difference | pick cheapest safe mode (looped-EP lesson: TF32 killed relaxation — re-test here) | ## Tier 1 — relaxation engineering (the cost frontier) → K2 | ID | axis | arms | metric | |---|---|---|---| | B1 | scheme × K | Jacobi (physical, parallel) vs Gauss-Seidel fwd vs GS reverse (algorithmic; Z-IL limit) × K ∈ {12,25,50,100,200,400} at L6 & L12 | K needed for cos ≥ 0.98; wall-clock multiple vs one BP step | | B2 | state optimizer | GD vs +momentum vs Adam-on-states; η sweep | same | | B3 | nudge β | {0.003,0.01,0.03,0.1,0.3} × one-sided vs two-sided | cos, shrinkage |EP|/|BP|, required K | | B4 | energy weighting | raw ℓ₂ vs per-layer precision λ_l=1/RMS² vs LN-in-energy | per-block shrinkage PROFILE (fix the 0.80→0.91 depth attenuation) + relax conditioning | | B5 | stopping | fixed-K vs relax-to-tol | natural K distribution | | B6 | **depth attenuation / estimator SNR profile** | measure per-block error amplitude ‖e_l‖ and per-block cos vs depth, as f(L, β, K) | the estimator-precision law: how fast does the deep-layer signal die, and which knob (β, K, λ_l weighting) restores it | B1 is the single most consequential experiment in the program: if GS-reverse needs K≈L (Z-IL limit) we have a ~BP-cost algorithmic mode for GPU pretraining, and the Jacobi column is the honest analog-hardware price. Report all three columns — they are different products. **Dynamics-vs-estimator tradeoff (user insight, 2026-07-09):** the cascade is dynamically SIMPLER — the free phase is EXACT (a plain forward; no res/T1/fixed-point error, no Hopf, no collapse), so **C-tier default arms run with NO regularizers at all** (jr/resreg don't exist here; stability regs return only if evidence demands). The difficulty MOVES to the estimator: the two-phase difference must resolve per-layer error signals that ATTENUATE with depth (visible at L=3 already: shrink 0.80 bottom vs 0.91 top), finite-β Taylor bias and finite-K relaxation bias hit the deepest blocks first, and the difference-of-O(1)-quantities structure makes precision (A0.4, fp32-vs-TF32) bind harder than in looped-EP. B6 is the dedicated measurement; λ_l weighting (B4), β/K scheduling (B3/B1) and per-block rebalance (C5) are the candidate antidotes. ## Tier 2 — small full-training ablations (C256 L6 T256 TinyStories, 8–16k steps) → K3 | ID | arm | vs | |---|---|---| | C1 | **money run**: cascade-EP (B-tier winner) ×2–3 seeds | BP twin, same arch/data/AdamW/steps — target gap ≤ 0.05 CE | | C2 | K budget: {K*, 2K*, 4K*} | CE-vs-cost curve (training may need less relax than the gate does — looped-EP precedent: t2sel 40 trains, 80 gates) | | C3 | one-sided β (half cost) | two-sided | | C4 | AdamW | SGDM (shrinkage sensitivity — does 0.8–0.9 amplitude matter under Adam's rescaling?) | | C5 | shrinkage compensation: none | per-block grad-norm rebalance to BP profile (one-time calibration) | | C6 | B4-winner energy weighting | raw | Placement: 1080 farm **after a Pascal canary** (cascade-EP is a new workload class; the Pascal pathology ban was derived on looped-EP+regs — do a 800-step canary + cross-env fingerprint first). C256 L6 fits 8 GB (~19M params, ~2-3 GB act). ## Tier 3 — depth/scale rungs (Delta A40 chains) → K4 | ID | design | |---|---| | D1 | **north-star demo re-target**: L12 C512 (≈45M, a real GPT-small shape) cascade-EP vs BP twin — replaces the single-block 33M rung as the flagship demo (task #15) | | D2 | depth ladder at fixed params: L6/C724 vs L12/C512 vs L24/C362 — depth penalty vs BP? | | D3 | T 256→512 sanity (relax cost tracks attention; expect no surprise) | ## Tier 4 — analog/hardware arms (port the tolerance machinery) → K5 | ID | design | |---|---| | E1 | Jacobi + per-sweep dynamic noise: does the fnoise ≥1e-3 cliff reappear in cascade relaxation? | | E2 | Jᵀ ablation: replace J_lᵀe with fixed random Bᵀ (feedback-alignment) / PAR projection — the per-block analog-feasibility tax; FA classically works on shallow stacks, test at L6 | | E3 | static tolerance: wq8/wq6 weights inside relax | ## Sequencing & fleet ``` now: A0.1 + A0.3 + B1-lite (shared local GPU, ~1h) + casc_bp_train ckpt producer (107 free 1080) gate ok → B1 full / B2 / B3 / B4 (local A6000s as arms free; each = minutes-hours) → Pascal canary → C-tier fan-out on 1080 farm (6 arms × 1-2 days) → D1 chains on Delta A40 (queue behind current five lines) E-tier: after C1 lands (tolerance scripts port directly) ``` Naming: `casc_*` runs, wandb project **ept-cascade**. Gates report mean over ≥4 batches. In-flight single-block arms (rescv2, govfloor, fastfull/fastpair, gov_s11-14) continue untouched — they carry the dynamics paper + the two-stage-recipe science; D1 takes over the DEMO role only.