- Die genaue Struktur verstehen, indem eine tatsächlich lauffähige Implementierung des Llama-3-Modells gezeigt wird
Überblick
- Das von Meta veröffentlichte Llama-3-Modell erhält große Aufmerksamkeit.
- Es zeichnet sich durch eine überwältigende Größenordnung und Leistung aus: 24K GPUs, 15T Trainingsdaten, 10M Instruction-Daten und 1.3M GPU-Stunden.
- Die Modellarchitektur hat sich nicht grundlegend verändert. Llama 3 verwendet GQA, was jedoch bereits in Llama 2 70B implementiert wurde.
- Die Implementierung verwendet ausschließlich NumPy, damit sich die Modellstruktur intuitiv nachvollziehen lässt.
- Verwendet wird das von Andrej Karpathy mit der Llama-2-Architektur trainierte
stories15M-Modell, das in das NumPy-Komprimierungsformat konvertiert wurde.
Struktur
- Die Struktur des Llama-3-Modells ist identisch mit 42dot LLM.
- Modellparameter:
dim: 288
n_layers: 6
n_heads: 6
vocab_size: 32000
max_seq_len: 256
max_new_tokens: 50
RoPE #1
- Für das RoPE-Embedding werden
cos und sin im Voraus berechnet.
- Diese Werte werden für
Q und K verwendet.
- Das Berechnungsergebnis wird mit
np.outer multipliziert, anschließend werden cos und sin berechnet.
RMSNorm
- RMSNorm normalisiert Aktivierungswerte über den Root Mean Square anstelle traditioneller Mini-Batch- oder Layer-Statistiken.
- Dadurch wird eine konsistente Skalierung der Aktivierungen erreicht.
QKV
- Bei der QKV-Berechnung wird im Unterschied zu GPT, das nach einer Matrixmultiplikation mit einem Gewicht aufteilt, in Llama für jedes von Q, K und V ein eigenes Gewicht verwendet.
- Für Multi-Head Attention werden die jeweiligen Werte entsprechend umgeformt.
RoPE #2
- RoPE besitzt sowohl Eigenschaften absoluter als auch relativer Positionskodierung.
- Es wird nur auf Q und K angewendet; die Eingaben werden aufgeteilt, mit
cos und sin multipliziert und anschließend durch Addieren und Subtrahieren wieder zusammengesetzt.
KV-Cache
- GPT-artige generative Modelle verwenden Masked Attention, wodurch ein KV-Cache möglich wird.
- Frühere Ergebnisse sind stets identisch, daher werden K und V zwischengespeichert, und für Q wird nur der letzte Wert berechnet.
GQA (Grouped-Query Attention)
- GQA ist eine in Llama 2 eingeführte Technik, die Speicher spart und die Leistung verbessert.
- In Llama 3 wird GQA auf alle Modelle ab 8B angewendet.
Scaled Dot-Product Attention
- Die einzelnen Attention-Berechnungen werden als Multi-Head Attention ausgeführt.
- Das Ergebnis wird über
softmax und matmul erhalten.
Feed Forward
- Das Feed-Forward-Modul des Llama-Modells verwendet drei lineare Schichten ohne Bias.
- Es erzeugt einen Swish-Wert, multipliziert ihn mit
x_V und skaliert ihn anschließend wieder herunter.
SwiGLU
- SwiGLU verbessert die Modellleistung durch eine charakteristische Kombination mehrerer Feed-Forward-Schichten.
Linear
- Für mehr Geschwindigkeit wird in der finalen Ausgabe nur der letzte Logit per
matmul berechnet.
Generierung
- Mithilfe der extrahierten Logits werden Tokens nacheinander generiert.
- Der Prozess ist in Prefill-Phase und Decode-Phase unterteilt.
- In der Prefill-Phase wird die gesamte Eingabe übergeben, in der Decode-Phase nur die letzte Token-ID, um das Ergebnis zu erhalten.
Beispiel
GitHub
Literaturhinweise
- Exploring and Building the Llama 3 Architecture
- Rotation Matrix
- Mastering LLM Techniques: Inference Optimization
- arXiv:2305.13245
Meinung von GN⁺
- Struktur und Leistung des Llama-3-Modells: Das Llama-3-Modell behält die Struktur des bisherigen Llama-2-Modells bei und verbessert gleichzeitig die Leistung deutlich. Das ist das Ergebnis einer Auslegung, die sowohl Skalierbarkeit als auch Effizienz berücksichtigt.
- Warum die Implementierung mit NumPy erfolgt: Durch die Implementierung mit NumPy lassen sich Struktur und Funktionsweise des Modells intuitiver verstehen. Das ist besonders hilfreich für Lernende und Forschende.
- Die Einführung von GQA: GQA ist eine Technik, die zugleich Speicher spart und die Leistung verbessert. Dass sie in Llama 3 auf alle Modelle angewendet wird, maximiert die Effizienz des Modells.
- Die Bedeutung des KV-Cache: Der KV-Cache spielt in GPT-artigen generativen Modellen eine wichtige Rolle und kann die Recheneffizienz des Modells deutlich steigern.
- Praktische Anwendungsbeispiele: Mit dem Beispielcode lässt sich das Modell tatsächlich ausführen, was eine gute Gelegenheit bietet, seine Leistung direkt zu überprüfen.
1 Kommentare
Auf Hacker News wurde zwar die englische Version gepostet, aber wir haben den Link auf die koreanisch verfasste Version des Originalautors Likejazz geändert.