Vernetzen Sie sich mit uns

Künstliche Intelligenz

Parameter und Speicheranforderungen großer Sprachmodelle verstehen: Ein tiefer Einblick

mm

Veröffentlicht

 on

Berechnen von Parametern in Transformer-basierten LLMs

Large Language Models (LLMs) hat in den letzten Jahren bemerkenswerte Fortschritte gemacht. Modelle wie GPT-4, Googles Gemini und Claude 3 setzen neue Maßstäbe in Bezug auf Fähigkeiten und Anwendungen. Diese Modelle verbessern nicht nur die Textgenerierung und Übersetzung, sondern beschreiten auch neue Wege in der multimodalen Verarbeitung, indem sie Text-, Bild-, Audio- und Videoeingaben kombinieren, um umfassendere KI-Lösungen bereitzustellen.

So hat beispielsweise GPT-4 von OpenAI deutliche Verbesserungen beim Verstehen und Generieren von menschenähnlichem Text gezeigt, während die Gemini-Modelle von Google sich durch die Verarbeitung unterschiedlicher Datentypen wie Text, Bilder und Audio auszeichnen und so nahtlosere und kontextrelevantere Interaktionen ermöglichen. Ebenso sind die Claude 3-Modelle von Anthropic für ihre Mehrsprachigkeit und verbesserte Leistung bei KI-Aufgaben bekannt.

Da die Entwicklung von LLMs immer schneller voranschreitet, ist es von entscheidender Bedeutung, die Feinheiten dieser Modelle, insbesondere ihre Parameter und Speicheranforderungen, zu verstehen. Dieser Leitfaden soll diese Aspekte entmystifizieren und bietet eine detaillierte und leicht verständliche Erklärung.

Die Grundlagen großer Sprachmodelle

Was sind große Sprachmodelle?

Große Sprachmodelle sind neuronale Netzwerke, die anhand riesiger Datensätze trainiert werden, um menschliche Sprache zu verstehen und zu generieren. Sie basieren auf Architekturen wie Transformers, die Mechanismen wie Selbstaufmerksamkeit verwenden, um Text zu verarbeiten und zu produzieren.

Bedeutung von Parametern im LLM

Parameter sind die Kernkomponenten dieser Modelle. Dazu gehören Gewichte und Bias, die das Modell während des Trainings anpasst, um Fehler in Vorhersagen zu minimieren. Die Anzahl der Parameter korreliert oft mit der Kapazität und Leistung des Modells, beeinflusst aber auch dessen Rechenleistungs- und Speicherbedarf.

Transformatorarchitektur verstehen

Transformers-Architektur

Transformatoren-Architektur

Übersicht

Die Transformer-Architektur, die im Artikel „Attention Is All You Need“ von Vaswani et al. (2017) vorgestellt wurde, ist zur Grundlage vieler LLMs geworden. Sie besteht aus einem Encoder und einem Decoder, die jeweils aus mehreren identischen Schichten bestehen.

Encoder- und Decoder-Komponenten

  • Encoder: Verarbeitet die Eingabesequenz und erstellt eine kontextbezogene Darstellung.
  • Decoder: Generiert die Ausgabesequenz unter Verwendung der Darstellung des Encoders und der zuvor generierten Token.

Wichtige Bausteine

  1. Mehrköpfige Aufmerksamkeit: Ermöglicht dem Modell, sich gleichzeitig auf verschiedene Teile der Eingabesequenz zu konzentrieren.
  2. Feedforward-Neuronale Netze: Fügt dem Modell Nichtlinearität und Komplexität hinzu.
  3. Layer-Normalisierung: Stabilisiert und beschleunigt das Training durch Normalisierung der Zwischenergebnisse.

Berechnen der Anzahl der Parameter

Transformator-Schulung

Vortrainierte Modelle für effizientes Transformer-Training

Berechnen von Parametern in Transformer-basierten LLMs

Lassen Sie uns die Parameterberechnung für jede Komponente eines Transformer-basierten LLM aufschlüsseln. Wir verwenden die Notation aus dem Originalpapier, wobei d_model stellt die Dimension der verborgenen Zustände des Modells dar.

  1. Einbettungsschicht:
    • Parameter = vocab_size * d_model
  2. Mehrköpfige Aufmerksamkeit:
    • für h Köpfe, mit d_k = d_v = d_model / h:
    • Parameter = 4 * d_model^2 (für Q-, K-, V- und Ausgabeprojektionen)
  3. Feed-Forward-Netzwerk:
    • Parameter = 2 * d_model * d_ff + d_model + d_ff
    • Wo d_ff beträgt typischerweise 4 * d_model
  4. Layer-Normalisierung:
    • Parameter = 2 * d_model (für Maßstab und Tendenz)

Gesamtparameter für eine Transformatorschicht:

  • Parameters_layer = Parameters_attention + Parameters_ffn + 2 * Parameters_layernorm

Für ein Modell mit N Schichten:

  • Gesamtparameter = N * Parameters_layer + Parameters_embedding + Parameters_output

Beispielrechnung

