microgpt
(karpathy.github.io)- Eine minimale Sprachmodell-Architektur, die den gesamten Prozess von Training und Inferenz eines GPT-Modells in einer einzigen reinen Python-Datei mit 200 Zeilen implementiert
- Enthält vollständig Datensatz, Tokenizer, automatische Differenzierung, ein GPT-2-ähnliches neuronales Netz, den Adam-Optimierer sowie Trainings- und Inferenzschleifen
- Lernt auf einem Namensdatensatz und erzeugt neue Namen; macht dabei durch selbst implementiertes Autograd und eine Transformer-Struktur die Kernprinzipien von GPT sichtbar
- Läuft im Unterschied zu großen LLMs ohne Abhängigkeiten in reinem Python und reduziert alles auf die algorithmische Essenz
- Wer microgpt versteht, kann die grundlegende algorithmische Struktur großer Modelle wie ChatGPT verstehen
Überblick über microgpt
- microgpt ist eine minimale GPT-Implementierung in 200 Zeilen Python-Code und kommt ohne Abhängigkeiten von externen Bibliotheken aus
- Enthalten sind Datensatz, Tokenizer, automatische Differenzierung, eine GPT-2-ähnliche Struktur, der Adam-Optimierer sowie Trainings- und Inferenzschleifen
- Ein künstlerisches Projekt von Karpathy, das LLMs auf ihr Wesentliches reduziert, in der Tradition von micrograd, makemore und nanogpt
- Der vollständige Code ist als GitHub Gist, Webseite und Google Colab verfügbar
Datensatz
- Verwendet wird eine Textdatei mit rund 32.000 Namen, jeweils einer pro Zeile
- Jeder Name wird als eigenes Dokument behandelt, und das Modell lernt das Muster, um neue Namen zu generieren
- Beispielausgaben nach dem Training: kamon, ann, karai, jaire, vialan usw.
Tokenizer
- Ein einfacher zeichenbasierter Tokenizer, der jedem eindeutigen Zeichen eine Ganzzahl-ID zuweist
- Insgesamt 27 Tokens, bestehend aus den Buchstaben a–z und dem BOS-Token (beginning of sequence)
- Jedes Dokument wird in der Form
[BOS, e, m, m, a, BOS]für das Training eingerahmt
Automatische Differenzierung (Autograd)
- Die Klasse
Valueverfolgt Skalarwerte und Gradienten und bildet dabei den Rechengraphen - Speichert die lokalen Ableitungen (local gradients) grundlegender Operationen wie Addition, Multiplikation, Potenz, Logarithmus, Exponentialfunktion und ReLU
- Die Methode
backward()führt Backpropagation mit Anwendung der Kettenregel aus - Derselbe Algorithmus wie bei
.backward()in PyTorch wird direkt auf Skalar-Ebene implementiert
Parameterinitialisierung
- Das Modell besitzt etwa 4.192 Parameter
- Dazu gehören Embedding-Tabellen, Attention-Gewichte, MLP-Gewichte und die Ausgabeprojektion
- Jeder Parameter wird mit Zufallswerten aus einer Gauß-Verteilung initialisiert
Modellarchitektur
- Eine vereinfachte Form der GPT-2-Architektur mit RMSNorm, ReLU und Residualverbindungen (residual connections)
- Zentrale Bestandteile:
- Embedding-Phase: Token- und Positions-Embeddings werden addiert
- Multi-Head-Attention: Nach Berechnung von Q-, K- und V-Vektoren wird über den KV-Cache auf Informationen früherer Tokens zugegriffen
- MLP-Block: Ein zweischichtiges Feedforward-Netzwerk für lokale Berechnungen
- Ausgabestufe: Erzeugt Logits für die Vokabulargröße von 27
- Der KV-Cache ist auch während des Trainings aktiv, sodass die Rückpropagation durch den Cache fließt
Trainingsschleife
- In jedem Schritt wird ein Dokument ausgewählt und als
[BOS, ... , BOS]tokenisiert - Das Modell sagt die Wahrscheinlichkeit des nächsten Tokens voraus und berechnet den Cross-Entropy-Loss
- Nach der Gradientenberechnung mit
loss.backward()werden die Parameter mit dem Adam-Optimierer aktualisiert - Die Lernrate folgt einem linearen Decay
- Über 1.000 Schritte sinkt der Loss ungefähr von 3,3 auf 2,37
Inferenz
- Nach Abschluss des Trainings werden neue Namen erzeugt, beginnend mit dem BOS-Token
- In jedem Schritt wird das nächste Token gemäß den Softmax-Wahrscheinlichkeiten gesampelt
- Mit dem temperature-Wert lässt sich die Kreativität steuern (niedriger = konservativer, höher = vielfältiger)
- Beispielausgaben: kamon, ann, karai, jaire, vialan, karia, yeran, anna usw.
Ausführung
- Lässt sich allein mit Python ausführen (
python train.py) - Das Training ist in etwa einer Minute abgeschlossen, der Loss wird schrittweise ausgegeben
- Funktioniert ebenso in einem Colab-Notebook
Entwicklungsschritte des Codes
- Schrittweise Erweiterung von
train0.pybistrain5.py- Bigram → MLP → Autograd → Attention → Multi-head → Adam
- Jede Stufe ist in den build_microgpt.py-Revisionen des Gists nachvollziehbar
Unterschiede zu realen LLMs
- Daten: microgpt verwendet 32K Namen, reale LLMs Billionen von Tokens
- Tokenizer: Zeichenebene vs. BPE-basierte Subwords
- Autograd: skalarbasiertes Python vs. GPU-Tensoroperationen
- Architektur: 4K Parameter vs. Hunderte Milliarden Parameter
- Training: Wiederholung einzelner Dokumente vs. Training mit großen Batches und Mixed Precision
- Optimierung: einfaches Adam vs. fein abgestimmte Hyperparameter und Scheduling
- Nachbearbeitung: Entwicklung zur ChatGPT-Form über SFT- und RL-Phasen
- Inferenz-Infrastruktur: GPU-Verteilung, KV-Cache-Verwaltung, Quantisierung, Speculative Decoding usw.
FAQ-Zusammenfassung
- Das Modell ist eine mathematische Funktion, die Eingabe-Tokens in Wahrscheinlichkeiten für das nächste Token umwandelt
- Es gibt kein „Verstehen“, sondern Vorhersagen auf Basis gelernter statistischer Regeln
- Dieselbe Token-Vorhersageschleife wie bei ChatGPT wird hier in verkleinerter Form umgesetzt
- „Halluzinationen“ sind ein natürliches Ergebnis probabilistischen Samplings
- Die Geschwindigkeit ist gering, aber der Kernalgorithmus von LLMs wird vollständig nachgebildet
- Für bessere Ergebnisse lassen sich Trainingsschritte, Modellgröße und Datensatz anpassen
- Durch Austausch des Datensatzes können verschiedenste Muster gelernt werden, etwa Städtenamen, Pokémon-Namen oder Gedichte
microgpt ist ein didaktisches und experimentelles Modell, das alle zentralen Algorithmen eines LLM in minimaler Form implementiert und die Funktionsweise großer Sprachmodelle vollständig offenlegt.
1 Kommentare
Hacker-News-Kommentare
Jemand hat microgpt modifiziert und ein kleines GPT gebaut, das koreanische Namen erzeugt
Es gibt auch eine Webseite, die den gesamten Prozess visualisiert — von der Tokenisierung bis zur Inferenz kann man die gesamte Pipeline erkunden
Im English GPT lab kann man es selbst ausprobieren
Man kann sich am PyTorch-char_rnn-Tutorial orientieren
Tokenisierung, Embeddings, Attention, Loss·Gradienten, Training, Inferenz und der Vergleich mit einem Real GPT werden gut erklärt
Die Seite selbst ist eher eine KI-generierte Visualisierung, die auf dem ursprünglichen Blogpost basiert
Ich habe microgpt nach C++ portiert
Code-Link
Doppelt so viele Codezeilen, aber zehnmal schneller
Der schwierigste Teil war, die Value-Klasse in C++ auszudrücken, und am Ende habe ich shared_ptr verwendet
Ich habe mich gefragt, was genau „Halluzination“ bedeutet
Das Modell sampelt letztlich nur Tokens aus einer Wahrscheinlichkeitsverteilung und hat keinen Begriff von Wahrheit
Daraus ergibt sich die Frage, ob ein LLM einen Konfidenzwert für seine eigenen Antworten haben kann
Vortrainierte Modelle sind kalibriert, aber nach dem Befolgen von Anweisungen (Post-Training) geht das kaputt
Verwandte Forschung: Paper 1, Paper 2
Wie ein Konfidenzintervall in der Statistik ohne Kenntnis der Grundgesamtheit haben auch LLM-Wahrscheinlichkeiten keine direkte Verbindung zur realen Welt
Letztlich ist ein LLM wie jemand, der nur Bücher gelesen hat, aber keine Erfahrung mit der Welt besitzt
Diese Wahrscheinlichkeit ist aber nicht die „Wahrscheinlichkeit, dass es wahr ist“, sondern „die Wahrscheinlichkeit, dass ich in dieser Situation dieses Token ausgebe“
Ich habe microgpt zum Lernen nach Rust portiert
microgpt-rs
Am schwierigsten war es, die autograd-Graphstruktur als Rust-Typen auszudrücken
Derzeit passe ich es an, damit es per WebAssembly im Browser laufen kann, und ich plane dazu einen Blogpost
Karpathys Code hat wirklich ein poetisches und kompaktes Design
Der Code ist schön und gut lesbar, aber ich wünschte, es gäbe eine Zeile-für-Zeile-Erklärung mit Kommentaren wie bei backbone.js
Siehe die Backbone-Dokumentation
Das Docco-Projekt ist ebenfalls ein großartiges Tool vom selben Ersteller
Es gibt auch eine HTML-Version des Codes
microgpt-Blog
Dank Karpathys Videos und Code habe ich das Gefühl, zum ersten Mal Gradientenabstieg, Backpropagation und die Kettenregel wirklich verstanden zu haben
Wenn ich nur die Mathematik gesehen habe, war ich verwirrt, aber zusammen mit dem Code wurde es klar
Für mich persönlich war das so etwas wie ein Lebenserfolgserlebnis
Wie Karpathy sagte, ist es wichtig, es anderen beizubringen, wenn man es wirklich verstehen will
Ich bin überrascht, dass dieses Projekt erst jetzt auf HN gelandet ist
Ich habe eine 35-zeilige JS-Version und eine Python-Version namens PicoGPT gebaut,
die direkt im Web ausführbar ist
Es ist sogar ein ultrakleines LLM, das per QR-Code ausführbar ist
Verwandte Threads: Link 1, Link 2
Ich habe den microgpt-Code in einen visualisierten Blogpost verwandelt
Blog-Link
Er zeigt den Codefluss interaktiv Schritt für Schritt
aber tatsächlich sind alle vier im Datensatz enthalten
Der aktuelle ‚micro‘-Trend in der KI ist interessant
Statt Modelle einfach nur größer zu machen, wird bei kleinen und fokussierten Modellen die Effizienz immer wichtiger
Ich nutze tatsächlich Gemini Flash für Domänenanalyse, und das Verhältnis aus Geschwindigkeit und Kosten ist deutlich besser
Schon der Unterschied bei der Latenz verändert, welche Art von Produkten man bauen kann
Für den Namen microgpt ist es eigentlich kleiner als nanogpt, deshalb fände ich picogpt passender
Trotzdem ein großartiges Projekt