Text Generation
English
gpt
micro-gpt
File size: 1,225 Bytes
4c29028
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
"""Single source of truth for the compact 50M dense GPT training run."""

from dataclasses import asdict, dataclass
from pathlib import Path


@dataclass(frozen=True)
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


@dataclass(frozen=True)
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)