Upload vault/Reports/ClaudeReport_session_2026-09-19_adamw_const_ablation.md with huggingface_hub
Browse files
vault/Reports/ClaudeReport_session_2026-09-19_adamw_const_ablation.md
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 2026-09-19 - AdamW-only control arm (8e-5 constant), cut at step 400
|
| 2 |
+
|
| 3 |
+
Workspace: Context_Parallelism (1x H200)
|
| 4 |
+
Files: abl_phase1.sh, go_adamw.sh, cut400.sh, mk_lineage_680m.py, teardown_ship.sh
|
| 5 |
+
|
| 6 |
+
## Purpose
|
| 7 |
+
|
| 8 |
+
The 2026-09-18 ablation changed two variables at once: optimizer (Muon vs AdamW)
|
| 9 |
+
and LR (8e-5 vs 1.8e-4). This run holds LR fixed at 8e-5 constant and runs AdamW
|
| 10 |
+
only, so the optimizer is the single free variable.
|
| 11 |
+
|
| 12 |
+
## Build blocker resolved first
|
| 13 |
+
|
| 14 |
+
libtensor would not compile on this box. 46 instances of one error, zero .cu
|
| 15 |
+
files compiled:
|
| 16 |
+
|
| 17 |
+
mathcalls.h(206): error: exception specification is incompatible with that
|
| 18 |
+
of previous function "rsqrt" (crt/math_functions.h:629)
|
| 19 |
+
|
| 20 |
+
Cause: this box ships glibc 2.43 (kernel 7.0.0-31, gcc 15.2). glibc 2.41+ adds
|
| 21 |
+
C23 rsqrt/rsqrtf declared with __THROW; CUDA 13.0 (Aug 2025) declares the same
|
| 22 |
+
names without an exception specification. Every CUDA translation unit failed.
|
| 23 |
+
Earlier boxes had older glibc, so this never appeared before.
|
| 24 |
+
|
| 25 |
+
The tail of build.log was misleading: it showed a "gathered_idx < 0" line from
|
| 26 |
+
IndexingOps.cu, which is only warning #186-D. The "2 errors" in that file were
|
| 27 |
+
its own rsqrt/rsqrtf pair.
|
| 28 |
+
|
| 29 |
+
No clean off-switch exists - the feature macro is driven by __USE_GNU and is
|
| 30 |
+
#undef'd first, so -D on the command line is wiped. Fix applied: guarded glibc's
|
| 31 |
+
single declaration in /usr/include/x86_64-linux-gnu/bits/mathcalls.h:206 behind
|
| 32 |
+
#ifndef __CUDACC__. Verified a .cu and a .cpp including cuda_runtime.h both
|
| 33 |
+
compile. libtensor.a (80 MB) and bluscriptCP_exec (28.3 MB) built with 0 errors.
|
| 34 |
+
|
| 35 |
+
NOTE: this patch lives in /usr/include on an ephemeral box. It dies with the
|
| 36 |
+
instance and must be reapplied on any box with glibc >= 2.41.
|
| 37 |
+
|
| 38 |
+
## Run configuration, verified not assumed
|
| 39 |
+
|
| 40 |
+
- [ZeRO-1] optimizer=adamw (not MUON+adamw-aux)
|
| 41 |
+
- CP_OPTIMIZER absent from the launch env (0 occurrences) - negative control
|
| 42 |
+
- mix b3=320011377 tokens, token-identical to p1mix
|
| 43 |
+
- lr 8.0000e-05 flat after 12 warmup steps (1% of 1200)
|
| 44 |
+
- all four arms start at loss 2.731203 from parent varybatch
|
| 45 |
+
- 43k tok/s, 78.5 of 143.8 GB, grad norm 0.29-0.37 throughout
|
| 46 |
+
|
| 47 |
+
Cut at step 399 (the 400th step, 0-indexed) after the step-400 checkpoint was
|
| 48 |
+
confirmed written safely. GPU released to 0 MiB.
|
| 49 |
+
|
| 50 |
+
## Result: matched-step 50-step rolling mean
|
| 51 |
+
|
| 52 |
+
arm 99 199 299 399
|
| 53 |
+
p1final Muon 1.8e-4 2.5969 2.6673 2.6668 2.6299
|
| 54 |
+
const Muon 8e-5 2.5593 2.6083 2.6037 2.5670
|
| 55 |
+
cosine Muon 8e-5 2.5593 2.6080 2.6028 2.5655
|
| 56 |
+
const AdamW 8e-5 2.5825 2.6317 2.6283 2.5923
|
| 57 |
+
|
| 58 |
+
At identical LR, identical data order and identical parent, AdamW is worse than
|
| 59 |
+
Muon by +0.0254 nats at step 399. The gap is stable across all four sample
|
| 60 |
+
points (+0.023, +0.023, +0.025, +0.025), so it is not noise.
|
| 61 |
+
|
| 62 |
+
The two variables the 09-18 ablation confounded now separate cleanly:
|
| 63 |
+
- LR 1.8e-4 -> 8e-5 (Muon held): -0.063 nats (helps, the larger effect)
|
| 64 |
+
- Muon -> AdamW (LR held at 8e-5): +0.025 nats (hurts)
|
| 65 |
+
|
| 66 |
+
## Caveat
|
| 67 |
+
|
| 68 |
+
This is training loss, not retrieval. The 09-18 result was that LR schedule
|
| 69 |
+
shape is a null on retrieval (+1/+1/+2pp). A 0.025 nat training-loss gap is
|
| 70 |
+
small and may not move retrieval at all. No eval was run on this arm - it was
|
| 71 |
+
cut at 400 of 1200 steps, so there is no comparable end-of-phase checkpoint.
|
| 72 |
+
|
| 73 |
+
## Artifacts on HF (unparallelled/BluScriptCP), all size-verified
|
| 74 |
+
|
| 75 |
+
- checkpoints/adamw_const_8e5_step_400.ckpt and .zero_g1
|
| 76 |
+
- checkpoints/adamw_const_8e5_step_200.ckpt and .zero_g1
|
| 77 |
+
- logs/2026-09-19_adamw_const_{train,probe,master}.log
|
| 78 |
+
- logs/2026-09-19_libtensor_build_glibc243.log
|
| 79 |
+
- plots/2026-09-19_lineage_680m_phase1.png
|
| 80 |
+
- scripts/{mk_lineage_680m.py,abl_phase1.sh,go_adamw.sh,cut400.sh}
|