Guido 0.5B post-GRPO, step 380
This repository preserves the exact no-TIR, no-Muon, BETA=0 Guido checkpoint
from Slurm job 48981274 (grpo_is_cos500). It is the checkpoint used in the
reported CP4-versus-post-GRPO evaluations. It must not be confused with the
later Muon runs or the legacy GRPO checkpoints 2562 and 2566.
Canonical files
checkpoints/step_000380.pt: inference policy, an Aplos/PyTorch state dict.checkpoints/step_000380.train.pt: complete resume state, including optimizer state and FP32 master weights.checkpoints/step_000380.json: machine-readable snapshot metadata.reproduction/train_grpo_step380.py: exact trainer used by job48981274.reproduction/job_48981274.sbatch: exact Slurm submission script.logs/grpo_is_cos500_g16lg32_4n_48981274.outand.err: complete job logs.evals/final_cp4_vs_p380/: final three-seed evaluation tables and protocol.
Integrity
| Artifact | Bytes | SHA-256 |
|---|---|---|
checkpoints/step_000380.pt |
1,106,938,213 | 45c555ea2cab95b6d13aff490c5fae7990a5f9167ce91b0ca39e877a34a8bc91 |
checkpoints/step_000380.train.pt |
6,641,303,821 | ccc9f3bc3ce8e987898d64910faacdf1da03d380177dd1c4b30875e39946ac1c |
checkpoints/step_000380.json |
1,441 | c8109a4a9ce87e3b5d36c3b68a0414c4103f77c2d6d15f80ec2d39163ece550b |
reproduction/train_grpo_step380.py |
see repository | 66400316e47aa0c1f46e59358278316c2c647263effca3428148585d55da4b4c |
The source checkpoint actually loaded by the run was
BossCalabrese/guido-sft-10b/checkpoints/sft_final.pt,
SHA-256 6e2685fa0942bda88e17aa7ef023dc59d4bac87cadfe4d310810077fbfaee5bc.
Snapshot state
- rollout batch:
380 - optimizer step:
760 - usable groups:
12160 / 16000 - cumulative raw reward:
0.5026031199758842 - batch raw reward:
0.5872395833333334 - batch usable-group reward:
0.515625 - current policy LR: about
4.2e-6
The overall job later failed after batch 383, so this repository deliberately uses the durable step-380 snapshot that all post-GRPO evaluations referenced.
Training configuration
The run used 4 Leonardo nodes, 4 A100 GPUs per node (world_size=16):
| Setting | Value |
|---|---|
G |
16 |
LOCAL_GROUPS |
32 |
MU |
2 |
MICRO |
2 |
T / max new tokens |
2048 |
TARGET_USABLE |
16000 |
LOSS_NORM |
dr_grpo |
ADV_SCALE_BY_STD |
0 |
LR |
3e-5 |
| scheduler | cosine, 20 warmup optimizer steps, 1000 total optimizer steps, floor 0 |
BETA |
0 |
DUAL_CLIP |
3 |
| PPO clipping | 0.2 / 0.2 |
| policy dtype | BF16 |
| optimizer | torch.optim.Adam, default betas, no weight decay; no Muon |
| rollout sampling | temperature=1.0, top_p=1.0 |
| behavior correction | generation log-probs returned, RATIO_DENOM=rollout |
| stale queue | dropped; ASSERT_QAGE_ZERO=1 |
| decode | compiled |
| seed | 123 |
Other provenance:
- data:
Guido-GRPO-pipeline/grpo_pool_FINAL.jsonl, SHA-256604cbe4a1fc34e67814a399ab6284e47b90c1941913a6a761bdd83539bf0c18b - Aplos git commit:
47492b2 - Aplos
Vathos/blocks.pySHA-256:2b3a9029516da1edec835817003b978b89d15a6ce229f5a68ad1b799c3a0fcb3 - Aplos
Vathos/functions.pySHA-256:6beda892946f9a013719563ab324788f8c808d2ffa037c32bdf6448d75857179 - the loader reported
missing=0,unexpected=0, and patched all 24 FFN blocks to SiLU.
Final sampled evaluation
Protocol: 16 samples per problem, temperature 0.6, top-p 0.95, no top-k,
2048 generated tokens, prompt cap 512, compiled decoding, seeds 1234/2027/3407.
Values below are mean +/- sample standard deviation across seeds.
| Benchmark | maj@16 strict | pass@1 strict | pass@16 strict | boxed |
|---|---|---|---|---|
| MATH500 | 69.09 +/- 0.12 | 60.82 +/- 1.11 | 83.94 +/- 0.31 | 100.00 +/- 0.00 |
| GSM8K | 77.86 +/- 0.20 | 71.19 +/- 0.66 | 90.12 +/- 0.19 | 100.00 +/- 0.00 |
| AIME | 4.81 +/- 0.64 | 4.44 +/- 1.92 | 13.70 +/- 0.64 | 100.00 +/- 0.00 |
| AMC | 38.55 +/- 1.20 | 31.33 +/- 4.17 | 59.44 +/- 4.23 | 100.00 +/- 0.00 |
| AIME 2025 | 11.54 +/- 0.00 | 8.97 +/- 2.22 | 20.51 +/- 2.22 | 100.00 +/- 0.00 |
The complete tables, paired CP4 deltas, settings, and raw evaluation material
are also preserved in the private dataset repository
BossCalabrese/Guido-GRPO-pipeline.
Loading
The policy file is a plain ordered PyTorch state dict:
import torch
state_dict = torch.load("checkpoints/step_000380.pt", map_location="cpu")
model.load_state_dict(state_dict, strict=True)
Use the exact trainer and Aplos commit recorded above for training resume or
strict reproduction. step_000380.train.pt is not required for inference.