diff options
| -rw-r--r-- | docs/campaign/CASCADE_ABLATION_PLAN.md | 16 | ||||
| -rw-r--r-- | ep_run/casc_eq_train.py | 8 |
2 files changed, 23 insertions, 1 deletions
diff --git a/docs/campaign/CASCADE_ABLATION_PLAN.md b/docs/campaign/CASCADE_ABLATION_PLAN.md index 70a9adc..503a321 100644 --- a/docs/campaign/CASCADE_ABLATION_PLAN.md +++ b/docs/campaign/CASCADE_ABLATION_PLAN.md @@ -1916,3 +1916,19 @@ Matched 三口径(同窗 434-440k, n=61/臂): - 若地板论成立: dgain 整套装置可退役, 修复=状态路径 fp64/补偿求和; LM 尺度 EP gap 的很大一块重述为 模拟器精度伪影; 硬件叙事反而加强(基底加性地板的通用设计律: 逐层 nudge 位移必须清过地板 — 板上 测量2的数字孪生)。1B 迁移律候选: 一次自由相测 disp_ratio 剖面即得逐层规格, 零训练。 + +## RESULT 77 (2026-07-30): fp32 地板理论三箭全中 — "物理泄漏"死亡, 改判模拟器伪影 +- **fp64 决定臂**: 上半泄漏 −0.703/−0.585/−0.339/−0.364/−0.317/−0.225 → 全部 ±0.003 内, rel 0.89→0.02。 + 双精度下泄漏完全消失。**泄漏 = fp32 状态算术伪影, 非 EP 性质, 非模型物理。** +- **β-scan 平移验证**: β/8 → 病块全面加深(块6 −0.945), 块5 ratio 落到 1.51e-7 压线开始转病(rel 5×); + β×8 → 块6-8 痊愈(−0.02), 底层出现预期 β² 污染。边界随 β 精确平移, 与地板论定量一致。 +- **叙事重写**: C512→C768 冻结配方失效 = 宽度增大 → RMS(z) 增大 → 相对位移跌破 fp32 eps 的伪影 + 随宽度加重。"EP 的宽度墙"不存在; 存在的是模拟器的读出地板。dgain 重新定性: 不是新算法, 是无意中 + 绕开舍入的数值 workaround(它把 (z−o) 抬回 eps 之上)。geo 电池已撤(给 bug 配剂量无意义)。 +- **候选零成本修复 --read_lin(已实装, 验证中)**: 读出恒等式 z−o=d 的两侧数值不等价 — (z−o) 是 d 的 + fp32 舍入副本(亚 eps 分量被 o 的量级抹零), 而 d 张量自己全程满精度。把读出从 0.5‖z−o‖² 换成代数 + 恒等的 −⟨d,o⟩ 线性形式 → θ-导数逐项相同但绕开舍入。tiny 冒烟与 fp64 臂读数一致; C768 fp32 验证 + 探针在飞(GPU3)。若确认: dgain 全套退役, 修复零成本零开销, 全配方回炉重测真 gap。 +- **硬件含义(为 Dillavou 通话)**: 这就是"读出必须差分"的数字版 — 对比读数要直接测差(d), 不能减两个 + 大数((o+d)−o); 板上对应相关双采样/差分读出。基底加性地板设计律获得数字孪生实证。 +- 1B 迁移: 逐层 disp_ratio(一次自由相可测)+基底地板 → 逐层安全裕度表, 零训练。 diff --git a/ep_run/casc_eq_train.py b/ep_run/casc_eq_train.py index 76b96fd..3cb9494 100644 --- a/ep_run/casc_eq_train.py +++ b/ep_run/casc_eq_train.py @@ -56,6 +56,9 @@ ap.add_argument('--dgain_rand', type=float, default=0.0) ap.add_argument('--probe_dgspec', type=int, default=0) # >0: M1 spectroscopy, value = n batches; exits before training ap.add_argument('--probe_gains', default='1,2,4,8,16,32,64,128,256') ap.add_argument('--probe_f64', action='store_true') # fp64 states+model in the probe: the fp-floor decisive arm # >1: per-STEP log-uniform dgain_top in +ap.add_argument('--read_lin', action='store_true') # linear-form theta-read: cotangent = the stored d tensor (full + # precision) instead of (z - o) (an fp32-ROUNDED copy of d); + # algebraically identical via the read identity z - o = d # [1, this] (spread-spectrum probing of the # decade-spread threshold distribution) ap.add_argument('--dgain_top', type=float, default=1.0) # amplify d in STATE FORMATION for blocks @@ -892,7 +895,10 @@ if args.probe_dgspec > 0: for l in range(args.L): disp[l] += float(GOV['_last_d'][l].norm() / max(float(zp[l].norm()), 1e-12)) / NB E = 0.0 - for z, o in zip(zp, lo): E = E + 0.5 * ((z.detach().to(SDT) - o.to(SDT)) ** 2).sum() + if args.read_lin: + for dl, o in zip(GOV['_last_d'], lo): E = E - (dl.detach().to(SDT) * o.to(SDT)).sum() + else: + for z, o in zip(zp, lo): E = E + 0.5 * ((z.detach().to(SDT) - o.to(SDT)) ** 2).sum() obj = E / (NBT * bt) + obj_loss(readout(zp[-1].detach()).reshape(-1, vocab), y.reshape(-1)) gs = torch.autograd.grad(obj, all_params, allow_unused=True) for j, ix in enumerate(bix): |
