35 Punkte von GN⁺ 2024-05-20 | 1 Kommentare | Auf WhatsApp teilen
  • Llama3 wird von Grund auf mit einem einzelnen Tensor und Matrixmultiplikation implementiert.
  • Tensoren werden direkt aus den von Meta bereitgestellten Llama3-Modelldateien geladen.

Zusammenfassung der Scratch-Implementierung des LLaMA-3-Modells

Tokenizer-Einrichtung

  • Einrichtung des Tokenizers mit der Bibliothek Tiktoken
  • Definition spezieller Tokens und Hinzufügen zum Tokenizer

Einlesen der Modelldateien

  • Laden der Modelldatei (consolidated.00.pth) mit PyTorch
  • Einlesen der Modellkonfiguration aus der Datei params.json
    • Enthält Informationen wie Anzahl der Dimensionen (dim), Anzahl der Layer (n_layers), Anzahl der Heads (n_heads) usw.

Umwandlung von Text in Tokens

  • Umwandlung des Prompt-Texts mit dem Tokenizer in eine Token-Sequenz
  • Umwandlung jedes Tokens in das entsprechende Embedding
  • Normalisierung der Embeddings mit RMS-Normalisierung

Implementierung von Attention

  • Laden der Matrizen für Query (wq), Key (wk), Value (wv) und Output (wo) aus dem Modell
  • Berechnung der Query-, Key- und Value-Vektoren für jedes Token
  • Hinzufügen von Positionsinformationen mit RoPE (Rotary Positional Embedding)
  • Berechnung der Attention-Scores durch das Skalarprodukt von Query und Key
  • Maskierung der Attention-Scores für zukünftige Tokens
  • Anwendung der Softmax-Funktion zur Berechnung der Attention-Verteilung
  • Berechnung des Attention-Ergebnisses durch Multiplikation der Attention-Verteilung mit den Value-Vektoren

Multi-Head-Attention

  • Durchführung der Attention-Berechnung für alle Attention-Heads
  • Verkettung (concatenate) der Ergebnisse aller Heads zur Erzeugung des finalen Attention-Ergebnisses

Feedforward-Netzwerk

  • Implementierung eines Feedforward-Netzwerks mit der Aktivierungsfunktion SwiGLU (Swish Gated Linear Unit)
  • Addition des Attention-Ergebnisses und der Ausgabe des Feedforward-Netzwerks zur Erzeugung des finalen Embeddings

Wiederholung über alle Layer

  • Wiederholung der Berechnung von Attention und Feedforward-Netzwerk für alle Transformer-Layer
  • RMS-Normalisierung des finalen Embeddings

Token-Vorhersage

  • Berechnung der Logits durch Multiplikation des finalen Embeddings mit der Output-Matrix
  • Vorhersage des Tokens mit dem höchsten Wert in den Logits als nächstes Token
  • Dekodierung und Ausgabe des vorhergesagten Tokens

Meinung von GN⁺

  • Dieser Artikel ist sehr nützlich, um die interne Struktur und Funktionsweise des Llama3-Modells zu verstehen. Besonders der Implementierungsprozess von Grund auf macht deutlich, wie die einzelnen Komponenten des Modells zusammenwirken.
  • Für Software Engineers mit wenig Erfahrung kann der Inhalt etwas komplex sein. Da jedoch alles Schritt für Schritt erklärt wird, lässt er sich mit etwas Geduld nachvollziehen.
  • Man kann lernen, wie fortgeschrittene Konzepte wie RoPE (Rotary Positional Embedding) eingesetzt werden, um die Modellleistung zu verbessern. Das kann nützlich sein, wenn man andere NLP-Modelle implementieren oder verbessern möchte.
  • Durch diesen Artikel lässt sich die interne Struktur und Arbeitsweise von Deep-Learning-Modellen tiefgehend verstehen. Das dürfte beim Optimieren oder Debuggen von Modellen sehr hilfreich sein.

1 Kommentare

 
2147483647 2024-05-23

Anya ist süß.