Views
No views yet
W=0 reference arm of a study on when to
introduce a new data distribution (code) during pretraining; the checkpoints are the fork points
from which code-mixed branches are launched.| architecture | pythia-1b (GPT-NeoX), 1,011,781,632 parameters |
| tokenizer | Pythia / GPT-NeoX, padded vocab 50277 |
| data | C4 (en) only, no code, no math |
| tokens | 60B (30,518 steps) |
| sequence length | 2048 |
| global batch | 960 sequences = 1,966,080 tokens/step |
| LR schedule | cosine, peak 3e-4 → min 3e-5 (floor is exactly 10% of peak) |
| warmup | 10% of the horizon = 6B tokens, linear |
| optimizer | AdamW |
| precision | bf16 autocast, fp32 master weights |
trunk/ holds the end of warmup; branch_A/ continues 6B → 60B.| file | tokens | step | phase |
|---|---|---|---|
trunk/trunk_branchpoint.pt | 6.00B | 3052 | end of warmup, LR at peak |
trunk/trunk_6.00B_step3052.pt | 6.00B | 3052 | same point, snapshot name |
branch_A/branch_A_9.00B_step4578.pt | 9.00B | 4578 | cosine decay |
branch_A/branch_A_12.00B_step6104.pt | 12.00B | 6104 | |
branch_A/branch_A_15.00B_step7630.pt | 15.00B | 7630 | |
branch_A/branch_A_18.00B_step9156.pt | 18.00B | 9156 | |
branch_A/branch_A_21.00B_step10682.pt | 21.00B | 10682 | |
branch_A/branch_A_24.00B_step12208.pt | 24.00B | 12208 | |
branch_A/branch_A_27.00B_step13733.pt | 27.00B | 13733 | |
branch_A/branch_A_30.00B_step15259.pt | 30.00B | 15259 | |
branch_A/branch_A_33.00B_step16785.pt | 33.00B | 16785 | |
branch_A/branch_A_36.00B_step18311.pt | 36.00B | 18311 | |
branch_A/branch_A_42.00B_step21363.pt | 42.00B | 21363 | |
branch_A/branch_A_48.00B_step24415.pt | 48.00B | 24415 | |
branch_A/branch_A_54.00B_step27466.pt | 54.00B | 27466 | |
branch_A/branch_A_57.00B_step28992.pt | 57.00B | 28992 | |
branch_A/branch_A_58.50B_step29755.pt | 58.50B | 29755 | |
branch_A/branch_A_60.00B_step30518.pt | 60.00B | 30518 | final, LR at 3e-5 |
exp_avg, exp_avg_sq) except the 60B final,
which is weights-only. That is why the final is ~4 GB while the rest are ~12 GB: it is the
terminal checkpoint, meant for evaluation and fine-tuning rather than for continuing training.
The 4 GB file is complete and not truncated..pt is a torch.save dict:1{
2 "model": state_dict, # litgpt GPT, GPT-NeoX layout
3 "optimizer": state_dict, # AdamW; ABSENT in the 60B final
4 "completed_steps": int,
5 "global_tokens": int, # absolute token count, keys the LR schedule
6 "config": dict, # full run config
7 "torch_rng": ..., "numpy_rng": ...,
8 "val_c4": float, "val_code": float, # held-out losses at that snapshot
9}1import torch
2ck = torch.load("branch_A/branch_A_60.00B_step30518.pt", map_location="cpu", weights_only=False)
3print(ck["global_tokens"], ck["val_c4"])
4state = ck["model"] # GPT-NeoX parameter layouttransformers checkpoints, so
AutoModelForCausalLM.from_pretrained will not read them directly. The parameter layout is
standard GPT-NeoX and converts mechanically.pythia-70m/c4/, which serves the whole Pythia suite since all sizes share one tokenizer)
concatenated with 20.0B disjoint tokens from later C4 shards. Blocks are consumed in a fixed
seed-1 permutation, so the first 40.1B of this run's stream matches the published pool exactly.