29 Punkte von GN⁺ 2025-10-14 | 1 Kommentare | Auf WhatsApp teilen
  • nanochat von Andrej karpathy ist ein Open-Source-Projekt, mit dem sich mit einem Budget von 100 US-Dollar direkt ein dialogorientiertes LLM ähnlich wie ChatGPT bauen lässt
  • Die gesamte Pipeline (Tokenisierung, Pretraining, Midtraining, Finetuning, Evaluierung, Inferenz, Web-Service) ist kompakt und hackbar implementiert
  • Auf einem einzelnen 8XH100-GPU-Knoten ist das Training mit nur einem Skript in weniger als 4 Stunden abgeschlossen; das d26-Modell mit Zielniveau GPT-2 benötigt etwa 12 Stunden für rund 300 US-Dollar, die 1000-Dollar-Stufe 41,6 Stunden
  • Mit einer äußerst kompakten Codebasis von 8.300 Zeilen in 44 Dateien bei einer Größe von 330 KB bietet es eine leicht lesbare und leicht forkbare starke Baseline ohne komplexe Konfigurationsobjekte oder Modellfabriken
  • Es wird als Capstone-Projekt des LLM101n-Kurses von Eureka Labs entwickelt und hat zum Ziel, den State of the Art bei zugänglichen Mikromodellen mit einem Budget von unter 1000 US-Dollar zu verbessern

Überblick über das nanochat-Projekt

  • nanochat ist ein Open-Source-Projekt für Entwickler, die für 100 US-Dollar ein dialogorientiertes LLM ähnlich wie ChatGPT umsetzen möchten
  • Die gesamte Codebasis ist einheitlich, gut lesbar, abhängigkeitsarm und kompakt geschrieben, was Änderungen und Experimente erleichtert
  • Es bietet eine Umgebung, in der sich alle Schritte von pretraining, finetuning, Evaluierung, Inferenz und Web-UI auf einmal verwalten lassen
  • Mit dem Skript speedrun.sh lässt sich die gesamte Pipeline automatisch ausführen, sodass auch Einsteiger leicht starten können
  • Es ist mit minimalen Abhängigkeiten und einer hackbaren Struktur entworfen und damit optimal für Lernzwecke geeignet, bei denen man den Code leicht verstehen und ändern können soll
  • Das Projekt soll als Capstone-Projekt des LLM101n-Kurses genutzt werden, der bei Eureka Labs entwickelt wird

Schneller Einstieg (Quick Start)

  • In einer GPU-Umgebung, insbesondere auf einem 8XH100-Knoten, richtet das Ausführen von speedrun.sh Training und Inferenz in etwa 4 Stunden ein
    • Auf Basis eines 8XH100-Knotens zu 24 US-Dollar pro Stunde ergibt das insgesamt 4 Stunden Laufzeit
  • Es wird empfohlen, die Ausführung innerhalb einer screen-Sitzung zu starten, damit sich das lang laufende Training stabil überwachen lässt
    • Befehl: screen -L -Logfile speedrun.log -S speedrun bash speedrun.sh
    • Mit Ctrl-a d trennen und den Fortschritt mit tail speedrun.log prüfen
  • Nach Abschluss des Trainings kann man dem LLM über eine einfache Web-UI frei Fragen stellen und die Ergebnisse im Chatfenster ansehen
    • python -m scripts.chat_web
  • Das 4e19-FLOPs-Modell bietet Konversationsfähigkeiten auf Kindergartenkind-Niveau
    • Es kann um Geschichten oder Gedichte gebeten werden
    • Halluzinationen lassen sich beobachten
    • Es kann grundlegende Fragen beantworten, etwa warum der Himmel blau ist
  • Trainingsergebnisse und verschiedene Leistungsmetriken werden in report.md gespeichert

Bericht zu den Trainingsergebnissen

  • Die Datei report.md enthält das „Zeugnis“ des Trainingslaufs
    • Sie liefert verschiedene Evaluierungswerte und Metriken
    • In der abschließenden Übersichtstabelle wird die Leistung der Phasen BASE, MID, SFT und RL angezeigt
  • Statistiken zur Codebasis
    • Zeichenanzahl: 333.989
    • Zeilenzahl: 8.304
    • Dateianzahl: 44
    • Token-Anzahl (geschätzt): 83.497
    • Abhängigkeiten (Zeilenzahl in uv.lock): 2.004
  • Beispiele für Benchmark-Leistung
    • CORE: 0.2219 (BASE)
    • ARC-Challenge: 0.2875 (MID), 0.2807 (SFT)
    • GSM8K: 0.0250 (MID), 0.0455 (SFT), 0.0758 (RL)
    • HumanEval: 0.0671 (MID), 0.0854 (SFT)
    • Gesamtdauer: 3 Stunden 51 Minuten
  • Die Modellleistung liegt unter ChatGPT, der Schwerpunkt liegt jedoch auf der Erfahrung beim Aufbau eines LLM mit kleinem Budget

