ChatGPT-Klon für 100 Dollar erstellen - Single-File Full-Stack LLM-Implementierung
nanochat Projektdetailbeschreibung
Projektübersicht
nanochat ist ein Full-Stack-Implementierungsprojekt für ein Großes Sprachmodell (LLM), das vom bekannten KI-Forscher Andrej Karpathy entwickelt wurde. Seine Kernphilosophie ist es, mit dem geringsten Codeaufwand und den niedrigsten Kosten vollständig zu demonstrieren, wie man einen ChatGPT-ähnlichen Chatbot von Grund auf neu erstellt.
Projektslogan: "The best ChatGPT that $100 can buy." (Der beste ChatGPT, den man für 100 Dollar kaufen kann.)
Kernmerkmale
1. Minimalistisches Designprinzip
- Eine einzige, klare, minimale und modifizierbare Codebasis
- Design mit geringen Abhängigkeiten
- Ca. 8.300 Zeilen Code, 44 Dateien
- Insgesamt ca. 83.497 Tokens (ca. 334 KB)
2. End-to-End-Komplettprozess
nanochat deckt alle Phasen des Aufbaus eines LLM ab:
- Tokenisierung
- Vortraining
- Feinabstimmung
- Evaluierung
- Inferenz
- Web-Bereitstellung
3. Kostengünstiges Training
- Basisversion (ca. 100 $): ca. 4 Stunden auf einem 8×H100-Knoten
- Mittelstufe (ca. 300 $): ca. 12 Stunden, Leistung leicht über GPT-2
- Fortgeschrittene Version (ca. 1000 $): ca. 41,6 Stunden
4. Bildungsorientierung
- Konzipiert als Abschlussprojekt für den LLM101n-Kurs von Eureka Labs
- Code ist hochgradig lesbar, was das Lernen und Verstehen erleichtert
- Geeignet für Entwickler, die den gesamten LLM-Trainingsprozess tiefgehend verstehen möchten
Schnellstart
Schnelles Trainingsskript ausführen
Auf einem 8×H100 GPU-Knoten ausführen:
bash speedrun.sh
Oder in einer Screen-Sitzung ausführen (empfohlen):
screen -L -Logfile speedrun.log -S speedrun bash speedrun.sh
Warten Sie ca. 4 Stunden, dann steht ein einsatzbereites LLM-Modell zur Verfügung.
Web-Oberfläche starten
Nach Abschluss des Trainings die virtuelle Umgebung aktivieren und den Dienst starten:
source .venv/bin/activate
python -m scripts.chat_web
Besuchen Sie dann die angezeigte URL (z.B. http://209.20.xxx.xxx:8000/), um wie bei ChatGPT mit Ihrem eigenen LLM zu chatten.
Beispiel für Trainingsergebnisse
Nach dem Training wird eine report.md-Datei generiert, die die Bewertungsmetriken des Modells enthält:
Metric | BASE | MID | SFT | RL
---------------|--------|--------|--------|-------
CORE | 0.2219 | - | - | -
ARC-Challenge | - | 0.2875 | 0.2807 | -
ARC-Easy | - | 0.3561 | 0.3876 | -
GSM8K | - | 0.0250 | 0.0455 | 0.0758
HumanEval | - | 0.0671 | 0.0854 | -
MMLU | - | 0.3111 | 0.3151 | -
ChatCORE | - | 0.0730 | 0.0884 | -
Total wall clock time: 3h51m
Hinweis: Das für 100 $ trainierte Modell hat eine begrenzte Leistung (ca. 4e19 FLOPs), was einer Sprachfähigkeit auf "Kindergarten-Niveau" entspricht, aber ausreicht, um den vollständigen Trainingsprozess zu demonstrieren.
Erweiterung auf größere Modelle
Um größere Modelle (wie GPT-2-ähnliche d26-Modelle) zu trainieren, sind nur geringfügige Änderungen an speedrun.sh erforderlich:
# 1. Weitere Datenshards herunterladen
python -m nanochat.dataset -n 450 &
# 2. Modelltiefe erhöhen, Batch-Größe reduzieren, um den Speicher anzupassen
torchrun --standalone --nproc_per_node=8 -m scripts.base_train -- --depth=26 --device_batch_size=16
# 3. Während des Mid-Trainings dieselbe Konfiguration beibehalten
torchrun --standalone --nproc_per_node=8 -m scripts.mid_train -- --device_batch_size=16
Anforderungen an die Laufzeitumgebung
Empfohlene Konfiguration
- 8×H100 80GB GPU-Knoten (ca. 24 $/Stunde)
- Empfohlener Anbieter: Lambda GPU Cloud
Kompatibilität
- 8×A100 GPU: Lauffähig, aber langsamer
- Einzel-GPU: Lauffähig, aber die Trainingszeit verlängert sich um das 8-fache
- Kleine VRAM-GPUs (<80GB): Der Parameter
--device_batch_sizemuss angepasst werden (von 32 auf 16, 8, 4, 2 oder 1 reduzieren) - Andere Plattformen: Basierend auf PyTorch, theoretisch xpu, mps usw. unterstützt, erfordert jedoch zusätzliche Konfiguration
Technologie-Stack
- Deep-Learning-Framework: PyTorch
- Verteiltes Training: torchrun
- Paketverwaltung: uv
- Datensätze: HuggingFace Fineweb, Smoltalk
- Tokenizer: Benutzerdefinierte Rust-Implementierung (rustbpe)
Code mit KI erkunden
Da die Codebasis kompakt ist (~330KB), kann das gesamte Projekt gepackt und einem LLM zur Analyse bereitgestellt werden:
files-to-prompt . -e py -e md -e rs -e html -e toml -e sh --ignore "*target*" --cxml > packaged.txt
Oder nutzen Sie DeepWiki, um die Codebasis direkt online zu erkunden.
Tests
Das Projekt enthält Unit-Tests, insbesondere für den Tokenizer:
python -m pytest tests/test_rustbpe.py -v -s
Projektpositionierung und Ziele
nanochat ist nicht:
- Ein voll funktionsfähiges LLM-Framework
- Eine hochgradig konfigurierbare Modellfabrik
- Eine produktionsreife Lösung
nanochat ist:
- Eine Referenzimplementierung zu Bildungszwecken
- Eine modifizierbare, verzweigbare starke Basislinie
- Für die Forschung an Mikromodellen mit einem Budget von <1000 $
- Zur Reduzierung der kognitiven Komplexität der LLM-Entwicklung
Projekthistorie und Danksagungen
Inspirationsquellen:
- nanoGPT - Karpathys früheres Vortrainingsprojekt
- modded-nanoGPT - Eine gamifizierte nanoGPT-Variante
Danksagungen:
- HuggingFace - Bereitstellung der Datensätze fineweb und smoltalk
- Lambda - Bereitstellung der für die Entwicklung benötigten Rechenleistung
- Alec Radford - LLM-Chefberater
Open-Source-Lizenz
MIT-Lizenz
Zitierformat
@misc{nanochat,
author = {Andrej Karpathy},
title = {nanochat: The best ChatGPT that $100 can buy},
year = {2025},
publisher = {GitHub},
url = {https://github.com/karpathy/nanochat}
}
Projektstatus
Das Projekt befindet sich weiterhin in aktiver Entwicklung, mit dem Ziel, den Stand der Technik bei Mikromodellen kontinuierlich zu verbessern und mehr Menschen die Möglichkeit zu geben, den gesamten LLM-Trainingsprozess zu erschwinglichen Kosten vollständig zu erleben.
GitHub-Adresse: https://github.com/karpathy/nanochat