Artificial Intelligence (AI)

Optimize Resource Usage with the mixture of Experts and Grok-1

Written by smirow

Einführung

Large Language Models (LLMs) können kohärenten, kontextrelevanten Text generieren, da sie auf großen Datensätzen trainiert werden und Milliarden von Parametern nutzen. Dieser immense Umfang verleiht LLMs neue Eigenschaften, wie z. B. differenziertes Verständnis und generative Fähigkeiten in Bereichen, die über einfachere Modelle hinausgehen. Diese Vorteile gehen jedoch mit einem hohen Rechenaufwand bei häufiger Nutzung einher. Um diese Herausforderungen zu lindern, schauen wir uns eine wichtige Technik namens Expertenmischung an, die die Ressourcennutzung optimiert, ohne die Modellleistung zu beeinträchtigen. Wir werden auch die Grok-1-Architektur untersuchen, um zu verstehen, wie diese Technik verwendet wird.

Lernziele

  1. Verstehen Sie, wie Mixture of Experts Rechenressourcen optimiert, indem es Teilmengen von Modellparametern selektiv aktiviert.
  2. Erkunden Sie Router-Mechanismen in MoE, die eine effiziente Ressourcenzuweisung basierend auf Eingabemerkmalen ermöglichen.
  3. Vergleichen Sie die Implementierung von MoE in LLMs und heben Sie Unterschiede in den Aufmerksamkeitsmechanismen und dichten Blockstrukturen hervor.
  4. Erfahren Sie, wie Sie eine MoE-Ebene in Grok-1 für eine effiziente Modellinferenz ausführen.

Expertenmischung

Wenn Sie sich an die Ensembletechniken des maschinellen Lernens erinnern, können wir den gewichteten Durchschnitt der Vorhersagen mehrerer Modelle verwenden, um die endgültige Vorhersage zu erhalten.

Der Expertenmix funktioniert genauso. Anstatt die Eingabe durch alle Modellparameter zu leiten, können wir sie nur durch eine Teilmenge von Parametern basierend auf dem Eingabetoken weiterleiten. Diese Untergruppe von Parametern kann als „Experte“ für diese Eingabe betrachtet werden.

Dieser selektive Eingriff von Modellparametern ermöglicht eine effizientere Berechnung und Skalierbarkeit, ohne die Modellleistung zu beeinträchtigen. Da wir nur wenige Experten auswählen, wird diese Technik auch Sparse-MOE-Technik genannt.

Router

Woher weiß das Modell, welche Experten es auswählen muss? In MOE wird eine Komponente namens Router darauf trainiert, auszuwählen, welche Experten für ein bestimmtes Eingabe-Token verwendet werden sollen. Wir initialisieren die Router-Gewichtsmatrix mit konstanten Werten (z. B. Nullen). Wenn das Modell mit mehr Daten trainiert wird, passt das Feedforward-Router-Netzwerk diese Gewichtungen basierend auf der Leistung jedes Experten an und lernt so effektiv, welche Experten bei der Verarbeitung bestimmter Arten von Eingaben besonders gut sind.

"

Wir behalten die Top-K-Expertengewichte bei, stellen aber auch andere Gewichte her: unendlich. Dann wenden wir Softmax auf diese Gewichte an, wodurch das Gewicht der Top-K-Experten zur Verarbeitung der Eingabe generiert wird. Mit dieser einfachen Gleichung können wir die tok-k- und softmax-Operationen bezeichnen.

P = Softmax (High-K (W))

Welche Bestandteile des LLM können als Experten gewählt werden? Um das herauszufinden, werfen wir einen Blick auf die typische LLM-Architektur.

Architektur LLM

