Kye Gomez commited on
Commit ·
7ba6907
1
Parent(s): 18cca89
[improvement][loguru-logging][replace print with loguru in training script][feat][ckpt-logging][add checkpoint start and success log events][docs][readme-optimizer][remove muon optimizer
Browse files- README.md +1 -1
- training/3b_fine_web_edu.py +10 -8
- training/requirements.txt +4 -0
README.md
CHANGED
|
@@ -151,7 +151,7 @@ Key design choices:
|
|
| 151 |
|
| 152 |
| Feature | Detail |
|
| 153 |
|---|---|
|
| 154 |
-
| Optimizer |
|
| 155 |
| Dataset | `HuggingFaceFW/fineweb-edu` (`sample-10BT` by default, swap to `sample-100BT` or `default` for full run) |
|
| 156 |
| Tokenizer | `openai/gpt-oss-20b` via `MythosTokenizer` |
|
| 157 |
| Parallelism | PyTorch DDP via `torchrun`, sharded streaming dataset |
|
|
|
|
| 151 |
|
| 152 |
| Feature | Detail |
|
| 153 |
|---|---|
|
| 154 |
+
| Optimizer | AdamW |
|
| 155 |
| Dataset | `HuggingFaceFW/fineweb-edu` (`sample-10BT` by default, swap to `sample-100BT` or `default` for full run) |
|
| 156 |
| Tokenizer | `openai/gpt-oss-20b` via `MythosTokenizer` |
|
| 157 |
| Parallelism | PyTorch DDP via `torchrun`, sharded streaming dataset |
|
training/3b_fine_web_edu.py
CHANGED
|
@@ -15,6 +15,7 @@ import time
|
|
| 15 |
import torch
|
| 16 |
import torch.nn as nn
|
| 17 |
import torch.distributed as dist
|
|
|
|
| 18 |
from torch.distributed.fsdp import (
|
| 19 |
FullyShardedDataParallel as FSDP,
|
| 20 |
ShardingStrategy,
|
|
@@ -113,7 +114,7 @@ def main():
|
|
| 113 |
master = rank == 0
|
| 114 |
|
| 115 |
if master:
|
| 116 |
-
|
| 117 |
f"GPUs: {torch.cuda.device_count()} | World size: {world_size} | Device: {device}"
|
| 118 |
)
|
| 119 |
|
|
@@ -124,7 +125,7 @@ def main():
|
|
| 124 |
vocab_size = encoding.vocab_size
|
| 125 |
|
| 126 |
if master:
|
| 127 |
-
|
| 128 |
|
| 129 |
# ------------------------------------------------------------------
|
| 130 |
# Hyperparameters
|
|
@@ -144,8 +145,8 @@ def main():
|
|
| 144 |
dataset_subset = "sample-10BT" # → sample-100BT or "default" for full run
|
| 145 |
|
| 146 |
if master:
|
| 147 |
-
|
| 148 |
-
f"seq_len={seq_len} | micro_batch={micro_batch} | grad_accum={grad_accum}
|
| 149 |
f"global_batch_tokens={global_batch_tok:,} | total_steps={total_steps:,}"
|
| 150 |
)
|
| 151 |
|
|
@@ -188,7 +189,7 @@ def main():
|
|
| 188 |
|
| 189 |
if master:
|
| 190 |
n_params = sum(p.numel() for p in model.parameters())
|
| 191 |
-
|
| 192 |
|
| 193 |
# ------------------------------------------------------------------
|
| 194 |
# Optimizer
|
|
@@ -255,7 +256,7 @@ def main():
|
|
| 255 |
dt = time.perf_counter() - t0
|
| 256 |
tok_per_sec = global_batch_tok * log_every / dt
|
| 257 |
tokens_seen = step * global_batch_tok
|
| 258 |
-
|
| 259 |
f"step {step:6d}/{total_steps} | loss {loss_accum:.4f} "
|
| 260 |
f"| lr {cur_lr:.2e} | {tok_per_sec / 1e6:.2f}M tok/s "
|
| 261 |
f"| {tokens_seen / 1e9:.1f}B tokens seen"
|
|
@@ -264,6 +265,7 @@ def main():
|
|
| 264 |
|
| 265 |
if master and step % ckpt_every == 0:
|
| 266 |
path = os.path.join(ckpt_dir, f"step_{step:07d}.pt")
|
|
|
|
| 267 |
if ddp:
|
| 268 |
with FSDP.state_dict_type(
|
| 269 |
model,
|
|
@@ -283,13 +285,13 @@ def main():
|
|
| 283 |
},
|
| 284 |
path,
|
| 285 |
)
|
| 286 |
-
|
| 287 |
|
| 288 |
if ddp:
|
| 289 |
dist.destroy_process_group()
|
| 290 |
|
| 291 |
if master:
|
| 292 |
-
|
| 293 |
|
| 294 |
|
| 295 |
if __name__ == "__main__":
|
|
|
|
| 15 |
import torch
|
| 16 |
import torch.nn as nn
|
| 17 |
import torch.distributed as dist
|
| 18 |
+
from loguru import logger
|
| 19 |
from torch.distributed.fsdp import (
|
| 20 |
FullyShardedDataParallel as FSDP,
|
| 21 |
ShardingStrategy,
|
|
|
|
| 114 |
master = rank == 0
|
| 115 |
|
| 116 |
if master:
|
| 117 |
+
logger.info(
|
| 118 |
f"GPUs: {torch.cuda.device_count()} | World size: {world_size} | Device: {device}"
|
| 119 |
)
|
| 120 |
|
|
|
|
| 125 |
vocab_size = encoding.vocab_size
|
| 126 |
|
| 127 |
if master:
|
| 128 |
+
logger.info(f"Tokenizer: gpt-oss-20b | Vocab size: {vocab_size:,}")
|
| 129 |
|
| 130 |
# ------------------------------------------------------------------
|
| 131 |
# Hyperparameters
|
|
|
|
| 145 |
dataset_subset = "sample-10BT" # → sample-100BT or "default" for full run
|
| 146 |
|
| 147 |
if master:
|
| 148 |
+
logger.info(
|
| 149 |
+
f"seq_len={seq_len} | micro_batch={micro_batch} | grad_accum={grad_accum} | "
|
| 150 |
f"global_batch_tokens={global_batch_tok:,} | total_steps={total_steps:,}"
|
| 151 |
)
|
| 152 |
|
|
|
|
| 189 |
|
| 190 |
if master:
|
| 191 |
n_params = sum(p.numel() for p in model.parameters())
|
| 192 |
+
logger.info(f"Parameters: {n_params:,} | AMP dtype: {amp_dtype}")
|
| 193 |
|
| 194 |
# ------------------------------------------------------------------
|
| 195 |
# Optimizer
|
|
|
|
| 256 |
dt = time.perf_counter() - t0
|
| 257 |
tok_per_sec = global_batch_tok * log_every / dt
|
| 258 |
tokens_seen = step * global_batch_tok
|
| 259 |
+
logger.info(
|
| 260 |
f"step {step:6d}/{total_steps} | loss {loss_accum:.4f} "
|
| 261 |
f"| lr {cur_lr:.2e} | {tok_per_sec / 1e6:.2f}M tok/s "
|
| 262 |
f"| {tokens_seen / 1e9:.1f}B tokens seen"
|
|
|
|
| 265 |
|
| 266 |
if master and step % ckpt_every == 0:
|
| 267 |
path = os.path.join(ckpt_dir, f"step_{step:07d}.pt")
|
| 268 |
+
logger.info(f"Saving checkpoint at step {step} → {path}")
|
| 269 |
if ddp:
|
| 270 |
with FSDP.state_dict_type(
|
| 271 |
model,
|
|
|
|
| 285 |
},
|
| 286 |
path,
|
| 287 |
)
|
| 288 |
+
logger.success(f"Checkpoint saved → {path}")
|
| 289 |
|
| 290 |
if ddp:
|
| 291 |
dist.destroy_process_group()
|
| 292 |
|
| 293 |
if master:
|
| 294 |
+
logger.success("Training complete.")
|
| 295 |
|
| 296 |
|
| 297 |
if __name__ == "__main__":
|
training/requirements.txt
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
torch>=2.11.0
|
| 2 |
+
datasets>=3.6.0
|
| 3 |
+
loguru>=0.7.3
|
| 4 |
+
open-mythos
|