2 Punkte von GN⁺ 2024-12-13 | 1 Kommentare | Auf WhatsApp teilen
  • Implementierung eines ChatGPT-Klons

    • Dieses Programm ist eine Implementierung von GPT-2 ohne Abhängigkeiten.
    • Es lädt Gewichtungsmatrizen aus TensorFlow-Dateien und BPE-Dateien und tokenisiert die Eingabe mit einem einfachen Byte-Pair-Encoder.
    • Es implementiert ein grundlegendes lineares Algebra-Paket, definiert die Transformer-Architektur, führt die Transformer-Inferenz aus und detokenisiert die Ausgabe mit einem BPE-Decoder.
    • Es ist in etwa 3000 Byte C geschrieben.
    • Es ist effizient optimiert, sodass das GPT-2-Small-Modell auf modernen Geräten innerhalb weniger Sekunden antworten kann.
    • Es implementiert KV-Caching und einen effizienten Matrixmultiplikationsalgorithmus.
  • Programmstruktur

    • Grundlegende Matrix-Mathematikbibliothek (700 Byte)
    • Schnelle Matrixmultiplikation (300 Byte)
    • Neuronale Netzwerk-Layer (300 Byte)
    • Transformer-Modell (600 Byte)
    • Byte-Pair-Encoding (400 Byte)
    • Ein-/Ausgabe (200 Byte)
    • Laden der Gewichte (300 Byte)
    • Laden des Byte-Pair-Encoding (300 Byte)
  • Hintergrund zu ChatGPT und Transformern

    • ChatGPT ist eine Anwendung, mit der man mit einem Sprachmodell interagieren kann.
    • GPT-4 ist das neueste Modell und sehr beeindruckend.
    • Dieses C-Programm bildet die Funktionsweise von ChatGPT mit GPT-2 nach, einem vergleichsweise schwachen Modell aus dem Jahr 2019.
    • GPT-2 ist ein Transformer, der eine Sequenz von Wörtern fester Länge als Eingabe erhält und das nächste Wort vorhersagt.
  • Erklärung des C-Codes

    • Einstieg in die Matrix-Mathematik (700 Byte)

      • Neuronale Netzwerke bestehen aus Matrixoperationen.
      • Mit einer minimalen Matrixdefinition wird eine Matrixbibliothek aufgebaut.
      • Mithilfe von Makros wird gemeinsame Logik in Meta-Routinen ausgelagert.
    • Schnelle Matrixmultiplikation (300 Byte)

      • Die grundlegende Matrixmultiplikation wird mit drei Schleifen implementiert.
      • Aufgrund der Funktionsweise von Speicher und Cache ist es schneller, denselben Speicher wiederholt zu lesen und zu schreiben.
    • Neuronale Netzwerk-Layer (300 Byte)

      • Um den Transformer zu schreiben, werden einige spezielle neuronale Netzwerk-Layer definiert.
      • Es werden unter anderem die GELU-Aktivierungsfunktion und eine Funktion zum Setzen der unteren Dreiecksmatrix für kausale Aufmerksamkeit implementiert.
    • Transformer-Architektur (600 Byte)

      • Der Transformer wird in 600 Byte implementiert.
      • In jeder Schicht werden Keys, Queries und Values berechnet, eine Aufmerksamkeitsmatrix erzeugt und die Ergebnisse kombiniert.
    • Byte-Pair-Encoding (400 Byte)

      • Sprachmodelle benötigen Eingaben fester Größe, daher werden Wortfragmente verwendet, um Token zu erzeugen.
      • Ein gegebenes Wort wird in einzelne Zeichen zerlegt, und benachbarte Token-Paare werden zusammengeführt.
    • Laden der Gewichte (300 Byte)

      • Die Gewichte des neuronalen Netzwerks werden von der Festplatte geladen.
      • Die Gewichte sind als 32-Bit-Gleitkommazahlen serialisiert.
    • Laden des Byte-Pair-Encoding (300 Byte)

      • Das Byte-Pair-Encoding-Vokabular wird von der Festplatte geladen.
      • Das Dateiformat besteht aus einer Liste von Byte-Pair-Encoding-Einträgen.
  • Fazit

    • Jahrzehnte der Entwicklung im maschinellen Lernen lassen sich auf einige tausend Byte komprimieren.
    • Ein Beispiel für ein einfaches neuronales Netzwerk, das alles außer den tatsächlichen Modellgewichten enthält.

1 Kommentare

 
GN⁺ 2024-12-13
Hacker-News-Kommentare
  • Als ich mit GPT-2 Gespräche mit einem Freund simuliert habe, war das unterhaltsam und manchmal erstaunlich präzise. Ich frage mich, ob der große Sprung zwischen GPT-2 und GPT-3 an größeren Modellen, mehr Daten oder an beidem lag. RLHF macht einen großen Unterschied, aber schon das Basismodell von GPT-3 war mit genügend Beispielen sehr nützlich

  • Ein gutes Beispiel dafür, wie einfach einfache neuronale Netze tatsächlich sind. KI ist die schwarze Magie, die wir benutzen, um Geld zu verdienen

  • Ich habe den Code nicht ausgeführt, bin aber von der geringen Größe beeindruckt. Frühe ELISA-Programme waren größer. In den letzten 4 Jahren wurde es möglich, das auf Byte-Ebene passend zu machen. Wenn jemand einen Hinweis hat, wo die Magie steckt, würde ich mich über eine Erklärung freuen. Ich frage mich, ob es an der GELU-Funktion liegt oder an dem Modell, das über ein bash-Skript heruntergeladen wird

  • GPT-2 hat mein Lieblingsmärchen geschrieben. Link: The Princess, the Fairy Godmother, and the Chest

  • Ich frage mich, ob GPT-2 tatsächlich dafür angepasst wurde, für Chats verwendet zu werden. Falls nicht, halte ich es für etwas weit hergeholt, das einen ChatGPT-Klon zu nennen

  • LISP ist nicht immer besser als C. Diesmal ist es in Ordnung. Falls jemand den Code-Link übersehen hat, hier ist er: C-Chat-GPT-2

  • Ich frage mich, auf welcher Hardware das laufen kann. Ob man quantisierte Gewichte von Hugging Face verwenden kann und für welche Probleme oder Anfragen es sich besonders gut eignet

  • Heutzutage kann man mit gptscript ganz einfach sein eigenes ChatGPT umsetzen. Link: gptscript

  • Ich verstehe nicht, wie C-Makros regulären Ausdrücken ähneln sollen. C-Makros gleichen Wörter ab und ersetzen sie durch anderen Text. Reguläre Ausdrücke gleichen relativ komplexe Muster in Text ab und führen nicht von sich aus Textersetzungen durch

  • Ich frage mich, ob das jemand lokal ausgeführt hat, um zu sehen, welche Ausgaben dieses GP2 erzeugt