Betrachten wir ein Modell mit den folgenden Spezifikationen:

  • d_model = 768
  • h (Anzahl der Aufmerksamkeitsköpfe) = 12
  • N (Anzahl der Schichten) = 12
  • vocab_size = 50,000
  1. Einbettungsschicht:
    • 50,000 * 768 = 38,400,000
  2. Mehrköpfige Aufmerksamkeit:
    • 4 * 768^2 = 2,359,296
  3. Feed-Forward-Netzwerk:
    • 2 * 768 * (4 * 768) + 768 + (4 * 768) = 4,719,616
  4. Layer-Normalisierung:
    • 2 * 768 = 1,536

Gesamtparameter pro Schicht:

  • 2,359,296 + 4,719,616 + (2 * 1,536) = 7,081,984

Gesamtparameter für 12 Schichten:

  • 12 * 7,081,984 = 84,983,808

Gesamtmodellparameter:

  • 84,983,808 + 38,400,000 = 123,383,808

Dieses Modell hätte ungefähr 123 Millionen Parameter.

Arten der Speichernutzung

Bei der Arbeit mit LLMs müssen wir zwei Haupttypen der Speichernutzung berücksichtigen:

  1. Modellspeicher: Der zum Speichern der Modellparameter erforderliche Speicher.
  2. Arbeitsspeicher: Der Speicher, der während der Inferenz oder des Trainings zum Speichern von Zwischenaktivierungen, Gradienten und Optimiererzuständen benötigt wird.

Berechnen des Modellspeichers

Der Modellspeicher hängt direkt von der Anzahl der Parameter ab. Jeder Parameter wird normalerweise als 32-Bit-Gleitkommazahl gespeichert, obwohl einige Modelle ein Training mit gemischter Genauigkeit und 16-Bit-Gleitkommazahlen verwenden.

Modellspeicher (Bytes) = Anzahl der Parameter * Bytes pro Parameter

Für unser Beispielmodell mit 123 Millionen Parametern:

  • Modellspeicher (32-Bit) = 123,383,808 * 4 Bytes = 493,535,232 Bytes ≈ 494 MB
  • Modellspeicher (16-Bit) = 123,383,808 * 2 Bytes = 246,767,616 Bytes ≈ 247 MB

Schätzung des Arbeitsgedächtnisses

Der Arbeitsspeicherbedarf kann je nach Aufgabe, Batchgröße und Sequenzlänge erheblich variieren. Eine grobe Schätzung für den Arbeitsspeicher während der Inferenz lautet:

Arbeitsspeicher ≈ 2 * Modellspeicher

Dies berücksichtigt die Speicherung sowohl der Modellparameter als auch der Zwischenaktivierungen. Während des Trainings kann der Speicherbedarf aufgrund der Notwendigkeit, Gradienten und Optimiererzustände zu speichern, sogar noch höher sein:

Trainingsspeicher ≈ 4 * Modellspeicher

Für unser Beispielmodell:

  • Inferenz Arbeitsspeicher ≈ 2 * 494 MB = 988 MB ≈ 1 GB
  • Trainingsspeicher ≈ 4 * 494 MB = 1,976 MB ≈ 2 GB

Stationäre Speichernutzung und maximale Speichernutzung

Beim Trainieren großer Sprachmodelle auf Basis der Transformer-Architektur ist das Verständnis der Speichernutzung für eine effiziente Ressourcenzuweisung von entscheidender Bedeutung. Lassen Sie uns den Speicherbedarf in zwei Hauptkategorien unterteilen: Dauerhafte Speichernutzung und Spitzenspeichernutzung.

Steady-State-Speichernutzung

Die stationäre Speichernutzung umfasst die folgenden Komponenten:

  1. Modellgewichte: FP32-Kopien der Modellparameter, die 4N Bytes erfordern, wobei N die Anzahl der Parameter ist.
  2. Optimiererzustände: Für den Adam-Optimierer sind hierfür 8N Bytes erforderlich (2 Zustände pro Parameter).
  3. Farbverläufe: FP32-Kopien der Gradienten, die 4N Bytes erfordern.
  4. Eingabedaten: Bei angenommenen int64-Eingaben sind hierfür 8BD Bytes erforderlich, wobei B die Batchgröße und D die Eingabedimension ist.

Die gesamte stationäre Speichernutzung kann wie folgt geschätzt werden:

  • M_steady = 16N + 8BD Bytes

Spitzenspeicherverbrauch

Die höchste Speicherauslastung tritt während des Rückwärtsdurchlaufs auf, wenn Aktivierungen für die Gradientenberechnung gespeichert werden. Die Hauptursachen für die höchste Speicherauslastung sind:

  1. Layer-Normalisierung: Erfordert 4E Bytes pro Layer-Norm, wobei E = BSH (B: Batchgröße, S: Sequenzlänge, H: versteckte Größe).
  2. Achtungsblock:
    • QKV-Berechnung: 2E Bytes
    • Aufmerksamkeitsmatrix: 4BSS Bytes (S: Sequenzlänge)
    • Achtung Ausgabe: 2E Bytes
  3. Feedforward-Block:
    • Erste lineare Schicht: 2E Bytes
    • GELU-Aktivierung: 8E Bytes
    • Zweite lineare Schicht: 2E Bytes
  4. Cross-Entropy-Verlust:
    • Logits: 6 BSV Bytes (V: Vokabulargröße)

