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 CHANGED
@@ -151,7 +151,7 @@ Key design choices:
151
 
152
  | Feature | Detail |
153
  |---|---|
154
- | Optimizer | Muon for 2D weight matrices, AdamW for embeddings/norms |
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
- print(
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
- print(f"Tokenizer: gpt-oss-20b | Vocab size: {vocab_size:,}")
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
- print(
148
- f"seq_len={seq_len} | micro_batch={micro_batch} | grad_accum={grad_accum}\n"
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
- print(f"Parameters: {n_params:,} | AMP dtype: {amp_dtype}")
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
- print(
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
- print(f"Checkpoint saved → {path}")
287
 
288
  if ddp:
289
  dist.destroy_process_group()
290
 
291
  if master:
292
- print("Training complete.")
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