Größere Modelle (Bigger Models)

  • Für 100 US-Dollar lässt sich kein leistungsstarker ChatGPT-Klon trainieren; echte LLMs sind bekannt für Investitionskosten in Millionenhöhe
  • Es gibt zwei weitere interessante Skalierungsstufen
    • d26-Modell der 300-Dollar-Stufe (depth=26): etwa 12 Stunden Training, leicht über dem GPT-2-CORE-Wert
    • 1000-Dollar-Stufe: etwa 41,6 Stunden, eine saubere runde Zahl
  • Änderungen an speedrun.sh für das Training des d26-Modells
    • Es müssen mehr Daten-Shards heruntergeladen werden
      • Die Token-Anzahl wird berechnet, indem die Parameterzahl mit 20 multipliziert wird
      • Die Zeichenanzahl wird berechnet, indem mit 4,8 multipliziert wird
      • Die Zahl der Shards wird berechnet, indem durch 250 Millionen geteilt wird (etwa 450 erforderlich)
    • Die Option --depth=26 verwenden und device_batch_size von 32 auf 16 halbieren, um OOM zu vermeiden
    • Auch in der Midtraining-Phase muss derselbe device_batch_size verwendet werden

Anforderungen an die Rechenumgebung

  • Es läuft auch auf einem 8XA100-GPU-Knoten, allerdings etwas langsamer
  • Es kann auch auf einer einzelnen GPU ausgeführt werden
    • Ohne torchrun entstehen nahezu identische Ergebnisse
    • Es wird automatisch auf Gradient Accumulation umgeschaltet
    • Die Laufzeit ist achtmal so lang
  • Bei GPUs mit weniger als 80 GB VRAM müssen Hyperparameter angepasst werden
    • --device_batch_size von 32 (Standardwert) auf 16, 8, 4, 2 oder 1 reduzieren, um Speicher freizumachen
    • Für Werte unter 1 ist ein kreativerer Ansatz nötig
  • Auf Basis von Vanilla PyTorch kann es verschiedene Umgebungen wie xpu, mps usw. unterstützen
    • Es wird nicht standardmäßig mitgeliefert, daher sind kleinere Anpassungen nötig

Nutzen und Zugänglichkeit

  • Der größte Vorteil von nanochat ist, dass sich alle Dateien gesammelt verpacken und dadurch andere LLMs oder Dokumentensuchdienste leicht dazu befragen lassen
  • Beispiel für die Nutzung des Dienstprogramms files-to-prompt
    • Einschluss von Dateien vom Typ py, md, rs, html, toml, sh
    • Ausschluss des Ordners rustbpe/target
    • Auswahl des Ausgabeformats cxml
    • Verpackung in etwa 330 KB (unter etwa 100.000 Token), 45 Dateien und 8.000 Zeilen Code
  • DeepWiki wird empfohlen
    • Ersetze in der GitHub-URL github.com durch deepwiki.com, um Fragen zum Repository stellen zu können
    • Bereitgestellt von Devin/Cognition

Beiträge und Projektausrichtung

  • nanochat ist noch kein abgeschlossenes Projekt
  • Ziel ist es, den State of the Art von Mikromodellen zu verbessern, die sich mit einem Budget von unter 1000 US-Dollar von Anfang bis Ende umsetzen lassen
  • Zugänglichkeit betrifft nicht nur die Kosten, sondern auch die kognitive Komplexität
    • Keine riesigen Konfigurationsobjekte, keine Modellfabriken, kein monströser if-then-else-Code
    • Es ist kein bis ins Letzte konfigurierbares LLM-„Framework“
  • Eine einheitliche, konsistente, minimale, gut lesbare, hackbare und maximal leicht forkbare „starke Baseline“ als Codebasis
    • Sie ist darauf ausgelegt, von Anfang bis Ende zu laufen und einen konkreten ChatGPT-Klon samt Zeugnis zu erzeugen

