Preise

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:

bash
1# 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

(runs/speedrun.sh:19-40)

Weights & Biases Logging (Optional)

Für Experiment-Tracking wird wandb empfohlen. Die Konfiguration erfolgt über Umgebungsvariablen:

bash
1# 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:

bash
1export NANOCHAT_BASE_DIR="$HOME/.cache/nanochat"
2mkdir -p $NANOCHAT_BASE_DIR

(runs/speedrun.sh:13-16)

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:

bash
1# 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=$!

(runs/speedrun.sh:49-66)

Tokenizer trainieren

Der Tokenizer wird mit einer Vokabulargröße von 2^15 = 32.768 auf etwa 2 Milliarden Zeichen trainiert:

bash
1# Tokenizer trainieren
2python -m scripts.tok_train
3
4# Tokenizer evaluieren (Kompressionsrate etc.)
5python -m scripts.tok_eval

(runs/speedrun.sh:49-66)

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:

bash
1# 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

(runs/speedrun.sh:67-76)

Modell evaluieren

Die Evaluierung umfasst BPB-Metriken auf Trainings-/Validierungsdaten sowie Stichproben:

bash
1torchrun --standalone --nproc_per_node=8 -m scripts.base_eval \
2  -- --device-batch-size=16

(runs/speedrun.sh:67-76)

Training für CPU/MacBook

Für ressourcenbeschränkte Umgebungen kann ein deutlich kleineres Modell trainiert werden:

bash
1python -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

(scripts/base_train.py:1-12)

SFT Finetuning und Chat-Funktionalität

Supervised Fine-Tuning

Das SFT-Training vermittelt dem Modell Konversationsfähigkeit und spezielle Token:

bash
1# 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

(runs/speedrun.sh:78-93)

Web-Interface starten

Der Web-Server bietet eine ChatGPT-ähnliche Oberfläche mit Multi-GPU-Support:

bash
1# Einzelne GPU (Standard)
2python -m scripts.chat_web
3
4# 4 GPUs
5python -m scripts.chat_web --num-gpus 4

(scripts/chat_web.py:1-31)

Der Server läuft standardmäßig auf Port 8000 und bietet folgende Endpunkte:

EndpunktMethodeBeschreibung
/GETChat UI
/chat/completionsPOSTChat API (Streaming)
/healthGETHealth Check mit Worker-Status
/statsGETGPU-Auslastung und Statistiken

(scripts/chat_web.py:1-31)

CLI-Chat

Für schnelle Tests steht auch ein CLI-Interface zur Verfügung:

bash
1# Interaktiver Chat
2python -m scripts.chat_cli
3
4# Einzelne Anfrage
5python -m scripts.chat_cli -p "Why is the sky blue?"

(runs/speedrun.sh:78-93)

Schnellstart-Pfade

Empfohlener Pfad: Vollständiges Training

Für Benutzer mit Zugriff auf 8×H100 Hardware:

bash
1# 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

(runs/speedrun.sh:1-12)

Minimaler Pfad: Nur Inferenz

Für Benutzer, die nur chatten möchten (benötigt vortrainiertes Modell):

bash
1# Umgebung einrichten
2uv venv && source .venv/bin/activate
3uv sync --extra gpu
4
5# Web-Server starten
6python -m scripts.chat_web

Alternative Pfade

PfadHardwareDauerBefehl
Vollständiges Training8×H100~3hbash runs/speedrun.sh
Kleines ModellCPU/MacBookMinutenpython -m scripts.base_train --depth=4 ...
Nur Inferenz1 GPUSofortpython -m scripts.chat_web

Laufzeitüberprüfung und Validierung

Trainingsfortschritt überwachen

Während des Trainings werden Markdown-Berichte im report/-Verzeichnis generiert:

bash
1# Bericht zurücksetzen und Header schreiben
2python -m nanochat.report reset
3
4# Vollständigen Bericht generieren
5python -m nanochat.report generate

(runs/speedrun.sh:42-46)

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!

(scripts/chat_web.py:107-133)

Der Health-Check-Endpunkt kann zur Validierung verwendet werden:

bash
1curl http://localhost:8000/health

Erwartete Ausgaben

PhaseErfolgsindikator
Tokenizer-TrainingKompressionsrate wird ausgegeben
PretrainingBPB-Metriken auf Train/Val
SFT-TrainingEvaluierung 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:

bash
1# Statt --device-batch-size=16
2torchrun ... -m scripts.base_train -- --device-batch-size=8
3# Oder weiter reduzieren auf 4, 2, 1

(scripts/base_train.py:1-12)

Problem 2: Datendownload schlägt fehl

Symptom: nanochat.dataset-Befehl gibt Fehler zurück.

Lösung: Manuellen Download prüfen und Cache-Berechtigungen:

bash
1# 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:

bash
1# 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

(scripts/chat_web.py:62-73)

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:

bash
1# Ohne FP8 (langsamer, aber kompatibel)
2torchrun ... -m scripts.base_train -- --depth=24 ...

(runs/speedrun.sh:67-76)

Nächste Schritte

Nach erfolgreichem Schnellstart empfiehlt sich die Exploration folgender Bereiche:

  1. Hyperparameter-Tuning: Anpassung von Lernraten, Batch-Größen und Architekturparametern für spezifische Anwendungsfälle
  2. Custom Datasets: Integration eigener Trainingsdaten in die Pipeline
  3. Modell-Architektur: Experimente mit verschiedenen depth- und aspect-ratio-Konfigurationen
  4. Produktions-Deployment: Konfiguration des Web-Servers für Multi-User-Szenarien mit --num-gpus Parameter

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.