BluScriptCP / logs /b4cont /RESULTS.md
unparallelled's picture
Upload folder using huggingface_hub
6e0358e verified
|
Raw History Blame Contribute Delete
4.83 kB
# b4 full epoch at 32k -- 2026-09-10
Continuation of the 16k->32k YaRN extension through the whole of b4.
## Setup
| | |
|---|---|
| model | 1.06B (36 layers, d_model 1536, 12q/4kv, hd 128, SwiGLU 4096) |
| window | 32,768 (YaRN SCALE=2 ORIG_MAXPOS=16384, product == 32768 exactly) |
| parent | ext32k step 750 (itself extended from l2, the best 16k arm) |
| data | b4_32768_65536 -- min doc 32,768 == the window, so EVERY sample is one contiguous document |
| tokens | steps 750 -> 2227 = 1.168 B of b4's 1.171 B train split; b4 seen EXACTLY ONCE, no wrap |
| batch | B=1 x grad_accum 16 = 524,288 tokens/step, identical to every 16k arm |
| LR | peak 1.8e-4, floor 6e-5 (see the note below), WSD: re-warm 100 from step 750, flat to 2027, 200-step decay tail |
| hardware | 2x H200, cp=2, peak 107.4 GB of 143 GB |
| eval | niah_single, N=100, greedy, substring match, one shared haystack (b2_8192_16384 val) |
## Results
niah_single accuracy %, +-95% Wilson half-width
| step | b4 seen | 8,192 | 16,360 | 32,744 | decayed |
|---|---|---|---|---|---|
| 750 | 34% | 60.0 +-9.4 | 45.0 +-9.6 | 27.0 +-8.6 | yes |
| 1100 | 49% | 55.0 +-9.6 | 40.0 +-9.4 | 24.0 +-8.3 | no |
| 1650 | 74% | 64.0 +-9.2 | 55.0 +-9.6 | 33.0 +-9.1 | no |
| **2227** | **100%** | **70.0 +-8.8** | **58.0 +-9.5** | **43.0 +-9.5** | **yes** |
The 1100 and 1650 checkpoints sit mid-plateau at constant LR and are UNDECAYED, so
they understate. Only 750 and 2227 are decayed and mutually comparable -- which is
why 1100 reads BELOW 750 and is not a regression.
### The comparison: step 750 vs 2227, both decayed
| length | 750 | 2227 | delta | combined 95% bar | resolvable |
|---|---|---|---|---|---|
| 8,192 | 60.0 | 70.0 | +10.0 | +-12.9 | no |
| 16,360 | 45.0 | 58.0 | +13.0 | +-13.5 | no |
| 32,744 | 27.0 | 43.0 | **+16.0** | +-12.8 | **YES** |
The gains GROW with length (+10, +13, +16). That is the slope flattening, not a
uniform lift. Slope on the decayed points: 8k->16k -15.0 -> -12.0 pp/doubling;
16k->32k -18.0 -> -15.0.
### 16k retrieval across the project, same harness, matched cache
| model | 16,360 |
|---|---|
| armA_c (flux, 400 steps) | 33.0 |
| l2 (b2, 400 steps) | 35.0 |
| ext32k (b4, 750 steps) | 45.0 |
| **b4 full epoch (2227 steps)** | **58.0** |
## Conclusion, and what it is not
Training steps AT the target length is the lever that moved the slope. Document
length shifted the intercept only (l3 vs l2 at 16k was +0.0pp); the YaRN cache fix
was a one-off +27pp at the window boundary; model scale remains untested. The b3
long arm at 16k found the same thing independently (-29 -> -19 -> -11 pp/doubling
across 400/1000/2000 steps).
Only the 32,744 cell is individually resolvable at N=100. The slope figures are
derived from two points each and inherit those error bars.
## KNOWN ISSUE -- CP_MAX_LR and CP_MIN_LR do not exist
bluscriptCP.cpp hardcodes max_lr=6e-4 (line 131) and min_lr=6e-5 (line 132), and
the env-parsing block never reads CP_MAX_LR or CP_MIN_LR -- there is not even a
float env helper. Every script in this project passed them as a no-op. So the real
schedule has always been 6e-4 * CP_REWARMUP_PEAK(0.3) = 1.8e-4 peak, 6e-5 floor,
verified from ext32k's log (1.8000e-04 at steps 99..649, 6.0030e-05 at 749).
This is benign for comparability: EVERY run in this project used the same values,
so l1/l2/l3, ext32k, the b3 long arm and this run are all mutually comparable. Only
prose descriptions of the LR were wrong. The LR was deliberately NOT changed here,
because doing so would have broken continuity with ext32k's first 750 steps.
## The resume that required the sidecar
A first attempt at this continuation was aborted at step 763. The .zero_g1
optimizer sidecar had not been uploaded with the step-750 checkpoint, and per
bluscriptCP.cpp:2032 a bf16 run then "resumes with group 1's Adam m/v at zero".
Observed effect: loss 2.95 -> 5.52 at the first optimizer step, gradient norm
0.15 -> 9.55. After recovering the sidecar from the original instance the same
resume gave loss 2.95 -> 3.16, norm 0.15 -> 0.18, and the run completed with
median norm 0.20. ALWAYS upload the .zero_g1 sidecar alongside the .ckpt.
## Raw eval output
### step 1100, PROMPT_LEN=8192
```
task,b4c1100
niah_single,55.0
```
### step 1100, PROMPT_LEN=16360
```
task,b4c1100
niah_single,40.0
```
### step 1100, PROMPT_LEN=32744
```
task,b4c1100
niah_single,24.0
```
### step 1650, PROMPT_LEN=8192
```
task,b4c1650
niah_single,64.0
```
### step 1650, PROMPT_LEN=16360
```
task,b4c1650
niah_single,55.0
```
### step 1650, PROMPT_LEN=32744
```
task,b4c1650
niah_single,33.0
```
### step 2227, PROMPT_LEN=8192
```
task,b4c2227
niah_single,70.0
```
### step 2227, PROMPT_LEN=16360
```
task,b4c2227
niah_single,58.0
```
### step 2227, PROMPT_LEN=32744
```
task,b4c2227
niah_single,43.0
```