Das gesamte Aktivierungsgedächtnis kann wie folgt geschätzt werden:

  • M_act = L * (14E + 4BSS) + 6BSV Bytes

Wobei L die Anzahl der Transformatorschichten ist.

Gesamte maximale Speichernutzung

Die maximale Speichernutzung während des Trainings kann durch die Kombination des Steady-State-Speichers und des Aktivierungsspeichers angenähert werden:

  • M_peak = M_steady + M_act + 4BSV Bytes

Der zusätzliche 4BSV-Term berücksichtigt eine zusätzliche Zuweisung zu Beginn des Rückwärtsdurchlaufs.

Durch das Verständnis dieser Komponenten können wir die Speichernutzung während des Trainings und der Inferenz optimieren und so eine effiziente Ressourcenzuweisung und eine verbesserte Leistung großer Sprachmodelle sicherstellen.

Skalierungsgesetze und Effizienzüberlegungen

 Skalierungsgesetze für LLMs

Untersuchungen haben gezeigt, dass die Leistung von LLMs mit zunehmender Anzahl der Parameter bestimmten Skalierungsgesetzen folgt. Kaplan et al. (2020) stellten fest, dass sich die Modellleistung als Potenzgesetz der Anzahl der Parameter, des Rechenbudgets und der Datensatzgröße verbessert.

Die Beziehung zwischen Modellleistung und Parameteranzahl kann wie folgt angenähert werden:

Leistung ∝ N^α

Dabei ist N die Anzahl der Parameter und α ein Skalierungsexponent, der für Sprachmodellierungsaufgaben typischerweise bei etwa 0.07 liegt.

Dies bedeutet, dass wir die Anzahl der Parameter um den Faktor 10^(10/α) ≈ 1 erhöhen müssen, um eine Leistungssteigerung von 3.7 % zu erreichen.

Effizienztechniken

Da die Zahl der LLMs weiter zunimmt, haben Forscher und Praktiker verschiedene Techniken zur Verbesserung der Effizienz entwickelt:

a) Gemischtes Präzisionstraining: Verwenden Sie für bestimmte Vorgänge 16-Bit- oder sogar 8-Bit-Gleitkommazahlen, um den Speicherverbrauch und den Rechenaufwand zu reduzieren.

b) Modellparallelität: Verteilen Sie das Modell auf mehrere GPUs oder TPUs, um größere Modelle zu verarbeiten, als auf ein einzelnes Gerät passen.

c) Gradienten-Checkpointing: Berechnung gegen Speicher eintauschen, indem bestimmte Aktivierungen während des Rückwärtsdurchlaufs neu berechnet werden, anstatt sie zu speichern.

d) Beschneiden und Quantisieren: Entfernen weniger wichtiger Gewichte oder Reduzieren ihrer Präzision nach dem Training, um kleinere, effizientere Modelle zu erstellen.

e) Destillation: Trainieren kleinerer Modelle, um das Verhalten größerer Modelle nachzuahmen. So bleibt möglicherweise ein Großteil der Leistung mit weniger Parametern erhalten.

Praktisches Beispiel und Berechnungen

GPT-3, eines der größten Sprachmodelle, hat 175 Milliarden Parameter. Es verwendet den Decoder-Teil der Transformer-Architektur. Um die Größenordnung zu verstehen, schlüsseln wir die Parameteranzahl mit hypothetischen Werten auf:

  • d_model = 12288
  • d_ff = 4 * 12288 = 49152
  • Anzahl der Schichten = 96

Für eine Decoderschicht:

Gesamtparameter = 8 * 12288^2 + 8 * 12288 * 49152 + 2 * 12288 ≈ 1.1 Milliarden

Gesamt für 96 Schichten:

1.1 Milliarden * 96 = 105.6 Milliarden

Die restlichen Parameter stammen aus Einbettungen und anderen Komponenten.

Zusammenfassung

Das Verständnis der Parameter und Speicheranforderungen großer Sprachmodelle ist entscheidend für die effektive Entwicklung, Schulung und Bereitstellung dieser leistungsstarken Tools. Indem wir die Komponenten der Transformer-Architektur aufschlüsseln und praktische Beispiele wie GPT untersuchen, erhalten wir einen tieferen Einblick in die Komplexität und den Umfang dieser Modelle.

Um die neuesten Fortschritte bei großen Sprachmodellen und deren Anwendungen besser zu verstehen, sehen Sie sich diese umfassenden Anleitungen an:

Ich habe die letzten fünf Jahre damit verbracht, in die faszinierende Welt des maschinellen Lernens und des Deep Learning einzutauchen. Meine Leidenschaft und mein Fachwissen haben dazu geführt, dass ich an über 50 verschiedenen Software-Engineering-Projekten mitgewirkt habe, mit besonderem Schwerpunkt auf KI/ML. Meine anhaltende Neugier hat mich auch zur Verarbeitung natürlicher Sprache geführt, einem Bereich, den ich gerne weiter erforschen möchte.