1 Kommentare

 
GN⁺ 2025-10-14
Hacker-News-Kommentare
  • Interessanter Erfahrungsbericht zur Nutzung eines AI-Coding-Tools
    Ich hatte Karpathy einmal gefragt, wie viel Code er selbst geschrieben hat, weil mich das interessiert hat.
    Karpathy: Danke für die Frage, ich habe tatsächlich den Großteil des Codes selbst geschrieben (mit Tab-Autovervollständigung).
    Ich habe claude/codex-Agenten ein paar Mal ausprobiert, aber ihre Genauigkeit war zu gering, daher waren sie nicht besonders hilfreich.
    Vermutlich liegt das daran, dass mein eigenes Repo zu weit von der Datenverteilung entfernt ist.
    Link zur ursprünglichen Unterhaltung

    • „Dass das Repo zu weit von der Datenverteilung entfernt ist“ erklärt, warum AI-Modelle mir oft nicht helfen.
      Alles, woran ich arbeite, ist zu speziell und liegt weit außerhalb der Verteilung.

    • Es ist schön, das von jemandem Vertrauenswürdigem wie Karpathy zu hören.
      Leute, die glauben, AGI stehe unmittelbar bevor, sollten ihre Erwartungen vielleicht etwas zurückschrauben.
      Ich mag Claude Code auch.
      Ich muss regelmäßig Web-Code schreiben, und dort ist die Coverage der Trainingsdaten so gut, dass Claude ein deutlich besserer Webentwickler ist als ich.
      Wenn es aber darum geht, tief in den algorithmischen Kern meiner Automatisierungstools einzusteigen, kann Claude deutlich weniger beitragen und macht mehr Fehler.
      Insgesamt ist es trotzdem ein Plus, sodass ich gern dafür bezahle.
      Selbst wenn es nur als Webentwicklungs-Helfer dient, ist es schon eine große Hilfe.

    • Ich halte das eher für ein natürliches Phänomen.
      Es geht hier um Situationen, in denen neuer und origineller Code geschrieben wird.
      Viele kritisieren Karpathys Antwort, aber allein die Tatsache, dass er claude/codex ausprobiert hat, deutet darauf hin, dass diese Tools ihm früher tatsächlich geholfen haben.

    • Ein weiterer Mirror-Link zu Karpathys Tweet hier

  • Beeindruckend ist, dass nanochat von modded-nanoGPT inspiriert wurde.
    Die Abstammungslinie ist Karpathys nano-GPT → Keller Jordans modded-nanoGPT (eine Version, die Modelle schnell trainiert) → NanoChat.
    Bemerkenswert an modded-nanoGPT ist, wie extrem schnell damit kleine GPT-Modelle trainiert werden können.
    Besonders interessant ist, dass für die linearen Layer statt AdamW der Muon-Optimizer (vom Autor selbst entwickelt) verwendet wird.
    modded-nanoGPT, Einführung in den Muon-Optimizer

    • Muon ist ein Optimizer, den Keller Jordan für diesen schnellen Trainingswettbewerb entwickelt hat, ergänzt durch Verbesserungen anderer.
      In weniger als einem Jahr wird er bereits breit als SOTA für das Modelltraining eingesetzt.

    • Dass ein einzelner Inference-Knoten mit 8xH100 läuft, ist ziemlich schockierend.
      Ich frage mich, ob Frontier-LLMs im praktischen Einsatz ebenfalls in dieser Größenordnung laufen oder noch mehr VRAM/Rechenleistung brauchen.
      Bei etwa 8 $ pro Stunde und angenommenen 5 Sekunden pro Request käme man grob auf rund 700 Requests.
      Das wären also ungefähr 1 Cent pro Request.
      Ich frage mich, ob mein Rechenweg irgendwo falsch ist.

  • Das Training läuft gerade tatsächlich noch (vor 20 Minuten gestartet).
    Öffentliches Trainingslog
    In 4 Stunden, wenn das Modell fertig ist, soll es für alle zum Testen der Inference freigegeben werden.

    • Das fertige Modell wurde auf Hugging Face hochgeladen.
      Ich habe nicht so gute Ergebnisse wie Karpathy bekommen (vielleicht Pech mit dem Seed?).
      Trotzdem macht es Spaß, damit zu experimentieren.
      Zum Beispiel habe ich gefragt: „Wie viele Beine hat ein Hund?“
      Assistent: „Das ist eine wirklich interessante Frage, und sie wird unter Hundefreunden seit Jahrhunderten diskutiert. Eine ‚richtige‘ Antwort gibt es nicht (...)“

    • Im Kommentar neben dem ersten Diagramm steht:
      „Wichtigste Messgröße für den Fortschritt. Bits per byte sind, wie Karpathy sagt, ‚eine viel bessere Metrik als der übliche Cross-Entropy-Loss. Sie normalisiert den Loss anhand der Anzahl von Bytes pro Token und macht Vergleiche unabhängig vom Tokenizer möglich‘“
      Das ist so eine klare Erklärung, dass es mir fast peinlich ist, bei meinen eigenen Tokenizer-Experimenten mit TinyStories nicht daran gedacht zu haben.
      Ich würde gern noch einmal analysieren, wie gut mein Tokenizer tatsächlich war.

    • Es wäre schön, wenn es eine kurze Anleitung gäbe, wie man dieses Repository mit W&B fürs Training aufsetzt und laufen lässt.
      Ich frage mich, ob man das Schritt für Schritt für Programmierer teilen könnte, die noch nie einen Modelltrainings-Workflow durchlaufen haben.

  • Macht Spaß!
    Karpathys Shakespeare-Generator war nach ollama das erste Projekt, mit dem ich experimentiert habe.
    Ich wollte verstehen, wie LLMs funktionieren.
    Seit letzter Woche bin ich völlig in LLMs vertieft und baue ein Trainings-/Inference-System von Grund auf mit zwei Backends:

    • CPU (auf Basis von JAX)
    • GPU (auf Basis von wgpu-py)
      rocm/pytorch sind mir zu umständlich, daher stoßen sie mich eher ab.
      Vulkan ist gut. In llama-cpp wird es ebenfalls so genutzt.
      Letzte Woche habe ich beide Backends, CPU und GPU, zum Laufen gebracht, und beim GPU-Backend habe ich mich darauf konzentriert, Bugs zu beheben.
      Ich habe den WGSL-Code refaktoriert und effizienter gemacht.
      Dabei habe ich LLMs intensiv genutzt, und das war ein überraschend großer Wendepunkt.
      Mit Refactoring-Prompts konnte ich Fehler Schritt für Schritt beheben und am Ende Code erzeugen, der sich sogar mit astral ty typprüfen lässt.
    • pytorch stößt dich ab?
      Schwer vorstellbar, dass es eine noch ineffizientere Wahl geben könnte.
  • Ich habe dieses Wochenende nanoGPT(Link) ausprobiert.
    Es ist schon ein etwas älteres Projekt, aber eine großartige praktische Übung, bei der man selbst ein kleines Shakespeare-GPT baut und trainiert.
    Ich habe es mit ungefähr 0,8 Mio. Parametern auf der CPU laufen lassen.
    Das Ergebnis ist ungefähr im erwartbaren Rahmen eher „nicht besonders gut“.
    Trotzdem hatte es etwas Magisches.
    Für Leute, die nicht Deep Learning studieren, sondern einfach gern experimentieren und hacken, ist es der perfekte Einstieg.
    Meinen Blogpost über das nanoGPT-Wochenende habe ich leider noch nicht fertig geschrieben ... sonst hätte ich ihn hier verlinkt.

    • Es ist eine nützliche Übung, weil gute ML-Forschung im Kleinen validiert werden kann.
      Dieses neue Beispiel ist noch weiter entwickelt und behandelt Instruction Following, Tool-Use-SFT und sogar RLVR.
      Dadurch entsteht eine nützlichere Baseline.

    • Wenn man den Shakespeare-Code nur leicht anpasst und mit anderen Daten trainiert, funktioniert er ziemlich gut zur Generierung von Magic-The-Gathering-Commander-Decks.

  • „Rat vom chief LLM whisperer Alec Radford bekommen“
    Wenn jemals ein Podcast mit Alec und Andrej erscheint, würde das die Welt erschüttern.
    Von den glorreichen Tagen von GPT-1 bis heute, wo man in 4 Stunden etwas auf GPT-3-Niveau baut.

    • Bitte, es wäre perfekt, wenn dieser Podcast wirklich käme.
  • Eureka Labs: Github-Link
    Andrej ist wirklich ein unglaublich produktiver und beeindruckender Mensch.
    Schon seine Arbeit zu verfolgen, ist eine bemerkenswerte Erfahrung.

  • Ich habe immer gedacht, dass der beste Beitrag zur Menschheit das Produkt daraus ist, wie viele Menschen man wie tiefgehend unterstützt.
    Karpathys Open-Source-Arbeit ist in diesem Sinn ein Ansatz mit enormer Hebelwirkung.
    Die Welt von heute ist auf Open-Source-Projekten aufgebaut.
    Jeder auf der Welt kann kostenlos programmieren lernen und Software bauen — dank dieser Freiheit.
    Ich hoffe, dass auch der AI/LLM-Bereich dieser positiven Richtung folgt.

    • Ich mag diese Tradition des Kostenlosen und Teilens in der Softwarewelt wirklich sehr,
      aber bei LLMs scheint es wegen der hohen Trainingskosten und der leistungsstarken Hardware schwierig, diesen Fluss aufrechtzuerhalten.
      Künftig könnte auch Softwareentwicklung in eine Struktur übergehen, in der man „Miete“ an LLM-Hosts zahlt.
      Vielleicht finden wir wieder Wege, lokale On-Prem-Inference für alle zugänglich zu machen,
      aber wegen der hohen Trainingskosten wirkt das im Moment unklar.
      Und je stärker die Abhängigkeit von LLMs wird,
      desto mehr sorge ich mich, dass „handgemachte“ Inhalte wie Tutorials für Programmieranfänger immer seltener werden.

    • (Etwas lang, aber alles kommt aus dem ehrlichen Wunsch nach einer besseren Welt.)
      Diese Sichtweise unterscheidet sich etwas von der vorherrschenden „Anti-AI“-Stimmung.
      Das Konzept des geistigen Eigentums bedeutet eher, dass bestimmte Einzelne Informationsbesitz anhäufen und an die gesamte Menschheit vermieten, statt direkt zur Menschheit beizutragen.
      Gleichzeitig brauchen wir aber unbedingt ein Umfeld, in dem einzelne Kreative ihren Lebensunterhalt sichern können.
      Nicht nur Karpathy, auch Tausende YouTube-Creator leisten in ihren jeweiligen Bereichen einen großen Beitrag zur Gesellschaft, finde ich.
      Dass viele von ihnen auf Sponsoring angewiesen sind, hat allerdings einen bitteren Beigeschmack.
      Es gibt zwar Patreon, aber ideal ist das auch nicht.
      Ich stimme zu, dass all diese Bemühungen auf bedeutende Weise zur Gesellschaft beitragen.
      Kürzlich sagte Jon Stewart in der Daily Show, AI-Training sei eine Form von Strip Mining am Wissen der Menschheit.
      AI-Training wird manchmal einseitig als Diebstahl dargestellt, aber tatsächlich gibt es dazu sehr unterschiedliche Sichtweisen.
      Dieser Trend könnte am Ende hyperkapitalistische Strukturen des Wissensbesitzes verfestigen,
      sodass sich Eigentum an Ideen zunehmend bei wenigen konzentriert.
      Das hilft der Welt insgesamt kaum und nützt vor allem einigen wenigen Gruppen.
      Auch der Handel mit geistigem Eigentum konzentriert sich mit der Zeit immer stärker.
      Ich denke, wir brauchen dazu unbedingt Diskussionen und neue Interpretationen, die zur modernen Gesellschaft passen.
      Schade ist, dass ein Defätismus nach dem Motto „Die da oben werden es sowieso blockieren, Diskussionen bringen nichts“ solche Debatten oft im Keim erstickt.
      Es ist wichtig, frei darüber zu diskutieren, wie bessere Lösungen entstehen könnten.

    • Ich empfehle häufig seine ANN/LLM-from-scratch-Videoreihe.
      Die Erklärungen sind sehr klar, und auch der Coding-Stil ist pythonisch, knapp und dennoch gut lesbar.
      (Die pytorch-Vektorisierung ist zwar komplex, aber das liegt einfach an der Schwierigkeit des Themas.)
      Dass man beim Anschauen der Videos auch stilistisch mitlernt, hilft allen sehr.

  • Ich frage mich, ob ich ein Modell mit all meinen tatsächlich besessenen Psychologiebüchern, Materialien, Berichten und Papers trainieren und dann auf einem 1xH100-Knoten(Link) bei Bedarf spezialisierte Fragen inferieren lassen könnte.

    • Praktisch wäre das möglich, aber die Leistung wäre extrem schlecht.
      In so einem Fall ist es viel besser, ein kleines vortrainiertes Modell zu nehmen und auf meinen Daten zu finetunen
      oder einen RAG-Workflow (Retrieval Augmented Generation) zu verwenden, oder beides zu kombinieren.

    • Das ist möglich.
      Aber oft liefern ein allgemeines Modell und verschiedene Wege, meine Dokumente in den Arbeitskontext zu bringen (z. B. RAG, Apples hierarchical memories usw. Paper-Link), sogar bessere Ergebnisse.

    • Das kann man tun,
      aber weil mein Datensatz selbst sehr klein ist, wäre die Leistung viel schlechter als mit einem vortrainierten Modell plus Finetuning oder mit einem kleinen Modell plus RAG.

    • Nein.

  • Dieses Projekt ist wirklich inspirierend!
    Es wäre toll, wenn es konkrete Beispiele oder Testergebnisse zur tatsächlichen Prompt-Performance gäbe.

    • Auf Simon.incutio.com wurde darauf hingewiesen, dass es hier einen Screenshot mit echten Prompts gibt.