Schauen wir uns kurz die Berechnungen an, die in einem typischen LLM durchgeführt werden.

  1. Die Eingabe wird tokenisiert und Positionseinbettungen werden hinzugefügt.
  2. Die Eingabe wird mit den Gewichten Q, K und V multipliziert, um die Q-, K- und V-Matrizen jedes Kopfes zu erhalten.
  3. Aufmerksamkeit wird berechnet als Aufmerksamkeit(Q, K, V) = softmax(QK
  4. Dann wird es mit O Gewichten multipliziert (Ausgabe). Die Ergebnisse aller Köpfe werden verkettet, um die Mehrkopf-Aufmerksamkeitsausgabe zu bilden.
  5. Die MHA-Ausgabe wird mithilfe vollständig verbundener MLP-Schichten vergrößert (typischerweise um den Faktor 4) und verkleinert, wobei typischerweise eine nichtlineare Aktivierungsfunktion wie ReLU integriert ist.
  6. Die Punkte 2 bis 5 werden für jede Decoderschicht wiederholt.
  7. Die endgültige Ausgabe wird an einen MLP verarbeitet, um die Vokabularwahrscheinlichkeiten für den nächsten Token zu erzeugen.

Angesichts der Hidden_size-Dimension von h für ein Token können die Parameter für eine einzelne Decoderschicht wie folgt angezeigt werden.

"

Wie wir sehen können, gibt es in der vollständig verbundenen Schicht mehr Parameter als in den MHA-Schichten.

Wir können also die Anzahl der MLP-Schichten erhöhen und dann mithilfe des Routing-Mechanismus nur die obersten K auswählen, um optimale Leistung und Effizienz zu erzielen.

Grok-1 ist das größte Open-Source-LLM, das auf einer Mischung von Experten basiert. Sehen wir uns an, wie dies in Grok-1 umgesetzt wird.

Grok-1-Architektur

Hier sind die Spezifikationen des Grok-1:

Merkmale

  1. Einstellungen: 314B
  2. Die Architektur: Mischung aus 8 Experten (MoE)
  3. Einsatz von Experten: Pro Token werden 2 Experten eingesetzt
  4. Lagen: 64
  5. Achtung Bosse: 48 für Abfragen, 8 für Schlüssel/Werte
  6. Integrationsgröße: 6.144
  7. Tokenisierung: SentenceCoin-Tokenizer mit 131.072 Token
  8. Zusatzfunktionen
    • Rotierende Einbettungen (RoPE)
    • Unterstützt Aktivierungspartitionierung und 8-Bit-Quantisierung
  9. Maximale Sequenzlänge (Kontext): 8.192 Token

Im Vergleich zum oben beschriebenen typischen LLM gibt es einige Unterschiede zu Grok-1.

Aufmerksamkeitsblockierung

Es gibt 48 Aufmerksamkeitsköpfe für Abfragen, aber 8 für Schlüssel oder Werte. Dies wird als Aufmerksamkeit für Massenabfragen bezeichnet.

"

Wie wir aus dem Bild oben ersehen können, ist bei der Multi-Head-Aufmerksamkeit die Anzahl der eindeutigen Schlüssel- und Wertvektoren gleich der Anzahl der Abfrage-Aufmerksamkeitsköpfe; In Multi-Query Attention ist die Anzahl der eindeutigen Schlüsselvektoren und -werte gleich 1.

Obwohl die Aufmerksamkeit bei mehreren Abfragen die Modellparameter reduziert, verringert sie auch die Leistung. Die Aufmerksamkeit bei Massenabfragen gleicht diese beiden Elemente aus. Dabei entspricht die Anzahl der eindeutigen Schlüssel- und Wertvektoren einem bestimmten Bruchteil der Abfragevektoren. In Grok gibt es für 48 Abfragevektoren 8 Schlüssel- oder Wertvektoren.

Dichter Block

Nach dem Aufmerksamkeitsblock werden die Gewichte verkettet und mit einem Skalierungsfaktor skaliert.

Schauen wir uns den Grok-Code an, um den Vergrößerungsfaktor herauszufinden.

Grok-1Github

def ffn_size(emb_size, widening_factor):

  _ffn_size = int(widening_factor * emb_size) * 2 // 3

  _ffn_size = _ffn_size + (8 - _ffn_size) % 8  # ensure it's a multiple of 8

  logger.debug(f"emd_size: {emb_size} adjusted ffn_size: {_ffn_size}")

  return _ffn_size

Der Vergrößerungsfaktor liegt eher bei 8/3. Dadurch erhöht sich die Einbettungsgröße von 6.144 auf 16.384.

Hier ist der Code für den dichten Block

	h_v = Linear(

        	ffn_size(

            	model_size,self.widening_factor),

        	with_bias=False, mesh=self.mesh,

        	sharding=P("data", "model"),

        	name="linear_v",

    	)(inputs)

    	h_w1 = jax.nn.gelu(

        	Linear(

            	ffn_size(

            	model_size,self.widening_factor),

            	with_bias=False, mesh=self.mesh,

            	sharding=P("data", "model"),

        	)(inputs)

    	)

    	h_dense = Linear(

        	model_size,

        	with_bias=False,

        	sharding=P("model", "data"),

        	mesh=self.mesh,

        	shard_axis=1,

    	)(h_w1 * h_v)

Die Eingabematrix mit Hidden_size 6144 wird parallel zweimal auf 16384 skaliert, wie durch h_v und h_w1 angegeben. Die GELU-Aktivierungsfunktion gilt nur für die zweite Matrix. Dann wird eine Element-für-Element-Multiplikation auf beiden durchgeführt und das Ergebnis auf die Modellgröße 6144 reduziert.

MOE-Schicht

Die MoE-Schicht von Grok-1 orchestriert eine flexible und effiziente Möglichkeit, mehrere Expertennetzwerke zu nutzen, die jeweils auf unterschiedliche Aspekte der Eingabedaten spezialisiert sind. Die _inference_call-Methode führt mehrere wichtige Schritte aus, um dies zu erreichen:

Grok-1 verwendet die Jax- und Haiku-Bibliotheken, um das Modell zu erstellen.

def _inference_call(self, inputs: jax.Array, padding_mask: Optional[jax.Array] = None):
    	routing_probs, _, _ = self.router.compute_routing_prob(
        	inputs, padding_mask, self.num_experts
    	)
    	expert_gate, expert_index = jax.lax.top_k(routing_probs, k=self.router.num_selected_experts)
    	tmp = jnp.reshape(inputs, (inputs.shape[0] * inputs.shape[1], inputs.shape[2]))
    	broad_inputs = jnp.tile(tmp[:, jnp.newaxis, :], (1, self.router.num_selected_experts, 1))
    	broad_inputs = jnp.reshape(
        	broad_inputs, (broad_inputs.shape[0] * broad_inputs.shape[1], broad_inputs.shape[2])
    	)
  1. Dies beginnt mit der Berechnung der Routing-Wahrscheinlichkeiten für jedes Eingabedatenelement und bestimmt so, wie die Eingaben auf die verfügbaren Experten verteilt werden. Dies wird dank der erreicht router.compute_routing_prob Methode, die Eingaben entgegennimmt und optional eine padding_mask. Routing-Probleme werden wie folgt berechnet: routing_probs = jax.nn.softmax(router_weights(inputs, num_experts) wobei num_experts 8 ist.
  2. Basierend auf den Routing-Wahrscheinlichkeiten, dem Scheitelpunkt k Experten (2 für Grok-1) werden für jeden Eingang mit ausgewählt jax.lax.top_k. Dadurch wird sichergestellt, dass jeder Eintrag von den Experten bearbeitet wird, die ihn am ehesten effektiv bearbeiten können.
  3. Der Rest des Codes bereitet die Eingabedaten mithilfe verschiedener Transformationen für die Verarbeitung durch die Haiku-Bibliothek vor.
  4. Dann durchlaufen die Eingaben, wie wir bei der dichten Blockkonfiguration gesehen haben, zwei parallel skalierende MLPs. Die GELU-Aktivierungsfunktion wird auf die zweite angewendet; beide werden multipliziert und das Ergebnis auf die ursprüngliche Dimension 6144 reduziert.

Abschluss

Zusammenfassend lässt sich sagen, dass die Expertenmischung (Mix of Experts, MoE) einen vielversprechenden Weg zur Verbesserung der Wirksamkeit großer Sprachmodelle (LLMs) bietet, indem Teilmengen von Modellparametern basierend auf Eingabemerkmalen selektiv einbezogen werden. MoE schont Rechenressourcen und sorgt durch Router-Mechanismen und eine optimierte Architektur für eine hohe Modellleistung. Wie die Grok-1-Architektur zeigt, demonstriert MoE sein Potenzial, die LLM-Inferenz zu revolutionieren und den Weg für skalierbarere und effizientere Lösungen zur Verarbeitung natürlicher Sprache in der Zukunft zu ebnen.

Die zentralen Thesen

  1. Ein Expertenmix (MoE) optimiert große Sprachmodelle (LLMs) durch selektive Aktivierung von Teilmengen von Modellparametern und verbessert so die Effizienz, ohne die Leistung zu beeinträchtigen.
  2. Der Router-Mechanismus des MoE wählt Experten dynamisch basierend auf Eingabemerkmalen aus und ermöglicht so adaptive und ressourceneffiziente Berechnungen.
  3. Die Grok-1-Architektur unterstreicht das Potenzial von MoE in LLMs und bietet skalierbare und effiziente Lösungen für Aufgaben der Verarbeitung natürlicher Sprache.
  4. Die Einführung von MoE kann zu Durchbrüchen in der LLM-Inferenz führen und Fortschritte in verschiedenen Bereichen ermöglichen, die anspruchsvolle Sprachverständnis- und Generierungsfähigkeiten erfordern.

Häufig gestellte Fragen (FAQ)

T1. Welchen Vorteil bietet der Einsatz einer Expertenmischung (MoE) in großen Sprachmodellen (LLM)?

Rep. MoE optimiert die Rechenressourcen, indem es Teilmengen von Modellparametern basierend auf Eingabemerkmalen selektiv aktiviert und so die Effizienz verbessert, ohne die Leistung zu beeinträchtigen.

Q2. Wie funktioniert der Router-Mechanismus innerhalb des MoE?

Rep. Der Router wählt dynamisch Experten für jede Eingabe aus, basierend auf den während des Trainings erlernten Routing-Wahrscheinlichkeiten. Dadurch wird sichergestellt, dass Eingaben von den am besten geeigneten Experten verarbeitet werden, was zu einer adaptiven und ressourceneffizienten Datenverarbeitung beiträgt.

Q3. Was unterscheidet die Grok-1-Architektur von herkömmlichen LLMs beim Einsatz von MoE?

Rep. Grok-1 verwendet zwei parallele Skalierungsnetzwerke und berechnet auf Elementbasis, bevor das Ergebnis verkleinert wird. Sein innovativer Ansatz nutzt mehrere Experten, um verschiedene Aspekte der Eingabedaten zu verwalten, was zu Durchbrüchen beim Sprachverständnis und bei der Sprachgenerierung führt.

About the author

smirow

Leave a Comment