8 Punkte von GN⁺ 2024-01-28 | 1 Kommentare | Auf WhatsApp teilen
  • rasbt/LLMs-from-scratch ist ein Repository mit Code zum Entwickeln, Vortrainieren und Finetunen eines GPT-ähnlichen LLM und dient als offizielles Code-Repository zum Manning-Buch Build a Large Language Model (From Scratch)
  • Der Lernansatz besteht darin, für Bildungszwecke ein kleines, aber funktionsfähiges Modell von Grund auf zu erstellen, und folgt damit einem ähnlichen Ablauf wie beim Aufbau der großen Foundation-Modelle hinter ChatGPT
  • Der Hauptteil bietet kapitelweise Code und Notebooks für Textdatenverarbeitung, Attention-Mechanismen, GPT-Implementierung, Vortraining mit ungelabelten Daten, Finetuning für Textklassifikation und Finetuning zur Befolgung von Anweisungen
  • Der Code der wichtigsten Kapitel ist so ausgelegt, dass er auf einem normalen Notebook in angemessener Zeit läuft, nutzt GPU automatisch, wenn verfügbar, und ist in PyTorch ohne externe LLM-Bibliotheken implementiert
  • Anhänge und Bonusmaterial erweitern den Stoff um LoRA, KV Cache, MoE, Implementierungen der Llama-/Qwen-/Gemma-Familien, Evaluation, DPO und UI-Beispiele, sodass sich der LLM-Lernprozess praxisnah vertiefen lässt

Ziel des Repositorys und Beziehung zum Buch

  • rasbt/LLMs-from-scratch ist ein Code-Repository zur Implementierung eines GPT-ähnlichen LLM von Grund auf
  • Es wird als offizielles Code-Repository zum Manning-Buch Build a Large Language Model (From Scratch) bereitgestellt
  • Das Buch ist so aufgebaut, dass man durch schrittweises Programmieren versteht, wie LLMs intern funktionieren
    • Die Erklärungen enthalten Text, Diagramme und Beispiele
    • Man entwickelt und trainiert selbst ein kleines, aber funktionsfähiges Modell für Lernzwecke
  • Das Repository enthält auch Code zum Laden größerer vortrainierter Modellgewichte und zu deren Finetuning
  • Buchinformationen:

Installation und Nutzung des Codes

  • Das Repository kann per ZIP-Download oder mit git clone bezogen werden
git clone --depth 1 https://github.com/rasbt/LLMs-from-scratch.git
  • Wer das Code-Bundle von der Manning-Website erhalten hat, wird darauf hingewiesen, die neuesten Updates im offiziellen GitHub-Repository zu prüfen
  • Installation von Python und Paketen sowie die Einrichtung der Code-Umgebung werden in setup/README.md behandelt
  • Ein Dokument zur Fehlerbehebung wird als Troubleshooting Guide bereitgestellt

Lernablauf nach Kapiteln

Vorkenntnisse und Laufzeitumgebung

  • Die wichtigste Voraussetzung sind Grundkenntnisse in Python-Programmierung
  • Erfahrung mit Deep-Learning-Neuronalen Netzen kann einige Konzepte vertrauter machen
  • Der Code wird ohne externe LLM-Bibliotheken vollständig in PyTorch von Grund auf implementiert
    • Fortgeschrittene PyTorch-Kenntnisse sind nicht zwingend erforderlich
    • Grundkenntnisse in PyTorch sind hilfreich
    • Appendix A bietet eine kurze Einführung in PyTorch
  • Der Code der Hauptkapitel ist so konzipiert, dass er auf einem normalen Notebook in angemessener Zeit läuft
  • Spezielle Hardware ist nicht erforderlich; eine GPU wird automatisch verwendet, falls vorhanden

