Train Your Own LLM From Scratch - Praxis-Workshop zum direkten Trainieren eines eigenen LLM von Grund auf
(github.com/angelos-p)- Ein praxisorientierter Workshop, in dem man alle Teile der GPT-Trainingspipeline selbst schreibt und versteht, was jede Komponente macht und warum sie nötig ist
- Ziel ist es, mit einem von Grund auf in einem Notebook trainierten GPT-Modell Text im Shakespeare-Stil zu erzeugen; damit dies in einer einzigen Workshop-Session machbar bleibt, wurde das Modell auf etwa 10M Parameter verkleinert
- Während nanoGPT die Reproduktion eines GPT-2-Modells mit 124M Parametern zum Ziel hat, konzentriert sich dieses Projekt auf das Wesentliche und ist so ausgelegt, dass es auf einem Notebook in weniger als 1 Stunde trainiert werden kann
- Zu den selbst zu implementierenden Bestandteilen gehören Tokenizer, eine Transformer-basierte Modellarchitektur, die Trainingsschleife und die Textgenerierung; am Ende vervollständigt man selbst
model.py,train.pyundgenerate.py - Als Vorkenntnisse reicht es aus, Python-Code lesen zu können; Erfahrung mit Machine Learning ist nicht nötig, erforderlich ist Python 3.12+
- Als Laufzeitumgebung werden Notebooks oder Desktops mit Mac, Linux und Windows unterstützt; fürs Training wird automatisch MPS auf Apple-Silicon-GPUs, CUDA auf NVIDIA-GPUs oder die CPU verwendet
- Für die lokale Installation wird empfohlen, mit uv den Ablauf über
uv synczu nutzen; ohne lokale Umgebung kann man die Dateien auch in Google Colab hochladen und mit!python train.pyausführen - Der Workshop behandelt der Reihe nach einen zeichenbasierten Tokenizer, Embeddings, Self-Attention, LayerNorm, MLP-Blöcke, die Loss-Funktion, AdamW, Gradient Clipping, Learning-Rate-Scheduling sowie Temperature- und Top-k-Sampling
- Die Grundarchitektur wandelt Eingabetext in zeichenbasierte Token-IDs um, führt ihn durch Token-Embeddings und Positions-Embeddings, leitet ihn durch mehrere Transformer-Blöcke und gibt anschließend Logits für die Wahrscheinlichkeiten des nächsten Tokens aus
- Die bereitgestellten Modellkonfigurationen sind: Tiny mit etwa 0.5M Parametern und rund 5 Minuten auf einem M3 Pro, Small mit etwa 4M und rund 20 Minuten sowie standardmäßig Medium mit etwa 10M und rund 45 Minuten Trainingszeit
- Alle Konfigurationen verwenden zeichenbasierte Tokenisierung mit
vocab_size=65undblock_size=256und sind auf kleine Datensätze von etwa 1 MB wie Shakespeare zugeschnitten - Bei der BPE-Tokenisierung ist das Vokabular groß wie bei den 50.257 Vokabeln von GPT-2; auf kleinen Datensätzen kommen die meisten Token-Bigramme daher zu selten vor, um Muster gut zu lernen, und für größere Datensätze wird der Wechsel zu BPE behandelt
- Als wichtigste Referenzen werden nanoGPT, die build-nanogpt video lecture, Karpathy's microgpt, nanochat, Attention Is All You Need (2017), das GPT-2 paper (2019) und das TinyStories paper genannt
1 Kommentare
Hacker-News-Kommentare
Wenn dieses Material interessant klingt, kann ich Stanfords CS336 sehr empfehlen. Dort wird ein ähnliches Curriculum sehr viel tiefer behandelt, inklusive theoretischer Intuition zu Skalierungsgesetzen sowie der Systemperspektive mit Kernel-Optimierung und Profiling
Allerdings muss man die Aufgaben selbst machen: https://cs336.stanford.edu/
Kleine Eigenwerbung: Es gibt eine Reihe von Jupyter-Notebooks, die von Grund auf erklären, wie Machine Learning funktioniert
https://github.com/nickyreinert/DeepLearning-with-PyTorch-fr...
Und natürlich wird auch behandelt, wie man ein LLM von Grund auf baut
https://github.com/nickyreinert/basic-llm-with-pytorch/blob/...
Ich habe gerade erst mit Sebastian Raschkas Repository/Buch/Kurs Build a Large Language Model (From Scratch) angefangen. Vielleicht ist es ein Luxusproblem, aus welchem Lernmaterial man wählen soll
[0] https://github.com/rasbt/LLMs-from-scratch
[1] https://www.manning.com/books/build-a-large-language-model-f...
[2] https://magazine.sebastianraschka.com/p/coding-llms-from-the...
Das mache ich seit meiner Geburt. Der Anfang war hart, aber es wird langsam besser
Ich habe das damals mit ULMFiT gemacht, als fast.ai noch relativ neu war. Vermutlich war das die Zeit, als BERT der aktuelle State of the Art war, und die Struktur war so, dass man erst das Basismodell trainierte und dann mit einem Head spezialisieren konnte
Für das Basismodell wurde die komplette Wikipedia verwendet, plus ein paar GB Tweets, die per Firehose gesammelt worden waren. Ich konnte ein Labor mit 20 Rechnern für die Spieleentwicklung nutzen, ungefähr auf GTX-2080-Niveau. Ein Durchlauf über die tokenisierte Wikipedia dauerte etwa einen halben Tag, daher ließ ich auf jedem Rechner unterschiedliche Einstellungen laufen, um Hyperparameter-Tuning zu machen, und nahm am nächsten Tag das beste Ergebnis als Ausgangspunkt. Es war immer spannend, morgens ins Büro zu kommen und die Resultate zu prüfen
Das Engineering war schrecklich und improvisiert, aber ich habe viel gelernt. Die Ergebnisse waren ganz okay und wir haben Tweet-Klassifikation gemacht, aber ich bekam ein Gefühl dafür, wie viel GPU-Leistung und welche Engineering-Herausforderungen wirklich nötig sind, wenn man das ernsthaft betreiben will. Das Potenzial von Generierung habe ich nicht vollständig verstanden, aber ich habe eine Weile über die Tweets gelacht, die ich aus Neugier erzeugt habe
Das hier sieht fast wie eine textliche Übertragung von Andrej Karpathys Video aus (https://youtu.be/kCc8FmEb1nY). Liege ich da falsch?
Sinngemäß: „nanoGPT zielt darauf ab, GPT-2 (124 Millionen Parameter) zu reproduzieren und deckt viele Dinge ab. Dieses Projekt reduziert das auf das Wesentliche und schrumpft es auf ein Modell mit rund 10 Millionen Parametern, das in weniger als einer Stunde auf einem Notebook trainiert werden kann …“
Zur Einordnung: Er ist einer der MLX-Entwickler und ein fähiger Machine-Learning-Forscher
Es heißt: „ein praktischer Workshop, in dem man jedes Teil der GPT-Trainingspipeline selbst schreibt, um zu verstehen, was jede Komponente tut und warum sie nötig ist“, aber bei den Abhängigkeiten sehe ich torch, also werden Tensoren und Backpropagation offenbar nicht selbst implementiert, sondern als gegeben übernommen. Ich frage mich daher, ob man das wirklich „von Grund auf“ nennen kann
Ich habe etwas Ähnliches in Rust gemacht, ebenfalls mit KI-Hilfe, aber mit der Einschränkung, außer der Standardbibliothek keine Abhängigkeiten zu verwenden. Dadurch musste ich viel mehr selbst implementieren: Tensor-Design, Kernel-Konzepte, einen einfachen Gradientenabstiegs-Optimierer, einen selbstgebauten JSON-Parser, eine CPU-Datenparallelitätsabstraktion ähnlich wie rayon und so weiter. Als am Ende alles zusammengesetzt lief, war das ziemlich spaßig. Sehr langsam, aber es hat funktioniert
Ich bin mir nicht sicher, ob man die Nutzung von PyTorch noch als „von Grund auf“ bezeichnen kann. Ich meine nicht extremistisch, dass man sogar die Standardbibliothek vermeiden müsste, aber ab dem Punkt, an dem man eine Bibliothek nutzt, die exakt für diesen Zweck gebaut wurde, fühlt es sich nicht mehr wie „von Grund auf“ an
Wahrscheinlich wäre „ein LM von Grund auf trainieren“ treffender. Ich bezweifle, dass man die Hardware hat, um ein Modell zu bauen, das groß genug ist, um es „Large“ zu nennen
Das heißt nicht, dass es das wert ist, aber man muss keine GPUs kaufen, um damit zu experimentieren
Und 48 Prozessorkerne noch dazu! Kein AVX512, aber rechnen kann die Kiste trotzdem
Es sollte reichen, um ein LLM zu trainieren. Oder zumindest könnte es unsere Familie schaffen … vielleicht muss mein Kind das Projekt erben und weiterführen
Im Ernst: Entweder verpasst du den Kern der Sache, betreibst unnötige Wortklauberei oder liegst einfach falsch. Hier geht es darum, die Konzepte zu lernen, und der Rest ist weitgehend nebensächlich
Wenn wir bei Wortklauberei oder falsch sind: Was ist überhaupt die dokumentierte Untergrenze dafür, ein Sprachmodell als „large“ zu bezeichnen? GPT-2 wurde damals wie heute als „large language model“ bezeichnet und hatte 1,5 Milliarden Parameter. Eine Consumer-GPU, die so etwas heutzutage trainieren kann, bekommt man für ungefähr 400 Dollar