Schnellstart
Quelldateien
Diese Seite wurde aus den folgenden Quelldateien erstellt:
NanoChat ist ein minimalistisches Framework zum Trainieren und Betreiben von GPT-2-äquivalenten Sprachmodellen. Das Projekt bietet eine vollständige Pipeline von der Datenvorbereitung über das Pretraining bis hin zum Finetuning und der Inferenz über Web-Interface oder CLI.
Voraussetzungen und Umgebung
Systemanforderungen
Das Projekt ist für 8×H100 GPU-Nodes optimiert und benötigt etwa 3 Stunden für einen vollständigen Trainingslauf (runs/speedrun.sh:1-12). Für Entwicklungszwecke oder kleinere Modelle können auch CPU/MacBook-Umgebungen verwendet werden, wobei die Parameter entsprechend angepasst werden müssen.
Python-Umgebung einrichten
NanoChat verwendet uv als modernen Python-Paketmanager. Die Einrichtung erfolgt automatisch durch das Speedrun-Skript:
bash1# uv installieren (falls nicht vorhanden) 2command -v uv &> /dev/null || curl -LsSf https://astral.sh/uv/install.sh | sh 3 4# Virtuelle Umgebung erstellen 5[ -d ".venv" ] || uv venv 6 7# Abhängigkeiten installieren 8uv sync --extra gpu 9 10# Umgebung aktivieren 11source .venv/bin/activate
Weights & Biases Logging (Optional)
Für Experiment-Tracking wird wandb empfohlen. Die Konfiguration erfolgt über Umgebungsvariablen:
bash1# Erstanmeldung 2wandb login 3 4# Training mit wandb starten 5WANDB_RUN=experiment_name bash runs/speedrun.sh
Ohne wandb-Konfiguration verwendet das System automatisch einen "dummy"-Modus, der kein externes Logging durchführt (runs/speedrun.sh:19-40).
Verzeichnisstruktur
Alle Zwischenartefakte werden standardmäßig in ~/.cache/nanochat gespeichert:
bash1export NANOCHAT_BASE_DIR="$HOME/.cache/nanochat" 2mkdir -p $NANOCHAT_BASE_DIR
Datenvorbereitung und Tokenizer-Training
Trainingsdaten herunterladen
Das Projekt verwendet einen vorbereiteten Datensatz, der in Shards von etwa 250M Zeichen organisiert ist. Für ein GPT-2-äquivalentes Training werden etwa 170 Shards benötigt:
bash1# Initiale 8 Shards (~800MB) für Tokenizer-Training 2python -m nanochat.dataset -n 8 3 4# Weitere Shards im Hintergrund herunterladen 5python -m nanochat.dataset -n 170 & 6DATASET_DOWNLOAD_PID=$!
Tokenizer trainieren
Der Tokenizer wird mit einer Vokabulargröße von 2^15 = 32.768 auf etwa 2 Milliarden Zeichen trainiert:
bash1# Tokenizer trainieren 2python -m scripts.tok_train 3 4# Tokenizer evaluieren (Kompressionsrate etc.) 5python -m scripts.tok_eval
Die parallele Strategie ermöglicht effizientes Training: Während der Tokenizer auf den ersten 8 Shards trainiert, werden die verbleibenden Shards im Hintergrund heruntergeladen (runs/speedrun.sh:51-65).
Basismodell-Training (Pretraining)
Training starten
Nach Abschluss des Datendownloads wird das Basismodell trainiert. Das d24-Modell ist leicht untertrainiert, um GPT-2 zu übertreffen:
bash1# Auf Abschluss des Downloads warten 2wait $DATASET_DOWNLOAD_PID 3 4# d24 Modell mit FP8-Training 5torchrun --standalone --nproc_per_node=8 -m scripts.base_train \ 6 -- --depth=24 --target-param-data-ratio=8 \ 7 --device-batch-size=16 --fp8 --run=$WANDB_RUN
Modell evaluieren
Die Evaluierung umfasst BPB-Metriken auf Trainings-/Validierungsdaten sowie Stichproben:
bash1torchrun --standalone --nproc_per_node=8 -m scripts.base_eval \ 2 -- --device-batch-size=16
Training für CPU/MacBook
Für ressourcenbeschränkte Umgebungen kann ein deutlich kleineres Modell trainiert werden:
bash1python -m scripts.base_train --depth=4 --max-seq-len=512 \ 2 --device-batch-size=1 --eval-tokens=512 \ 3 --core-metric-every=-1 --total-batch-size=512 \ 4 --num-iterations=20
SFT Finetuning und Chat-Funktionalität
Supervised Fine-Tuning
Das SFT-Training vermittelt dem Modell Konversationsfähigkeit und spezielle Token:
bash1# Synthetische Identitätskonversationen herunterladen 2curl -L -o $NANOCHAT_BASE_DIR/identity_conversations.jsonl \ 3 https://karpathy-public.s3.us-west-2.amazonaws.com/identity_conversations.jsonl 4 5# SFT-Training durchführen 6torchrun --standalone --nproc_per_node=8 -m scripts.chat_sft \ 7 -- --device-batch-size=16 --run=$WANDB_RUN 8 9# SFT-Modell evaluieren 10torchrun --standalone --nproc_per_node=8 -m scripts.chat_eval -- -i sft
Web-Interface starten
Der Web-Server bietet eine ChatGPT-ähnliche Oberfläche mit Multi-GPU-Support:
bash1# Einzelne GPU (Standard) 2python -m scripts.chat_web 3 4# 4 GPUs 5python -m scripts.chat_web --num-gpus 4
Der Server läuft standardmäßig auf Port 8000 und bietet folgende Endpunkte:
| Endpunkt | Methode | Beschreibung |
|---|---|---|
/ | GET | Chat UI |
/chat/completions | POST | Chat API (Streaming) |
/health | GET | Health Check mit Worker-Status |
/stats | GET | GPU-Auslastung und Statistiken |
CLI-Chat
Für schnelle Tests steht auch ein CLI-Interface zur Verfügung:
bash1# Interaktiver Chat 2python -m scripts.chat_cli 3 4# Einzelne Anfrage 5python -m scripts.chat_cli -p "Why is the sky blue?"
Schnellstart-Pfade
Empfohlener Pfad: Vollständiges Training
Für Benutzer mit Zugriff auf 8×H100 Hardware:
bash1# In screen-Sitzung (empfohlen für ~3h Laufzeit) 2screen -L -Logfile runs/speedrun.log -S speedrun bash runs/speedrun.sh 3 4# Oder mit wandb-Logging 5WANDB_RUN=speedrun screen -L -Logfile runs/speedrun.log -S speedrun bash runs/speedrun.sh
Minimaler Pfad: Nur Inferenz
Für Benutzer, die nur chatten möchten (benötigt vortrainiertes Modell):
bash1# Umgebung einrichten 2uv venv && source .venv/bin/activate 3uv sync --extra gpu 4 5# Web-Server starten 6python -m scripts.chat_web
Alternative Pfade
| Pfad | Hardware | Dauer | Befehl |
|---|---|---|---|
| Vollständiges Training | 8×H100 | ~3h | bash runs/speedrun.sh |
| Kleines Modell | CPU/MacBook | Minuten | python -m scripts.base_train --depth=4 ... |
| Nur Inferenz | 1 GPU | Sofort | python -m scripts.chat_web |
Laufzeitüberprüfung und Validierung
Trainingsfortschritt überwachen
Während des Trainings werden Markdown-Berichte im report/-Verzeichnis generiert:
bash1# Bericht zurücksetzen und Header schreiben 2python -m nanochat.report reset 3 4# Vollständigen Bericht generieren 5python -m nanochat.report generate
Web-Server validieren
Nach dem Start des Web-Servers sollte die Konsole folgende Ausgabe zeigen:
Initializing worker pool with X GPUs...
Loading model on GPU 0...
All X workers initialized!
Der Health-Check-Endpunkt kann zur Validierung verwendet werden:
bash1curl http://localhost:8000/health
Erwartete Ausgaben
| Phase | Erfolgsindikator |
|---|---|
| Tokenizer-Training | Kompressionsrate wird ausgegeben |
| Pretraining | BPB-Metriken auf Train/Val |
| SFT-Training | Evaluierung ohne Fehler |
| Web-Server | "All workers initialized!" |
Häufige Probleme und Lösungen
Problem 1: CUDA Out of Memory
Symptom: Training bricht mit OOM-Fehler ab.
Lösung: Batch-Size reduzieren:
bash1# Statt --device-batch-size=16 2torchrun ... -m scripts.base_train -- --device-batch-size=8 3# Oder weiter reduzieren auf 4, 2, 1
Problem 2: Datendownload schlägt fehl
Symptom: nanochat.dataset-Befehl gibt Fehler zurück.
Lösung: Manuellen Download prüfen und Cache-Berechtigungen:
bash1# Cache-Verzeichnis prüfen 2ls -la ~/.cache/nanochat 3 4# Bei Bedarf neu erstellen 5rm -rf ~/.cache/nanochat 6mkdir -p ~/.cache/nanochat
Problem 3: Web-Server nicht erreichbar
Symptom: Browser kann localhost:8000 nicht öffnen.
Lösung: Host-Binding und Firewall prüfen:
bash1# Explizit an 0.0.0.0 binden (Standard) 2python -m scripts.chat_web --host 0.0.0.0 --port 8000 3 4# Bei Cloud-Instanzen: Öffentliche IP verwenden
Problem 4: FP8-Training nicht verfügbar
Symptom: --fp8 Flag führt zu Fehler.
Lösung: FP8 erfordert H100+ GPU und torchao. Bei älteren GPUs FP8 weglassen:
bash1# Ohne FP8 (langsamer, aber kompatibel) 2torchrun ... -m scripts.base_train -- --depth=24 ...
Nächste Schritte
Nach erfolgreichem Schnellstart empfiehlt sich die Exploration folgender Bereiche:
- Hyperparameter-Tuning: Anpassung von Lernraten, Batch-Größen und Architekturparametern für spezifische Anwendungsfälle
- Custom Datasets: Integration eigener Trainingsdaten in die Pipeline
- Modell-Architektur: Experimente mit verschiedenen
depth- undaspect-ratio-Konfigurationen - Produktions-Deployment: Konfiguration des Web-Servers für Multi-User-Szenarien mit
--num-gpusParameter
Die vollständige Dokumentation der Trainingsparameter findet sich in scripts/base_train.py:1-220, Details zur Web-Server-Konfiguration in scripts/chat_web.py:1-220.
