unparallelled commited on
Commit
bc6b6d9
·
verified ·
1 Parent(s): f26ce8d

Upload docs/B4_FULL_EPOCH_32K_RESULTS_2026-09-10.md with huggingface_hub

Browse files
docs/B4_FULL_EPOCH_32K_RESULTS_2026-09-10.md ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # b4 full epoch at 32k -- 2026-09-10
2
+
3
+ Continuation of the 16k->32k YaRN extension through the whole of b4.
4
+
5
+ ## Setup
6
+
7
+ | | |
8
+ |---|---|
9
+ | model | 1.06B (36 layers, d_model 1536, 12q/4kv, hd 128, SwiGLU 4096) |
10
+ | window | 32,768 (YaRN SCALE=2 ORIG_MAXPOS=16384, product == 32768 exactly) |
11
+ | parent | ext32k step 750 (itself extended from l2, the best 16k arm) |
12
+ | data | b4_32768_65536 -- min doc 32,768 == the window, so EVERY sample is one contiguous document |
13
+ | tokens | steps 750 -> 2227 = 1.168 B of b4's 1.171 B train split; b4 seen EXACTLY ONCE, no wrap |
14
+ | batch | B=1 x grad_accum 16 = 524,288 tokens/step, identical to every 16k arm |
15
+ | 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 |
16
+ | hardware | 2x H200, cp=2, peak 107.4 GB of 143 GB |
17
+ | eval | niah_single, N=100, greedy, substring match, one shared haystack (b2_8192_16384 val) |
18
+
19
+ ## Results
20
+
21
+ niah_single accuracy %, +-95% Wilson half-width
22
+
23
+ | step | b4 seen | 8,192 | 16,360 | 32,744 | decayed |
24
+ |---|---|---|---|---|---|
25
+ | 750 | 34% | 60.0 +-9.4 | 45.0 +-9.6 | 27.0 +-8.6 | yes |
26
+ | 1100 | 49% | 55.0 +-9.6 | 40.0 +-9.4 | 24.0 +-8.3 | no |
27
+ | 1650 | 74% | 64.0 +-9.2 | 55.0 +-9.6 | 33.0 +-9.1 | no |
28
+ | **2227** | **100%** | **70.0 +-8.8** | **58.0 +-9.5** | **43.0 +-9.5** | **yes** |
29
+
30
+ The 1100 and 1650 checkpoints sit mid-plateau at constant LR and are UNDECAYED, so
31
+ they understate. Only 750 and 2227 are decayed and mutually comparable -- which is
32
+ why 1100 reads BELOW 750 and is not a regression.
33
+
34
+ ### The comparison: step 750 vs 2227, both decayed
35
+
36
+ | length | 750 | 2227 | delta | combined 95% bar | resolvable |
37
+ |---|---|---|---|---|---|
38
+ | 8,192 | 60.0 | 70.0 | +10.0 | +-12.9 | no |
39
+ | 16,360 | 45.0 | 58.0 | +13.0 | +-13.5 | no |
40
+ | 32,744 | 27.0 | 43.0 | **+16.0** | +-12.8 | **YES** |
41
+
42
+ The gains GROW with length (+10, +13, +16). That is the slope flattening, not a
43
+ uniform lift. Slope on the decayed points: 8k->16k -15.0 -> -12.0 pp/doubling;
44
+ 16k->32k -18.0 -> -15.0.
45
+
46
+ ### 16k retrieval across the project, same harness, matched cache
47
+
48
+ | model | 16,360 |
49
+ |---|---|
50
+ | armA_c (flux, 400 steps) | 33.0 |
51
+ | l2 (b2, 400 steps) | 35.0 |
52
+ | ext32k (b4, 750 steps) | 45.0 |
53
+ | **b4 full epoch (2227 steps)** | **58.0** |
54
+
55
+ ## Conclusion, and what it is not
56
+
57
+ Training steps AT the target length is the lever that moved the slope. Document
58
+ length shifted the intercept only (l3 vs l2 at 16k was +0.0pp); the YaRN cache fix
59
+ was a one-off +27pp at the window boundary; model scale remains untested. The b3
60
+ long arm at 16k found the same thing independently (-29 -> -19 -> -11 pp/doubling
61
+ across 400/1000/2000 steps).
62
+
63
+ Only the 32,744 cell is individually resolvable at N=100. The slope figures are
64
+ derived from two points each and inherit those error bars.
65
+
66
+ ## KNOWN ISSUE -- CP_MAX_LR and CP_MIN_LR do not exist
67
+
68
+ bluscriptCP.cpp hardcodes max_lr=6e-4 (line 131) and min_lr=6e-5 (line 132), and
69
+ the env-parsing block never reads CP_MAX_LR or CP_MIN_LR -- there is not even a
70
+ float env helper. Every script in this project passed them as a no-op. So the real
71
+ schedule has always been 6e-4 * CP_REWARMUP_PEAK(0.3) = 1.8e-4 peak, 6e-5 floor,
72
+ verified from ext32k's log (1.8000e-04 at steps 99..649, 6.0030e-05 at 749).
73
+
74
+ This is benign for comparability: EVERY run in this project used the same values,
75
+ so l1/l2/l3, ext32k, the b3 long arm and this run are all mutually comparable. Only
76
+ prose descriptions of the LR were wrong. The LR was deliberately NOT changed here,
77
+ because doing so would have broken continuity with ext32k's first 750 steps.
78
+
79
+ ## The resume that required the sidecar
80
+
81
+ A first attempt at this continuation was aborted at step 763. The .zero_g1
82
+ optimizer sidecar had not been uploaded with the step-750 checkpoint, and per
83
+ bluscriptCP.cpp:2032 a bf16 run then "resumes with group 1's Adam m/v at zero".
84
+ Observed effect: loss 2.95 -> 5.52 at the first optimizer step, gradient norm
85
+ 0.15 -> 9.55. After recovering the sidecar from the original instance the same
86
+ resume gave loss 2.95 -> 3.16, norm 0.15 -> 0.18, and the run completed with
87
+ median norm 0.20. ALWAYS upload the .zero_g1 sidecar alongside the .ckpt.
88
+
89
+ ## Raw eval output
90
+
91
+ ### step 1100, PROMPT_LEN=8192
92
+ ```
93
+ task,b4c1100
94
+ niah_single,55.0
95
+ ```
96
+
97
+ ### step 1100, PROMPT_LEN=16360
98
+ ```
99
+ task,b4c1100
100
+ niah_single,40.0
101
+ ```
102
+
103
+ ### step 1100, PROMPT_LEN=32744
104
+ ```
105
+ task,b4c1100
106
+ niah_single,24.0
107
+ ```
108
+
109
+ ### step 1650, PROMPT_LEN=8192
110
+ ```
111
+ task,b4c1650
112
+ niah_single,64.0
113
+ ```
114
+
115
+ ### step 1650, PROMPT_LEN=16360
116
+ ```
117
+ task,b4c1650
118
+ niah_single,55.0
119
+ ```
120
+
121
+ ### step 1650, PROMPT_LEN=32744
122
+ ```
123
+ task,b4c1650
124
+ niah_single,33.0
125
+ ```
126
+
127
+ ### step 2227, PROMPT_LEN=8192
128
+ ```
129
+ task,b4c2227
130
+ niah_single,70.0
131
+ ```
132
+
133
+ ### step 2227, PROMPT_LEN=16360
134
+ ```
135
+ task,b4c2227
136
+ niah_single,58.0
137
+ ```
138
+
139
+ ### step 2227, PROMPT_LEN=32744
140
+ ```
141
+ task,b4c2227
142
+ niah_single,43.0
143
+ ```
144
+