SMOL-GPT A minimal PyTorch implementation for training your own small LLM from scratch. Designed for educational purposes and simplicity, f…
SMOL-GPT A minimal PyTorch implementation for training your own small LLM from scratch. Designed for educational purposes and simplicity, f…
A minimal PyTorch implementation for training your own small LLM from scratch. Designed for educational purposes and simplicity, featuring efficient training, flash attention, and modern sampling techniques.
pip install -r requirements.txt
Requirements:
python preprocess.py prepare-dataset --vocab-size 4096
python train.py
Training and validation loss are logged in out/logs/. To visualize using TensorBoard, run:
tensorboard --logdir=/out/logs
python sample.py \
--prompt "Once upon a time" \
--num_samples 3 \
--temperature 0.7 \
--max_new_tokens 500
# Download tokenizer
wget https://huggingface.co/OmAlve/TinyStories-SmolGPT/resolve/main/tok4096.model -P data/
# Download pre-trained checkpoint
wget https://huggingface.co/OmAlve/TinyStories-SmolGPT/resolve/main/ckpt.pt -P out/
python sample.py \
--prompt "Once upon a time" \
--tokenizer_path data/tok4096.model \
--ckpt_path out/ckpt.pt \
--num_samples 3 \
--max_new_tokens 200 \
--temperature 0.7
The provided checkpoint was trained on the TinyStories dataset.
Architecture:
~4 Billion Tokens for around 18.5 hoursValidation Loss - 1.0491
…
…
Key parameters (modify in config.py):
Model Architecture:
GPTConfig(
block_size=512, # Context length
n_layer=8, # Number of transformer layers
n_head=8, # Number of attention heads
n_embed=512, # Embedding dimension
dropout=0.2, # Dropout rate
bias=False, # Use bias in layers
use_rotary=False, # Toggle rotary embeddings
)
Training:
TrainingConfig(
batch_size=64,
max_iters=30000,
learning_rate=6e-4,
weight_decay=0.1,
grad_clip=1.0,
warmup_iters=1000
)
om-alve-smolgpt/
├── config.py - Model & training configuration
├── dataset.py - Data loading & preprocessing
├── model.py - GPT model implementation
├── preprocess.py - Dataset preparation scripts
├── sample.py - Text generation script
├── tokenizer.py - Tokenizer wrapper
└── train.py - Main training loop
Contributions welcome! Please open an issue or PR for:
Note: This implementation is inspired by modern LLM training practices and adapted for educational purposes. For production use, consider scaling up model size and dataset.
question for Rotary class
Crash in train.py on Mac
new ubuntu download error
during training, does the dataset always have input and output sequence lengths of `max_seq_len-1`?
Dynamically choose the best device
Dynamically choose the best device
Replace nn.ModuleList with nn.Sequential