ChatGPT-Klon für 100 Dollar erstellen - Single-File Full-Stack LLM-Implementierung

MITPythonnanochatkarpathy 33.3k Last Updated: October 25, 2025

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_size muss 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:

  • 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

Star History Chart