| """Single source of truth for the compact 50M dense GPT training run.""" | |
| from dataclasses import asdict, dataclass | |
| from pathlib import Path | |
| class ModelConfig: | |
| # 32k BPE + tied embeddings. Total model size is ~50.0M parameters. | |
| vocab_size: int = 32_000 | |
| block_size: int = 512 | |
| n_layers: int = 12 | |
| n_heads: int = 8 | |
| d_model: int = 480 | |
| mlp_hidden: int = 1_352 | |
| dropout: float = 0.0 | |
| class TrainConfig: | |
| # Optimized profile targeting ~4.5GB VRAM on an RTX 3050 6GB GPU. | |
| micro_batch_size: int = 4 | |
| gradient_accumulation: int = 8 | |
| learning_rate: float = 3e-4 | |
| weight_decay: float = 0.1 | |
| max_steps: int = 61_000 | |
| warmup_ratio: float = 0.02 | |
| log_every: int = 100 | |
| save_every: int = 1_000 | |
| seed: int = 42 | |
| ROOT = Path(__file__).resolve().parent | |
| DATA_DIR = ROOT / ".data" | |
| RAW_DATASET = ROOT / "dataset.jsonl" | |
| CLEAN_DATASET = DATA_DIR / "clean.jsonl" | |
| TOKENIZER_PATH = DATA_DIR / "tokenizer.json" | |
| TOKENS_PATH = DATA_DIR / "tokens.bin" | |
| DATA_METADATA_PATH = DATA_DIR / "metadata.json" | |
| CHECKPOINT_DIR = ROOT / "checkpoints" | |
| MODEL = ModelConfig() | |
| TRAIN = TrainConfig() | |
| def model_config_dict() -> dict: | |
| return asdict(MODEL) | |