All training runs / GPT-2 small / RTX 3070
GPT-2 small Training monitor
124,439,808 parameters · written in Alpha, compiled to sm_86 machine code with no CUDA runtime · one rented RTX 3070
OpenAI's 2019 GPT-2 small, trained from fresh weights in two runs: 9.03 billion tokens of OpenWebText at a constant learning rate, which stalled at a loss of 4.29, then Andrej Karpathy's llm.c reproduction recipe on FineWeb (half-million-token updates, a warmup and a cosine decay), continuing the same weights. This page follows the second run live and keeps the first run's record.
- Progress
- 12,985 / 18,865 68.8% of the FineWeb recipe's updates · invocation 494 of 517
- Validation loss
- 3.485 FineWeb, 1,280 windows · 5.087 at the start · llm.c ends near 3.28
- Training loss
- 3.540 the latest update's 512 windows, before each update
- HellaSwag
- 28.4% acc_norm at update 12,495 · chance 25% · llm.c 29.9%
- Learning rate
- 1.42e-4 peak 6e-4 after 700 updates, then a cosine to 0
- Throughput
- 38,877 tok/s 4.45 updates a minute · 524,288 tokens an update
- Expected finish
- 16 Oct 00:52 UTC 22 h 59 min left at 57 minutes an invocation once it runs again
- Tokens trained
- 15.84B 9.03B OpenWebText, then 6.81B of FineWeb's 10.25B
Learning
Validation loss is the measure to watch: the same FineWeb text scored after every invocation. Training loss is noisier; HellaSwag moves slowly and is scored every 4th invocation.
Validation loss
Training loss
Learning rate
HellaSwag
Both runs
The same weights throughout: 9.03B tokens of OpenWebText, then FineWeb under llm.c's recipe. On text neither run trained on, the first five FineWeb invocations did more than the OpenWebText run's last 6.5 billion tokens.
| Checkpoint | Run | Tokens | Held-out loss | Bits per byte | GPU hours |
|---|---|---|---|---|---|
| owt-step-375000 | OpenWebText | 1.54B | 4.4169 ± 0.0142 | 1.4417 | 25.2 |
| owt-step-500000 | OpenWebText | 2.05B | 4.3355 ± 0.0142 | 1.4151 | 31.1 |
| owt-step-625000 | OpenWebText | 2.56B | 4.3217 ± 0.0140 | 1.4107 | 36.9 |
| owt-step-750000 | OpenWebText | 3.07B | 4.3221 ± 0.0143 | 1.4108 | 42.8 |
| owt-step-875000 | OpenWebText | 3.58B | 4.2881 ± 0.0139 | 1.3997 | 48.2 |
| owt-step-1000000 | OpenWebText | 4.1B | 4.3013 ± 0.0143 | 1.4040 | 52.9 |
| owt-step-1125000 | OpenWebText | 4.61B | 4.2872 ± 0.0140 | 1.3994 | 57.6 |
| owt-step-1250000 | OpenWebText | 5.12B | 4.2908 ± 0.0141 | 1.4006 | 62.0 |
| owt-step-1375000 | OpenWebText | 5.63B | 4.2900 ± 0.0142 | 1.4003 | 66.2 |
| owt-step-1500000 | OpenWebText | 6.14B | 4.2799 ± 0.0140 | 1.3970 | 70.2 |
| owt-step-1625000 | OpenWebText | 6.66B | 4.2737 ± 0.0142 | 1.3950 | 74.1 |
| owt-step-1750000 | OpenWebText | 7.17B | 4.2759 ± 0.0141 | 1.3957 | 78.0 |
| owt-step-1875000 | OpenWebText | 7.68B | 4.2831 ± 0.0140 | 1.3980 | 81.9 |
| owt-step-2000000 | OpenWebText | 8.19B | 4.2963 ± 0.0142 | 1.4024 | 85.9 |
| owt-step-2125000 | OpenWebText | 8.7B | 4.2839 ± 0.0142 | 1.3983 | 89.8 |
| owt-step-2205000 | OpenWebText | 9.03B | 4.2781 ± 0.0141 | 1.3964 | 92.3 |
| fineweb-step-109270 | FineWeb recipe | 9.67B | 3.7461 ± 0.0108 | 1.2228 | 96.9 |
Invocations
The run advances one invocation at a time: 245 updates (128.45M tokens) from the newest checkpoint, then a validation score, HellaSwag every 4th and samples every 4th. A supervisor on the pod starts the next; a watchdog on the server starts the pod again if RunPod stops it, and the supervisor if the pod restarts.
| Invocation | Updates past origin | Started | Duration | Tokens/s | Training loss | Validation | HellaSwag | GPU energy | State |
|---|---|---|---|---|---|---|---|---|---|
| 494 | 12,985–13,230 | 15 Oct 01:36 UTC | — | — | — | — | — | 0.001 kWh | interrupted |
| 493 | 12,740–12,985 | 15 Oct 00:40 UTC | 55 min | 38,877 | 3.4640 | 3.4854 | — | 0.200 kWh | complete |
| 492 | 12,495–12,740 | 14 Oct 23:45 UTC | 55 min | 38,936 | 3.4362 | 3.4294 | — | 0.199 kWh | complete |
| 491 | 12,250–12,495 | 14 Oct 22:42 UTC | 55 min | 38,889 | 3.4801 | 3.4690 | 28.38% | 0.200 kWh | complete |
| 490 | 12,005–12,250 | 14 Oct 21:46 UTC | 55 min | 38,819 | 3.4553 | 3.4390 | — | 0.200 kWh | complete |
| 489 | 11,760–12,005 | 14 Oct 20:51 UTC | 55 min | 38,819 | 3.4506 | 3.4394 | — | 0.200 kWh | complete |
| 488 | 11,515–11,760 | 14 Oct 19:55 UTC | 55 min | 38,866 | 3.4310 | 3.4460 | — | 0.200 kWh | complete |
| 487 | 11,270–11,515 | 14 Oct 18:52 UTC | 55 min | 38,830 | 3.8376 | 3.8055 | 27.63% | 0.200 kWh | complete |
| 486 | 11,025–11,270 | 14 Oct 17:56 UTC | 55 min | 38,807 | 3.4541 | 3.4359 | — | 0.200 kWh | complete |
| 485 | 10,780–11,025 | 14 Oct 17:01 UTC | 55 min | 38,819 | 3.4490 | 3.4482 | — | 0.200 kWh | complete |
| 484 | 10,535–10,780 | 14 Oct 16:04 UTC | 55 min | 38,830 | 3.5075 | 3.4746 | — | 0.200 kWh | complete |
| 483 | 10,290–10,535 | 14 Oct 15:02 UTC | 55 min | 38,772 | 3.4476 | 3.4400 | 28.77% | 0.200 kWh | complete |
| 482 | 10,045–10,290 | 14 Oct 14:06 UTC | 55 min | 38,854 | 3.4577 | 3.4323 | — | 0.200 kWh | complete |
| 481 | 9,800–10,045 | 14 Oct 13:10 UTC | 55 min | 38,772 | 3.4534 | 3.4512 | — | 0.200 kWh | complete |
| 480 | 9,555–9,800 | 14 Oct 12:14 UTC | 55 min | 38,725 | 3.4660 | 3.4704 | — | 0.200 kWh | complete |
| 479 | 9,310–9,555 | 14 Oct 11:11 UTC | 55 min | 38,620 | 3.5939 | 3.5744 | 27.65% | 0.200 kWh | complete |
| 478 | 9,065–9,310 | 14 Oct 10:15 UTC | 55 min | 38,643 | 3.4100 | 3.4205 | — | 0.200 kWh | complete |
| 477 | 8,820–9,065 | 14 Oct 09:19 UTC | 55 min | 38,597 | 3.4115 | 3.4099 | — | 0.200 kWh | complete |
| 476 | 8,575–8,820 | 14 Oct 08:23 UTC | 55 min | 38,609 | 3.4436 | 3.4265 | — | 0.200 kWh | complete |
| 475 | 8,330–8,575 | 14 Oct 07:20 UTC | 56 min | 38,562 | 3.3740 | 3.3738 | 29.00% | 0.202 kWh | complete |
| 474 | 8,085–8,330 | 14 Oct 06:24 UTC | 55 min | 38,620 | 3.3941 | 3.3781 | — | 0.200 kWh | complete |
| 473 | 7,840–8,085 | 14 Oct 05:28 UTC | 55 min | 38,667 | 3.3998 | 3.3809 | — | 0.200 kWh | complete |
| 472 | 7,595–7,840 | 14 Oct 04:32 UTC | 55 min | 38,690 | 3.3714 | 3.3825 | — | 0.200 kWh | complete |
| 471 | 7,350–7,595 | 14 Oct 03:29 UTC | 55 min | 38,620 | 3.3890 | 3.3858 | 28.73% | 0.200 kWh | complete |
| 470 | 7,105–7,350 | 14 Oct 02:33 UTC | 55 min | 38,667 | 3.3865 | 3.3897 | — | 0.200 kWh | complete |
| 469 | 6,860–7,105 | 14 Oct 01:37 UTC | 55 min | 38,667 | 3.4174 | 3.3957 | — | 0.200 kWh | complete |
| 468 | 6,615–6,860 | 14 Oct 00:41 UTC | 55 min | 38,620 | 3.3959 | 3.3979 | — | 0.200 kWh | complete |
| 467 | 6,370–6,615 | 13 Oct 23:38 UTC | 56 min | 38,343 | 3.4352 | 3.4034 | 28.63% | 0.202 kWh | complete |
| 466 | 6,125–6,370 | 13 Oct 22:40 UTC | 57 min | 37,757 | 3.4080 | 3.4073 | — | 0.206 kWh | complete |
| 465 | 5,880–6,125 | 13 Oct 21:42 UTC | 58 min | 36,985 | 3.4099 | 3.4125 | — | 0.209 kWh | complete |
| 464 | 5,635–5,880 | 13 Oct 20:43 UTC | 58 min | 36,711 | 3.4177 | 3.4170 | — | 0.210 kWh | complete |
| 463 | 5,390–5,635 | 13 Oct 19:37 UTC | 58 min | 36,795 | 3.4213 | 3.4261 | 28.08% | 0.211 kWh | complete |
| 462 | 5,145–5,390 | 13 Oct 18:39 UTC | 57 min | 37,449 | 3.4223 | 3.4319 | — | 0.208 kWh | complete |
| 461 | 4,900–5,145 | 13 Oct 17:41 UTC | 57 min | 37,691 | 3.4496 | 3.4340 | — | 0.206 kWh | complete |
| 460 | 4,655–4,900 | 13 Oct 16:44 UTC | 56 min | 37,992 | 3.4373 | 3.4365 | — | 0.204 kWh | complete |
| 459 | 4,410–4,655 | 13 Oct 15:40 UTC | 56 min | 38,161 | 3.4393 | 3.4423 | 28.39% | 0.204 kWh | complete |
| 458 | 4,165–4,410 | 13 Oct 14:44 UTC | 56 min | 38,309 | 3.4348 | 3.4477 | — | 0.202 kWh | complete |
| 457 | 3,920–4,165 | 13 Oct 13:47 UTC | 56 min | 38,378 | 3.4741 | 3.4555 | — | 0.202 kWh | complete |
| 456 | 3,675–3,920 | 13 Oct 12:51 UTC | 56 min | 38,574 | 3.4684 | 3.4610 | — | 0.200 kWh | complete |
| 455 | 3,430–3,675 | 13 Oct 11:48 UTC | 56 min | 38,562 | 3.4803 | 3.4703 | 27.38% | 0.202 kWh | complete |
| 454 | 3,185–3,430 | 13 Oct 10:52 UTC | 55 min | 38,609 | 3.4878 | 3.4778 | — | 0.200 kWh | complete |
| 453 | 2,940–3,185 | 13 Oct 09:56 UTC | 55 min | 38,643 | 3.5002 | 3.4863 | — | 0.200 kWh | complete |
| 452 | 2,695–2,940 | 13 Oct 08:59 UTC | 56 min | 38,481 | 3.5045 | 3.5069 | — | 0.202 kWh | complete |
| 451 | 2,450–2,695 | 13 Oct 07:56 UTC | 56 min | 38,527 | 3.5140 | 3.5114 | 27.58% | 0.202 kWh | complete |
| 450 | 2,205–2,450 | 13 Oct 07:00 UTC | 56 min | 38,539 | 3.5334 | 3.5268 | — | 0.202 kWh | complete |
| 449 | 1,960–2,205 | 13 Oct 06:04 UTC | 56 min | 38,493 | 3.5439 | 3.5402 | — | 0.202 kWh | complete |
| 448 | 1,715–1,960 | 13 Oct 05:08 UTC | 56 min | 38,516 | 3.5662 | 3.5668 | — | 0.202 kWh | complete |
| 447 | 1,470–1,715 | 13 Oct 04:05 UTC | 56 min | 38,207 | 3.5654 | 3.5598 | 26.92% | 0.204 kWh | complete |
| 446 | 1,225–1,470 | 13 Oct 03:08 UTC | 56 min | 38,378 | 3.5930 | 3.5818 | — | 0.202 kWh | complete |
| 445 | 980–1,225 | 11 Oct 03:46 UTC | 56 min | 38,470 | 3.6159 | 3.6173 | — | 0.202 kWh | complete (records lost) |
| 444 | 735–980 | 11 Oct 02:36 UTC | 56 min | 38,562 | 3.6461 | 3.6409 | — | 0.201 kWh | complete (records lost) |
| 443 | 490–735 | 11 Oct 01:37 UTC | 56 min | 38,447 | 3.7060 | 3.6964 | — | 0.202 kWh | complete (records lost) |
| 442 | 245–490 | 11 Oct 00:26 UTC | 56 min | 38,252 | 3.7281 | 3.7415 | — | 0.202 kWh | complete (records lost) |
| 441 | 0–245 | 10 Oct 23:27 UTC | 57 min | 37,713 | 3.8936 | 3.8833 | — | 0.206 kWh | complete (records lost) |
Training loss is the mean of an invocation's last 2,000 windows (for the running one, of its newest 2,000). The first five invocations ran on another pod, whose run directory was later deleted; their timings, losses and GPU samples survive in the controller's log and a copy of their monitor files.
On the device
NVIDIA GeForce RTX 3070 (8 GiB) on the RunPod pod alpha-gpt2-fineweb (d749qr8btp6ok5), rented at $0.13 an hour. The trainer holds four windows' activations at a time, so each update runs 128 passes of four windows and sums their gradients on the card before one AdamW step.
- GPU utilization
- 100% sampled 15 Oct 01:36 UTC
- Power draw
- 219 W every 30 s by nvidia-smi
- Temperature
- 71 °C memory 5.04 GiB of 8 GiB
- This run so far
- 49.2 h 10.70 kWh at the card · about $6.40 of rent
The current invocation's GPU samples appear here while it runs.
Generated samples
Greedy continuations of the same six prompts, up to 256 tokens, generated by Alpha's predictor on the card between invocations: the OpenWebText run's last set, then one every 4 FineWeb invocations. Greedy decoding shows what the model finds most likely, loops included.
In a shocking finding, scientists discovered a herd of unicorns living in a remote, previously unexplored valley in the
In a shocking finding, scientists discovered a herd of unicorns living in a remote, previously unexplored valley in the Andes Mountains. Even more surprising to the researchers was the fact that the unicorns spoke perfect English. The researchers also found that the animals were not only able to speak English, but also had a higher level of intelligence. “The animals were able to speak English,” said Dr. John W. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K. K.
The meaning of life is
The meaning of life is to be a person who is able to live a life of purpose and purpose. The Bible says that the Bible says that the life of the Lord is to be a person who is able to live a life of purpose and purpose. The Bible says that the life of the Lord is to be a person who is able to live a life of purpose and purpose. The Bible says that the life of the Lord is to be a person who is able to live a life of purpose and purpose. The Bible says that the life of the Lord is to be a person who is able to live a life of purpose and purpose. The Bible says that the life of the Lord is to be a person who is able to live a life of purpose and purpose. The Bible says that the life of the Lord is to be a person who is able to live a life of purpose and purpose. The Bible says that the life of the Lord is to be a person who is able to live a life of purpose and purpose. The Bible says that the life of the Lord is to be a person who is able to live a life of purpose and purpose. The Bible says that the life of the Lord is to be a person who is able to live a life of purpose and purpose. The
Once upon a time, in a small village by the sea,
Once upon a time, in a small village by the sea, the people of the village are very friendly and helpful. The village is a very small village, with a small village, and a small village. The village is very small, and the village is very small. The village is very small, and the village is very small. The village is very small, and the village is very small. The village is very small, and the village is very small. The village is very small, and the village is very small. The village is very small, and the village is very small. The village is very small, and the village is very small. The village is very small, and the village is very small. The village is very small, and the village is very small. The village is very small, and the village is very small. The village is very small, and the village is very small. The village is very small, and the village is very small. The village is very small, and the village is very small. The village is very small, and the village is very small. The village is very small, and the village is very small. The village is very small, and the village is very small. The village is very small, and the village is very small. The village is very
The best way to learn a new programming language is
The best way to learn a new programming language is to learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new language. - Learn a new
BREAKING NEWS: The city council voted on Tuesday to
BREAKING NEWS: The city council voted on Tuesday to approve a $1.5 million budget for the city’s new public housing complex. The council voted unanimously to approve the $1.5 million budget for the new complex, which will be located on the corner of Main Street and Main Street. The council also approved a $1.5 million bond for the new building, which will be used to pay for the $1.5 million bond. The city council also approved a $1.5 million bond for the new building, which will be used to pay for the $1.5 million bond. The city council also approved a $1.5 million bond for the new building, which will be used to pay for the $1.5 million bond. The city council also approved a $1.5 million bond for the new building, which will be used to pay for the $1.5 million bond. The city council also approved a $1.5 million bond for the new building, which will be used to pay for the $1.5 million bond. The city council also approved a $1.5 million bond for the new building, which will be used to pay for the $1.5 million bond. The city council also approved a $
Recipe for chocolate chip cookies Ingredients:
Recipe for chocolate chip cookies Ingredients: - 1/4 cup sugar - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2 cup milk - 1/2
History
Both runs, from fresh weights to now.
- The OpenWebText run starts from fresh weights on one RTX 3070: one 1,024-token window an update at a learning rate of 6e-5.
- Invocation 67: the adoption moves the run to four windows an update at 2.4e-4, keeping its weights and AdamW state. Loss drops 0.2 nats in the next 40M tokens, after 0.7B tokens flat at 4.81.
- The Chinchilla point, 20 tokens a parameter. Training loss is about 4.33, and barely moves after.
- One full pass over OpenWebText: 9.03B tokens, 441 invocations, training loss about 4.29, HellaSwag 25.9% (chance is 25%).
- The plateau is diagnosed as the recipe's, not a bug (below). The next run continues the same weights under llm.c's GPT-2 124M recipe on FineWeb.
- The FineWeb recipe begins at invocation 441. After five invocations, validation loss is 3.617 (from 5.087) and held-out OpenWebText loss 3.746 (from 4.278).
- Stopped 12 seconds into invocation 446; the card goes to another experiment and the pod's run directory is later deleted, all but the last checkpoint.
- Resumed on its own pod, after showing every input is the original: the checkpoint's SHA-256, the executables' pins, FineWeb tokenized again with two invocations' inputs byte for byte the recorded ones, and the checkpoint's validation loss reproduced exactly (3.617338).
- Expected end: invocation 517, update 18,865 past the origin, the learning rate at 0.
Why the recipe changed
Measured on the OpenWebText run's own checkpoints with an independent PyTorch implementation, before the FineWeb run began.
- Each update was mostly noise. The gradient noise scale (the batch size at which signal and noise are equal) measured 51,000 ± 7,000 tokens at 2.6B tokens and 63,000 ± 31,000 at the end, about 13 times the 4,096-token update. Only 6–7% of each update's direction was signal.
- The learning rate never decayed. At a constant rate, a noisy optimizer settles into a band around the minimum rather than into it. The run reached that band after 3–4B tokens and spent the remaining 5B tokens, 55% of its compute, moving around it: 6.5B tokens improved the loss on 32 fixed windows by 0.048 nats.
- Its own optimizer state agrees. Gradient clipping fired on every update, successive updates were slightly anti-correlated, and Adam's per-coordinate signal-to-noise matched pure noise (0.15–0.19 against 0.183): the signature of an iterate bouncing at a constant rate's floor.
- Not a bug. Alpha's arithmetic had already been checked against the reference (below), and the adoption to four-window updates was itself a controlled experiment: the same model on the same data dropped 0.2 nats as soon as each update got less noisy.
- The fix is llm.c's recipe. 524,288-token updates, 128 times larger and about 9 times the noise scale, a peak rate 2.5 times higher that such updates allow, and a cosine decay to zero.
Model and recipes
The architecture is GPT-2 small as released; only the training recipe differs between the runs.
| OpenWebText run | FineWeb recipe | |
|---|---|---|
| Data | Skylion007/openwebtext, one pass (9.03B tokens) | HuggingFaceFW/fineweb sample/10BT at 9bb295dd: 10.25B training tokens in 14,868,862 documents |
| Order | one seeded permutation of the 1,024-token windows (seed 2019) | one seeded permutation of the 10,010,922 training windows (seed 2019); no window repeats |
| Update | one window (1,024 tokens) until invocation 67, then the mean gradient of four (4,096 tokens) | the mean gradient of 512 windows (524,288 tokens), 128 passes of four summed on the card |
| Learning rate | 6e-5, then a constant 2.4e-4 | warmup over 700 updates to 6e-4, cosine to 0 at 18,865 |
| Optimizer | AdamW: β₁ 0.9, β₂ 0.95, ε 1e-8, weight decay 0.1 on matrices and embeddings, global gradient-norm clipping at 1 | |
| Start | fresh weights: N(0, 0.02), residual projections N(0, 0.02/√24) | the OpenWebText run's final weights (step-2205000), both Adam moment banks cleared |
| Length | 3,210,000 updates in 441 invocations | 18,865 updates in 77 invocations of 245 (9.89B tokens) |
| Numerics | binary32 master weights and moments; bfloat16 matrix operands with binary32 accumulation | |
| Validation | 4,456,914 held-out OpenWebText tokens (recorded, not scored during the run) | the first 1,280 windows of the validation shard (llm.c's validation set) |
- Architecture
- 12 blocks × 768 wide, 12 heads of 64, feed-forward 3,072, context 1,024
- Blocks
- pre-LayerNorm, gain and shift, epsilon 1e-5; gelu_new (cubic tanh); biases on every linear map; learned positions; tied input and output embeddings
- Vocabulary
- 50,257 byte-level BPE tokens, stored as 50,432 for the objective's multiple of 256; the padded classes' logits are held at −10³⁰, so loss and gradients are the unpadded model's
- Parameters
- 124,439,808 (124,574,208 stored with the padded vocabulary)
Verification
Every executable is checked against an independent PyTorch (CPU) GPT-2 that reads Alpha's layout export, before it trains.
- OpenWebText trainer
- On the four-window recipe's first update: loss 10.89689 against the reference's 10.89694; all 148 parameter tensors' gradients within 0.28% (every cosine at least 0.99999); AdamW on the native moments reproduces the native weights to 0.012%. Teacher-forced generation matches the reference's argmax at every token (511 of 512 exactly, one bfloat16 near-tie).
- FineWeb recipe, from scratch
- Two updates of the recipe from fresh weights: all 148 tensors within 0.29% of the reference, cosines at least 0.999996.
- The continuation
- The adopted checkpoint's weights are bit-identical to the OpenWebText run's last, both moment banks zero, the counts restated to 441 invocations of 245 updates.
- Trained weights
- On trained weights the device's gradients differ from the reference's by depth (1–2% at block 11 to tens of percent at blocks 0–1). The reference differs from itself about as much when only its products' summation changes from binary32 to binary64: bfloat16's inherent sensitivity on a heavily cancelling small-batch gradient, far below the sampling noise training absorbs. From fresh weights both agree within 0.3%.
- HellaSwag scoring
- On the GPU by Alpha's scoring executable, as llm.c's dev/data/hellaswag.py scores it; each position's loss on the first four examples agrees with the reference's to 0.03 nats on average.
- The resume
- Checkpoint SHA-256 cda20c33… as recorded; FineWeb tokenized again: 14,868,862 documents and 10,251,184,259 training tokens as before, invocations 441 and 446's inputs byte-identical to the recorded ones; HellaSwag's prepared input identical; the checkpoint's validation loss reproduced on the new card exactly (3.617338).
Toward chat
The chat model is fine-tuned from the OpenWebText run's last checkpoint; it will be fine-tuned again from this run's, once it finishes.
- Conversations from HuggingFaceTB/smol-smoltalk, from the OpenWebText checkpoint (update 2,390,000).
- Four rounds of conversations in Alpha's voice, written for it (update 2,445,000).
- Supervised fine-tuning on the assistant's replies alone, with a warmup and a cosine decay (update 2,460,000): persona test loss 3.70 against the base model's 5.20, SmolTalk test loss 2.00.
- The same three stages on this run's final checkpoint, compared with the current chat model on the same held-out tests before it replaces it.
Chat with the current model → Its replies now come from a labelled CPU stand-in (PyTorch, the same checkpoints), so this card can train.
Evidence Executables, checkpoints, data and the controller's events
- Snapshot
- published 15 Oct 01:53 UTC by website/ops/gpt2-publish.mjs at 0a01d4b77, from scripts/alpha/gpt2-recipe-status.py on the pod
- Source
- systems/gpt2 (GPT2.Recipe's gpt2FineWebRecipe) on main
- FineWeb run
- gpt2-small-fineweb-recipe-rtx3070 · pod alpha-gpt2-fineweb (d749qr8btp6ok5)
- gpt2-recipe-adopt
299620f2616742e0c0143ca53c0e5276b9f5258c5d07f50db3873c34bebbc940- gpt2-recipe-eval
a57829ad9d38e33193b48ff4e75062570672a6aa2c96350bf955c22602b282ca- gpt2-recipe-hellaswag
4d9b5e7dcbffddf8dd9480e10bc363bcca06d8c47665f05c3db8f03652d58e75- gpt2-recipe-next
99e82772c652786729adbf06c3ac83a241d8a590aedc47d76da2cdb9e43623a3- gpt2-recipe-predict
9f8fdc092556136f4b124f2e59618c11051ca1da27eaac9179fbff702bbaabd6- step-110005.ckpt
- update 110,005 (1,960 past the origin) · invocation 449 · 1.62 GiB · 13 Oct 06:03 UTC
- step-111965.ckpt
- update 111,965 (3,920 past the origin) · invocation 457 · 1.62 GiB · 13 Oct 13:46 UTC
- step-113925.ckpt
- update 113,925 (5,880 past the origin) · invocation 465 · 1.62 GiB · 13 Oct 21:41 UTC
- step-115885.ckpt
- update 115,885 (7,840 past the origin) · invocation 473 · 1.62 GiB · 14 Oct 05:27 UTC
- step-117845.ckpt
- update 117,845 (9,800 past the origin) · invocation 481 · 1.62 GiB · 14 Oct 13:09 UTC
- step-119805.ckpt
- update 119,805 (11,760 past the origin) · invocation 489 · 1.62 GiB · 14 Oct 20:50 UTC
- step-121030.ckpt
- update 121,030 (12,985 past the origin) · invocation 494 · 1.62 GiB · 15 Oct 01:35 UTC
- OpenWebText run
- gpt2-small-openwebtext-rtx3070 · pod gpt-2 (38deti7qbgut0z) · 6 Oct 10:06 UTC to 10 Oct 07:21 UTC · the run's last snapshot, published 2026-10-11T05:27:39.430Z by website/ops/gpt2-publish.mjs at 0fdf5fc17; the pod's run directory was later deleted
- gpt2-adopt
5dc2043ff31fc0922c76c931c69b9928a4dc6ccd2581888d4686a1fcb316adf5- gpt2-early-resume
9fac9592a652b49314ed90b09386d14e2d4a477fbc9f535978a050bf63c6cf28- gpt2-init
87d24714b3e2fef3f89e230bfcc9ce16068a96309b95d69f6f5ffd82ed7869b7- gpt2-predict
4f219fd48bd901a8c8bff21c84b9b4475adcc7046d4bf89c9f72be4b7b08b482- gpt2-stream
3502adad8959d402c5a551156dccaf51fbffd5bd1ae69cee8ec1ccf5aa943157- gpt2-train
d4a06bc4376f36e725cfb00140629629239370cb83304a994a2acfe8d65aac10- Retained checkpoints
- step-375000.ckpt, step-500000.ckpt, step-625000.ckpt, step-750000.ckpt, step-875000.ckpt, step-1000000.ckpt, step-1125000.ckpt, step-1250000.ckpt, step-1375000.ckpt, step-1500000.ckpt, step-1625000.ckpt, step-1750000.ckpt, step-1875000.ckpt, step-2000000.ckpt, step-2125000.ckpt, step-2205000.ckpt
- 11 Oct 04:44 UTC
- invocation 446 failed rc 143 after 12s: ==> /workspace/gpt2-fineweb/runs/inv0446/trainer.stdout <== ==> /workspace/gpt2-fineweb/runs/inv0446/trainer.stderr <==