LLMs schneller trainieren: Accelerate ND-Parallel für Multi-GPU
Das Training großer künstlicher Intelligenzmodelle über mehrere GPUs hinweg stellt erhebliche Herausforderungen dar, hauptsächlich aufgrund des komplexen Zusammenspiels verschiedener Parallelisierungsstrategien. Um diesen komplexen Prozess zu optimieren, haben Plattformen wie Hugging Face’s Accelerate, in Zusammenarbeit mit Axolotl, Methoden integriert, die es Entwicklern ermöglichen, verschiedene Parallelisierungstechniken nahtlos in ihren Trainingsskripten zu kombinieren. Diese Innovation zielt darauf ab, die Skalierung von Modellen zu vereinfachen, von der Konfiguration grundlegender verteilter Setups bis zur Orchestrierung anspruchsvoller mehrdimensionaler Parallelisierung über riesige Computercluster hinweg.
Im Mittelpunkt des Multi-GPU-Trainings stehen mehrere grundlegende Parallelisierungsstrategien, die jeweils darauf ausgelegt sind, spezifische Skalierungsengpässe zu beseitigen.
Datenparallelismus (DP) ist der einfachste Ansatz, bei dem das gesamte Modell zusammen mit seinen Gradienten und Optimiererzuständen auf jeder GPU repliziert wird. Datenbatches werden dann gleichmäßig auf diese Geräte aufgeteilt, und Gradienten werden synchronisiert, bevor die Modellparameter aktualisiert werden. Obwohl dies den Durchsatz im Vergleich zum Training auf einem einzelnen Gerät erheblich steigert, besteht die primäre Einschränkung darin, dass das gesamte Modell in den Speicher einer einzelnen GPU passen muss.
Wenn Modelle für ein einzelnes Gerät zu groß werden, bietet der Vollständig geshardete Datenparallelismus (FSDP) eine Lösung. Inspiriert von Techniken wie DeepSpeeds ZeRO-3 shardt FSDP die Modellgewichte, Gradienten und Optimiererzustände über mehrere GPUs hinweg. Jedes Gerät erhält weiterhin einen Teil des Datenbatches. Im Gegensatz zu DP vermeidet FSDP die Replikation des gesamten Modells; stattdessen werden nur die notwendigen Gewichte für eine bestimmte Schicht vor ihrem Vorwärts- oder Rückwärtsdurchlauf gesammelt und dann erneut geshardet. Diese Methode tauscht erhöhten Kommunikationsaufwand gegen erhebliche Speichereinsparungen ein. Während FSDP über viele GPUs, sogar über mehrere Knoten (Maschinen, die mehrere GPUs hosten) skalieren kann, kann seine Effizienz bei langsamerer Inter-Node-Kommunikation abnehmen, insbesondere beim Sharding über ein gesamtes Gerätenetzwerk hinweg.
Der Tensorparallelismus (TP), eine Form des Modellparallelismus, begegnet der Herausforderung extrem großer einzelner Modellschichten. Anstatt das gesamte Modell zu replizieren oder zu sharden, teilt TP große lineare Schichten (häufig in Transformer-Modellen) über Geräte auf. Jedes Gerät berechnet nur einen Teil der Matrixmultiplikation, während es einen identischen Datenbatch empfängt. Dies erzeugt statische Speicherpartitionen, die eine konstante Speicherreduzierung proportional zur TP-Gruppengröße bieten. TP ist hochwirksam für die Verteilung von Rechenleistung und Speicher innerhalb eines einzelnen Knotens, wo eine Hochbandbreiten-Inter-GPU-Kommunikation (z. B. NVLink) verfügbar ist. Aufgrund häufiger Anforderungen an die Aktivierungssynchronisierung wird TP jedoch im Allgemeinen nicht für die Skalierung über mehrere Knoten oder über langsamere Verbindungen wie PCIe empfohlen.
Mit dem Aufkommen großer Sprachmodelle (LLMs) und deren Bedarf an immer längeren Sequenzlängen – manchmal Hunderttausende oder sogar Millionen von Token – entsteht eine neue Speicherherausforderung. Der Aufmerksamkeitsmechanismus, eine Kernkomponente von Transformatoren, skaliert quadratisch mit der Sequenzlänge, was zu einem unerschwinglichen Speicherverbrauch für Aktivierungen führt. Der Kontextparallelismus (CP) begegnet dem, indem er die Eingabesequenz über GPUs shardt. Jedes Gerät verarbeitet nur einen Teil des vollständigen Kontexts und berechnet einen kleineren Teil der Aufmerksamkeitsmatrix. Um eine korrekte Aufmerksamkeitsberechnung zu gewährleisten, die den Zugriff auf die vollständige Sequenz erfordert, werden Techniken wie RingAttention eingesetzt, die Schlüssel- und Wertmatrizen zwischen den Geräten zirkulieren lassen. Dies ermöglicht es jeder Abfrage, Aufmerksamkeitswerte für die gesamte Sequenz zu berechnen, während Speicher- und Rechenlast verteilt werden.
Für die anspruchsvollsten Trainingsszenarien, insbesondere solche, die sich über mehrere Knoten erstrecken, können Entwickler diese Strategien zu „ND-Parallelismen“ zusammenfügen, indem sie eine zweidimensionale Ansicht von Computerclustern nutzen: schnelle Intra-Node-Kommunikation auf einer Achse und langsamere Inter-Node-Kommunikation auf einer anderen.
Der Hybrid geshardete Datenparallelismus (HSDP) kombiniert FSDP und DP. Er wendet FSDP innerhalb jedes Knotens an, um schnellere Intra-Node-Verbindungen für speicherintensives Sharding zu nutzen, während das Modell repliziert und Gradienten unter Verwendung von DP über Knoten hinweg synchronisiert werden. Dies optimiert den Kommunikationsaufwand für große Multi-Node-Setups.
Die Kombination von Vollständig geshardetem Datenparallelismus mit Tensorparallelismus (FSDP + TP) beinhaltet das Sharding des Modells über Knoten hinweg mit FSDP und innerhalb eines Knotens mit TP. Diese leistungsstarke Kombination kann die FSDP-Latenz reduzieren, Schichten verteilen, die für ein einzelnes Gerät zu groß sind, und möglicherweise die globale Batch-Größe verringern. Ähnlich kann der Vollständig geshardete Datenparallelismus mit Kontextparallelismus (FSDP + CP) verwendet werden, wenn auch seltener, um den Speicherverbrauch weiter zu reduzieren, wenn extrem große Sequenzlängen mit FSDP kombiniert werden.
Für die ultimative Flexibilität und Skalierung schafft der Hybrid geshardete Datenparallelismus mit Tensorparallelismus (HSDP + TP), oft als 3D-Parallelismus bezeichnet, eine hierarchische Struktur. Der Datenparallelismus repliziert das Modell über Knotengruppen hinweg, FSDP shardt das Modell innerhalb jeder Gruppe, und TP teilt einzelne Schichten innerhalb jedes Knotens auf. Dies bietet die größte Anpassungsfähigkeit, um Speichernutzung und Durchsatz in massiven Trainingsumgebungen auszugleichen.
Neben der Auswahl der richtigen Parallelisierungsstrategie sind mehrere praktische Überlegungen entscheidend für die Optimierung des verteilten Trainings. Für FSDP ist die Aktivierung des CPU-RAM-effizienten Ladens und des Sharded State Dictionary Checkpointings von entscheidender Bedeutung, um Modelle zu handhaben, die zu groß für den Speicher eines einzelnen Geräts sind. Die effektive Batch-Größe, die die Trainingsstabilität und den Durchsatz erheblich beeinflusst, wird durch die Mikro-Batch-Größe, die Gradientenakkumulationsschritte und die Datenparallelismus-Weltgröße bestimmt. Da die effektive Batch-Größe mit der Parallelisierung zunimmt, sollte die Lernrate proportional skaliert werden, um die Stabilität zu erhalten. Schließlich bietet das Gradienten-Checkpointing zusätzliche Speichereinsparungen, indem es Rechenleistung gegen Speicher tauscht; es berechnet selektiv Zwischenaktivierungen während des Rückwärtsdurchlaufs neu, wodurch der Aktivierungsspeicher um 60-80% reduziert wird, auf Kosten einer moderaten Erhöhung der Trainingszeit um 20-30%. Diese Technik funktioniert nahtlos mit allen Parallelisierungsstrategien und ist ein wertvolles Werkzeug, wenn Speicherbeschränkungen bestehen bleiben.
Letztendlich erfordert die optimale Konfiguration oft Experimente, da das ideale Gleichgewicht zwischen Speicher, Rechenleistung und Kommunikationsaufwand stark vom spezifischen Modell, Datensatz und der Hardware-Konfiguration abhängt. Diese fortschrittlichen Parallelisierungstechniken sind unverzichtbare Werkzeuge, die die Grenzen dessen verschieben, was bei der Entwicklung großer KI-Modelle möglich ist.