summaryrefslogtreecommitdiff
path: root/docs/campaign/CASCADE_ABLATION_PLAN.md
blob: 5c10dd9695a3611bc3b5b85e411038f5305ff2bc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# 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.

---

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