KI‑Kompass
Kompass

Verteiltes Training

Wenn ein Modell nicht auf eine Karte passt: Daten-, Tensor- und Pipeline-Parallelität, ihre Kommunikationskosten und wann welche Aufteilung greift.

·2 Min. Lesezeit·Von Fachredaktion Technik
DETAILGRAD
3 Abschnitte

Die Idee

Ein großes Modell auf vielen Karten zu trainieren ist wie ein Bauprojekt mit vielen Teams. Man kann die Arbeit auf drei Arten aufteilen: jedes Team baut ein eigenes Haus nach demselben Plan, oder alle bauen gemeinsam an einem Haus und teilen sich die Wände, oder jedes Team übernimmt ein Stockwerk.

Jede Aufteilung hat andere Absprachekosten, und die Absprache ist der Engpass.

Die drei Achsen

AchseWas aufgeteilt wirdKommunikation
DatenparallelitätVerschiedene Beispiele je KarteGradienten nach jedem Schritt
TensorparallelitätEine Schicht über mehrere KartenNach jeder Schicht
Pipeline-ParallelitätVerschiedene Schichten je KarteAktivierungen zwischen Stufen

Welche Aufteilung wann

  1. 01

    Passt alles auf eine Karte

    Reine Datenparallelität. Einfach, robust, skaliert bis zur Kommunikationsgrenze.

  2. 02

    Optimiererzustände sind zu groß

    ZeRO Stufe 1 bis 3 oder FSDP. Die Zustände werden verteilt und nur bei Bedarf eingesammelt.

  3. 03

    Eine Schicht passt nicht mehr

    Tensorparallelität, ausschließlich innerhalb eines Knotens mit schneller Verbindung. Über Knotengrenzen hinweg zerstört sie den Durchsatz.

  4. 04

    Sehr viele Schichten

    Pipeline-Parallelität mit Mikrobatches, um die Leerlaufzeit klein zu halten.

Kommunikationsaufwand

All-Reduce der Gradienten

Volumen je Karte = 2 · N · b · (p − 1)/p ≈ 2 · N · b

Beim Ring-All-Reduce sendet jede Karte annähernd das Doppelte der Parametermenge, unabhängig von der Kartenzahl.

N
Anzahl der Parameter
b
Bytes je Gradient
p
Anzahl der Karten

Für ein Modell mit 7 Milliarden Parametern in bfloat16 sind das rund 28 GB je Karte und Schritt. Bei einer Verbindung mit 400 GB/s dauert der Austausch etwa 70 Millisekunden. Wenn ein Trainingsschritt selbst 200 Millisekunden dauert, gehen 26 Prozent der Zeit für Kommunikation verloren, es sei denn, sie wird mit der Rückwärtsrechnung überlappt, was moderne Bibliotheken tun.

Die Leerlauflücke bei Pipelines

Blaseneffizienz

Leerlaufanteil = (s − 1) / (m + s − 1)

Der Anteil verlorener Zeit sinkt, je mehr Mikrobatches durch die Pipeline geschickt werden.

s
Anzahl der Pipeline-Stufen
m
Anzahl der Mikrobatches je Schritt

Bei 8 Stufen und 8 Mikrobatches gehen 7/15 = 46,7 Prozent verloren. Bei 64 Mikrobatches nur noch 7/71 = 9,9 Prozent. Das ist der Grund, warum Pipeline-Parallelität immer mit einer großen Zahl kleiner Mikrobatches gefahren wird, und warum sie bei kleinen Gesamtbatches nicht funktioniert.

Speicher je Karte unter ZeRO

StufeWas verteilt wirdSpeicher je Karte bei p Karten
0nichts16 · N Byte
1Optimiererzustände4 · N + 12 · N / p
2plus Gradienten2 · N + 14 · N / p
3plus Parameter16 · N / p

Bei N = 7e9 und 8 Karten sind das 112 GB je Karte ohne Verteilung und 14 GB je Karte in Stufe 3: der Unterschied zwischen unmöglich und machbar. Der Preis ist zusätzliche Kommunikation, weil Parameter vor jeder Schicht eingesammelt und danach wieder verworfen werden.

Reproduzierbarkeit

Ein verteilter Trainingslauf ist selbst mit festem Startwert nicht bitgleich wiederholbar, weil die Reihenfolge der Gradientensummierung von der Netzwerklaufzeit abhängt. Für die Nachweisführung heißt das: Nicht der Lauf wird belegt, sondern das Ergebnis. Modellprüfsumme, Datensatzstand, Konfiguration und Metriken gehören protokolliert, siehe Protokollierung.

Passende Kurse und Quellen

KursKostenlosEN

PyTorch-Tutorials

Die offiziellen Anleitungen, von der ersten Tensoroperation bis zum verteilten Training. Kurz, lauffähig und laufend aktualisiert.

Für den Einstieg in die Bibliothek, in der der Großteil der Forschung geschrieben ist.

War diese Seite hilfreich?
Verteiltes Training