name: nanogpt description: "Pré-entraînement et fine-tuning minimal GPT (nanoGPT). Le dépôt le plus simple et le plus rapide pour entraîner des GPT de taille moyenne avec ~300 lignes de model.py et ~300 lignes de train.py. Reproduit GPT-2 (124M) sur OpenWebText. Supporte DDP multi-GPU/multi-nœud, entraînement au niveau caractère, chargement de poids depuis les checkpoints HuggingFace GPT-2, et fine-tuning simple. Note : remplacé par nanochat pour les nouveaux projets ; ce dépôt reste précieux comme implémentation de référence et outil d'apprentissage." license: MIT license tags: [gpt-pretraining, autoregressive-language-modeling, ddp-training, checkpoint-finetuning, nanogpt] metadata: skill-author: K-Dense Inc. -----|--------|--------|-------|---------|-------------| | Shakespeare char | ~10M | 6 | 6 | 384 | 1 GPU, 3 min | | GPT-2 small | 124M | 12 | 12 | 768 | 8×A100, 4 days | | GPT-2 medium | 350M | 24 | 16 | 1024 | Modify config | | GPT-2 large | 774M | 36 | 20 | 1280 | Modify config | | GPT-2 XL | 1,5B | 48 | 25 | 1600 | Multi-node |
10. Evaluation and Benchmarks
# Benchmark training speed
python train.py config/train_gpt2.py --eval_only
# Loss tracking
# nanoGPT-reported GPT-2 (124M) on OpenWebText: val loss 2.85
# OpenAI GPT-2 (124M) on WebText: val loss ~3.11
# (domain gap between WebText and OpenWebText accounts for difference)
# Custom benchmarks
python train.py config/train_shakespeare_char.py --eval_iters=200
Key Patterns
- Les configs sont des fichiers Python, pas du YAML — flexibilité maximale, faciles à comparer
- *`init_from='scratch'|'resume'|'gpt2'`** — basculer entre les modes d'entraînement
- Toujours utiliser
--compile=Truesur GPU pour ~2× d'accélération - Accumulation de gradient avec
gradient_accumulation_stepsémule des batch sizes plus grands - Les données sont des fichiers .bin uint16 bruts — tokenisées une seule fois, chargées via memmap
- Initialisation sur meta device pour les gros modèles — n'alloue que si nécessaire
- Weight tying entre
wte(embedding) etlm_head— pratique standard GPT - Utiliser
torchrunpour multi-GPU — paspython -m torch.distributed.launch