Videokurs und Folgebuch

  • Bei Manning gibt es einen begleitenden Videokurs mit 17 Stunden und 15 Minuten Laufzeit, der der Buchstruktur folgt
    • Er spiegelt die Kapitel- und Abschnittsstruktur des Buchs wider
    • Er kann als eigenständige Alternative oder als ergänzendes Material zum Mitprogrammieren genutzt werden
  • Vorgestellt wird auch das Buch Build A Reasoning Model (From Scratch)
    • Es ist ein eigenständiges Buch, kann aber als Fortsetzung von Build A Large Language Model (From Scratch) gesehen werden
    • Es implementiert Ansätze zur Verbesserung von Schlussfolgerungsfähigkeiten ausgehend von vortrainierten Modellen
    • Enthaltene Ansätze: inference-time scaling, Reinforcement Learning, Distillation
    • Zugehöriges Repository: rasbt/reasoning-from-scratch

Übungsaufgaben und Bonusmaterial

  • Jedes Kapitel enthält mehrere Übungsaufgaben
  • Die Lösungen sind in Appendix C zusammengefasst, und die zugehörigen Code-Notebooks befinden sich in den jeweiligen Kapitelordnern
  • Auf der Manning-Website ist das kostenlose 170-seitige PDF Test Yourself On Build a Large Language Model (From Scratch) erhältlich
    • Es enthält pro Kapitel etwa 30 Quizfragen und Lösungen
  • Wichtige Bonusthemen

    • Setup:
    • Tipps zur Python-Einrichtung
    • Installation von Paketen und Bibliotheken
    • Docker-Umgebung einrichten
    • Ch 2:
    • Einen BPE-Tokenizer von Grund auf implementieren
    • Vergleich mehrerer BPE-Implementierungen
    • Unterschied zwischen Embedding-Layer und linearem Layer
    • Intuition für dataloader anhand einfacher Zahlen
    • Ch 3:
    • Vergleich effizienter Implementierungen von multi-head attention
    • PyTorch buffers verstehen
    • Ch 4:
    • FLOPs-Analyse
    • KV Cache
    • Grouped-Query Attention, Multi-Head Latent Attention, Sliding Window Attention
    • Gated DeltaNet, DeepSeek Sparse Attention, Cross-Layer KV Sharing
    • Mixture-of-Experts
    • Ch 5:
    • Alternative Methoden zum Laden von Gewichten
    • Vortraining auf dem Project-Gutenberg-Datensatz
    • Verbesserung der Trainingsschleife
    • Hyperparameter-Optimierung
    • UI zur Interaktion mit einem vortrainierten LLM
    • GPT in Llama umwandeln
    • Speicher-effizientes Laden von Modellgewichten
    • Tiktoken-BPE-Tokenizer erweitern
    • PyTorch-Performance-Tipps für schnelles LLM-Training
    • Implementierungen von Llama 3.2, Qwen3, Gemma 3, Olmo 3, Tiny Aya, Qwen3.5, Gemma 4
    • Ch 6:
    • Zusätzliche Experimente zum Finetuning anderer Layer und größerer Modelle
    • Klassifikations-Finetuning auf dem 50k-IMDb-Filmrezensionen-Datensatz
    • UI für einen GPT-basierten Spam-Klassifikator
    • Ch 7:
    • Datensatz-Utilities zur Erkennung naher Duplikate und zur Generierung von Einträgen im Passiv
    • Bewertung von Instruktionsantworten mit der OpenAI API und Ollama
    • Erstellung und Verbesserung von Datensätzen für Instruktions-Finetuning
    • Erstellung eines preference dataset mit Llama 3.1 70B und Ollama
    • LLM-Alignment mit DPO implementieren
    • UI für ein instruktions-finetuntes GPT-Modell

Beiträge und Zitierung

  • Feedback und Fragen werden im Manning Forum oder in GitHub Discussions entgegengenommen
  • Da es sich um ein Code-Repository zum gedruckten Buch handelt, können derzeit keine Beiträge angenommen werden, die den Inhalt des main chapter code erweitern
    • Diese Einschränkung soll Unterschiede zwischen dem gedruckten Buch und dem Code vermeiden
  • Wenn Buch oder Code für die Forschung nützlich sind, wird eine Zitierung empfohlen
    • Es werden eine Chicago-Style-Zitierung und ein BibTeX-Eintrag bereitgestellt

