Verteiltes Training
Wenn ein Modell nicht auf eine Karte passt: Daten-, Tensor- und Pipeline-Parallelität, ihre Kommunikationskosten und wann welche Aufteilung greift.
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
| Achse | Was aufgeteilt wird | Kommunikation |
|---|---|---|
| Datenparallelität | Verschiedene Beispiele je Karte | Gradienten nach jedem Schritt |
| Tensorparallelität | Eine Schicht über mehrere Karten | Nach jeder Schicht |
| Pipeline-Parallelität | Verschiedene Schichten je Karte | Aktivierungen zwischen Stufen |
Welche Aufteilung wann
- 01
Passt alles auf eine Karte
Reine Datenparallelität. Einfach, robust, skaliert bis zur Kommunikationsgrenze.
- 02
Optimiererzustände sind zu groß
ZeRO Stufe 1 bis 3 oder FSDP. Die Zustände werden verteilt und nur bei Bedarf eingesammelt.
- 03
Eine Schicht passt nicht mehr
Tensorparallelität, ausschließlich innerhalb eines Knotens mit schneller Verbindung. Über Knotengrenzen hinweg zerstört sie den Durchsatz.
- 04
Sehr viele Schichten
Pipeline-Parallelität mit Mikrobatches, um die Leerlaufzeit klein zu halten.
Kommunikationsaufwand
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
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
| Stufe | Was verteilt wird | Speicher je Karte bei p Karten |
|---|---|---|
| 0 | nichts | 16 · N Byte |
| 1 | Optimiererzustände | 4 · N + 12 · N / p |
| 2 | plus Gradienten | 2 · N + 14 · N / p |
| 3 | plus Parameter | 16 · 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
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.