1 Kommentare

 
GN⁺ 2024-01-28
Kommentare auf Hacker News
  • Ich schreibe als ergänzendes Material ein Guidebook, es ist aber noch in mehreren Schritten in Arbeit.
    Bislang scheint der Fine-Tuning-Guide die beste Ressource zu sein.
    https://ravinkumar.com/GenAiGuidebook/language_models/finetu...
  • Sieht wirklich großartig aus. Ich frage mich, ob das Hauptziel darin besteht, Verständnis aufzubauen und die Mystifizierung abzubauen, oder ob es darum geht, dass Leute kleine Modelle für ihre eigenen Anforderungen selbst bauen können.
    • Die Hauptmotivation ist eher didaktischer Natur: Menschen sollen durch eigenes Nachbauen verstehen, wie LLMs funktionieren.
      LLMs sind ein wichtiges Thema, aber es gibt viele Videos und Texte, die nur oberflächlich darüber hinweggehen. Wenn man ein LLM von Grund auf codet, werden viele Konzepte klarer, denke ich.
      Nebenbei soll es auch Menschen helfen, die ihr eigenes LLM bauen wollen. Im Buch wird die gesamte Pipeline einschließlich Pretraining und Fine-Tuning codiert, aber da ich es finanziell für unrealistisch halte, ein LLM vorzutrainieren, werde ich auch zeigen, wie man vortrainierte Gewichte lädt.
      Es wird ein GPT-2-ähnliches LLM verwendet, alles von Grund auf implementiert, und man kann Gewichte laden – vom 124M-Modell, das auf einem Notebook läuft, bis zum 1558M-Modell, das auf einer kleinen GPU läuft. In der Praxis würde man zwar Frameworks wie HF transformers oder axolotl verwenden, aber ich hoffe, dass dieser Ansatz des Selbst-Implementierens den Prozess weniger wie eine Blackbox wirken lässt.
  • Ein technisches Buch öffentlich zu schreiben, muss unvorstellbar nervenaufreibend sein; Applaus an den Autor.
    • In gewisser Weise ja, aber gleichzeitig ist es auch ziemlich motivierend :)
    • Vielleicht ist das Risiko sogar geringer. Man bekommt die Vorteile davon, ein Buch zu schreiben, ohne das Buch tatsächlich fertigstellen zu müssen. Im Idealfall muss man vielleicht gar nicht viel mehr als Kapitel 1 schreiben.
  • Wenn das erste Codebeispiel import torch ist, ist es wohl nicht ganz von Grund auf implementiert :-)
    • Stimmt schon, aber sonst wäre es ausufernd und schwer lesbar geworden. Trotzdem zeigt das Buch, wie man LayerNorm, Softmax, Linear-Schichten, GeLU usw. implementiert, ohne die fertig verpackten Versionen aus torch zu verwenden.
    • Dank automatischer Differenzierung können wir komplexe Modelle wie Transformer bauen. Neben riesigen Datenmengen und enormen Rechenressourcen kann man sie als einen der Hauptgründe dafür sehen, dass die heutige KI-Revolution möglich wurde.
      Niemand, der in diesem Bereich arbeitet, berechnet die Ableitungen solcher Modelle von Hand. In Begriffen differenzierbarer Programmierung zu denken, ist eine Grundannahme, und in diesem Fall kann man das durchaus als „von Grund auf“ betrachten.
      Jedes Mal, wenn ich solche Kommentare sehe, habe ich den Verdacht, dass die Person nicht wirklich versteht, was intern passiert oder wie modernes Machine Learning funktioniert.
    • Eine autograd-Implementierung ist meiner Ansicht nach wenig relevant und außerhalb des Umfangs, wenn man lernen will, wie Transformer funktionieren. Ich kann mir nicht einmal vorstellen, die Gradienten eines Transformers von Hand aufzuschreiben.
  • Ich dachte, es wäre kostenloses Material, und bin direkt zu GitHub gegangen. Ich respektiere die Arbeit des Autors, frage mich aber, welche kostenlosen Ressourcen im Stil „von Grund auf implementieren“ empfehlenswert sind.
    • Andrej Karpathys Neural Networks: Zero to Hero[1]
      [1] https://karpathy.ai/zero-to-hero.html
    • Eine GPT-2-Inferenz-Engine in NumPy gibt es unter https://jaykmody.com/blog/gpt-from-scratch/, und für die anschließende Ergänzung einer KV-Cache-Implementierung siehe https://www.dipkumar.dev/becoming-the-unbeatable/posts/gpt-k...
    • Ich würde https://course.fast.ai/ empfehlen.
      Für normale Entwickler ist das deutlich zugänglicher und setzt keinen mathematischen Hintergrund voraus. Es ist ein guter Ausgangspunkt, danach versteht man andere ähnliche Materialien allmählich besser.
    • Ehrlich gesagt fällt es mir schwer zu verstehen, warum jemand, der im KI-Bereich arbeitet, selbst 50 $ zu viel findet, um tiefere Einblicke in das Thema zu bekommen.
      Die Erstellung von Lernmaterial ist absurd viel Arbeit, und selbst wenn dieses Buch sehr erfolgreich wird, wird rasbt, wenn man die Einnahmen auf die investierte Zeit umlegt, keinen sinnvollen Stundenlohn herausbekommen.
      Es gibt viele Menschen, die dieses Thema verstehen, aber was haben sie mit diesem Wissen gemacht? Sie haben es für sich behalten, sind zu OpenAI gegangen, halten ihr Wissen nicht öffentlich und verdienen damit viel mehr Geld.
      Wenn man in einer Welt leben möchte, in der solches Wissen offen verfügbar ist, sollte man meiner Meinung nach zumindest davon absehen, sich öffentlich über ein Buch zu beschweren, das ungefähr so viel kostet wie ein ordentliches Abendessen.
    • Ich habe den Jupyter-Notebooks erklärende Notizen hinzugefügt; ich hoffe daher, dass das Repository auch eigenständig lesbar ist.
  • Ich frage mich, ob man mit dem Inhalt dieses Buchs Reinforcement Learning lernen kann.
    Mein Ziel ist, dass etwas wie ein Mondlander das Landen lernt. Ganz einfach: bei 100 Fuß Höhe starten, Schub in eine Richtung geben und so lange weiterprobieren, bis weniger Krater entstehen.
    Danach möchte ich Variablen wie horizontale Bewegung hinzufügen, horizontale Triebwerke einbauen und später die horizontalen Triebwerke entfernen und den Lander rotieren lassen.
    Ich habe überhaupt keine Ahnung, wo ich anfangen soll, und frage mich, ob dieses Buch, das nach „Mainstream“-Machine-Learning aussieht, dabei hilfreich wäre.
    • Ich fand "Grokking Deep Reinforcement Learning"[0] interessant. Transformer kommen darin nicht vor.
      In Pythons gymnasium[1]-Bibliothek gibt es eine Mondlander-Umgebung, die als Referenz nützlich sein könnte. Das war die Umgebung, auf die ich mich beim Lernen am stärksten konzentriert habe, und ich habe sie auf mehrere Arten gelöst.
      Du kannst dir auch mein Notebook2 ansehen, das ich vor Kurzem beim Implementieren von Soft Actor Critic in PyTorch verwendet habe. Es ist kein gutes Lehrmaterial, aber vielleicht kannst du etwas daraus mitnehmen.
      [0]: https://www.manning.com/books/grokking-deep-reinforcement-le...
      [1]: https://gymnasium.farama.org/environments/box2d/
  • Reinforcement Learning ist ein völlig eigenständiges Forschungsgebiet, getrennt von LLMs. Es taucht zwar häufig als Teil von Machine Learning auf, und auch in Tom Mitchells Klassiker Machine Learning gibt es einen hervorragenden Abschnitt zu Q-Learning, aber mit moderner Machine-Learning-Arbeit hat es nur wenig zu tun
    Selbst etwas wie AlphaGo kann man letztlich eher als Arbeit verstehen, bei der tiefe neuronale Netze als Eingabe für klassische Reinforcement-Learning-Verfahren verwendet werden
    Sutton und Bartos Reinforcement Learning: An Introduction gilt weithin als das maßgebliche Einführungsbuch zu diesem Thema
  • In diesem Fall würde ich ein dediziertes Buch zu Reinforcement Learning empfehlen. Der Reinforcement-Learning-Teil bei LLMs ist sehr LLM-spezifisch, und auch das Hintergrundwissen wird nur die wirklich relevanten Teile behandeln
    Es gibt auch andere allgemeine Machine-Learning-/Deep-Learning-Bücher, die ein recht ausführliches Einführungskapitel zu Reinforcement Learning enthalten (https://github.com/rasbt/machine-learning-book/tree/main/ch1...). Trotzdem ist in diesem Fall, wie andere schon gesagt haben, ein spezielles Reinforcement-Learning-Buch passender
  • OpenAIs Spinning Up auszuprobieren, wäre eine gute Idee: https://spinningup.openai.com/en/latest/
  • Die Q-Learning-Übung dieses Kurses behandelt genau so etwas
    https://www.ida.liu.se/~TDDC17/info/labs/rl.en.shtml
  • Ich frage mich, wie es im Vergleich zu Karpathys Video[0] ist. Ich möchte in LLMs einsteigen und versuche herauszufinden, welches Material am besten geeignet ist, um dieses Verständnisniveau zu erreichen
    [0] https://www.youtube.com/watch?v=kCc8FmEb1nY
    • Ich habe das Video nicht bis zum Ende gesehen, aber nach einem groben Durchsehen gibt es beim Buch einige Unterschiede
      Statt eines zeichenbasierten LLM wird ein echtes wortbasiertes LLM implementiert, nach dem Pretraining wird gezeigt, wie Pretraining-Gewichte geladen werden, und dieses LLM wird per Instruction Fine-Tuning weitertrainiert
      Außerdem wird der Alignment-Prozess eines per Instruction Fine-Tuning trainierten LLM codiert, und Fine-Tuning für Klassifikationsaufgaben wird ebenfalls gezeigt. Im ganzen Buch gibt es viele Abbildungen; allein Kapitel 3 hat 26 Abbildungen :)
      Das Video sieht ebenfalls hervorragend aus. Da es 2 Stunden lang ist, dürfte es als solide ergänzende Einführung gut geeignet sein. Das Buch zu lesen wird vermutlich etwa das Zehnfache an Zeit brauchen
    • Es ist schwer zu verstehen, wenn man nicht den Großteil des Inhalts bereits kennt
      Ich habe es mir auch mehrmals angesehen, um das meiste gut zu verstehen
      Natürlich muss man auch PyTorch sehr gut kennen und Dinge wie Matrixmultiplikation, Backpropagation usw. verstehen. Außerdem spricht er sehr schnell
  • Ich interessiere mich nicht für Sprachmodelle an sich, aber es gibt unter den Techniken, die in Sprachmodellen verwendet werden, einige, die ich anderswo einsetzen möchte
    Zum Beispiel weiß ich, dass Attention in verschiedenen Modellen verwendet wird und Transformer auch außerhalb von Sprachmodellen eingesetzt werden
    Ich frage mich, ob man mit diesem Buch Attention und Transformer gut genug verstehen kann, um sie auch außerhalb von Sprachmodellen zu verwenden
    • Der in diesem Buch implementierte Attention-Mechanismus ist insofern LLM-spezifisch, als es um Texteingaben geht, aber im Kern ist es derselbe Attention-Mechanismus wie bei Vision Transformern
      Der Unterschied besteht darin, dass bei LLMs Text in Tokens umgewandelt wird und diese Tokens in Vektor-Embeddings transformiert werden, die in das LLM eingehen. Bei Vision Transformern verwendet man statt eines Bildes als Token Bild-Patches als Tokens und wandelt diese in Vektor-Embeddings um
      Ob Text oder Vision: Es ist derselbe Attention-Mechanismus, und in beiden Fällen nimmt er Vektor-Embeddings als Eingabe
      (*Kapitel 3 habe ich bereits letzte Woche eingereicht, und es wird demnächst in MEAP erscheinen. Bis dahin kann man den Code zusammen mit den Notizen hier ansehen: https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01...)
  • Die Modellarchitektur selbst ist, insbesondere wenn man torch verwendet, nicht so kompliziert. Auch der gesamte Ablauf ist ziemlich geradlinig, sodass es wie ein machbares Projekt wirkt