Modellparallelismus ist eine Technik des verteilten Rechnens, die im maschinellen Lernen und Deep Learning eingesetzt wird, um große neuronale Netze zu trainieren oder für Inferenz zu nutzen, die nicht in den Speicher eines einzelnen Geräts wie einer GPU oder TPU passen. Im Gegensatz zum Datenparallelismus, bei dem jedes Gerät eine vollständige Kopie des Modells hält und verschiedene Datenstapel verarbeitet, partitioniert der Modellparallelismus das Modell selbst, typischerweise indem verschiedene Schichten oder Teilmengen von Schichten verschiedenen Geräten zugewiesen werden. Dieser Ansatz ist entscheidend für die Skalierung von Modellen wie Transformer-basierten großen Sprachmodellen, die Milliarden oder Billionen von Parametern haben können.
Überblick
Beim Modellparallelismus wird das neuronale Netz entlang seiner Tiefe (schichtweise) oder in fortgeschritteneren Formen entlang anderer Dimensionen wie der Breite oder sogar einzelner Tensoroperationen aufgeteilt. Die einfachste Form ist die schichtweise Partitionierung, bei der aufeinanderfolgende Schichten auf verschiedenen Geräten platziert werden. Während der Vorwärtspropagation fließen Aktivierungen von einem Gerät zum nächsten; während der Rückpropagation fließen Gradienten in die umgekehrte Richtung. Dies erzeugt eine pipelineartige Ausführung, die bei unzureichender Planung Leerlaufzeiten (Blasen) verursachen kann. Der Modellparallelismus wird oft mit dem Datenparallelismus verglichen, aber beide können in hybriden Ansätzen kombiniert werden, wie etwa beim 3D-Parallelismus, der beim Training großer Modelle verwendet wird.
Motivation
Moderne neuronale Netze, insbesondere große Sprachmodelle, sind exponentiell gewachsen. GPT-3 (2020) hat beispielsweise 175 Milliarden Parameter, was über 350 GB Speicher allein für die Gewichte in 32-Bit-Präzision erfordert – weit mehr als die 80 GB Kapazität von High-End-GPUs wie der A100. Selbst mit Speicheroptimierungen wie gemischter Präzision und Gradient-Checkpointing ist das Training auf einem einzelnen Gerät nicht durchführbar. Der Modellparallelismus ermöglicht es Forschern, Modelle zu trainieren, die um Größenordnungen größer sind als das, was ein einzelnes Gerät speichern kann, indem das Modell auf einen Cluster von Geräten verteilt wird, die über Hochgeschwindigkeitsverbindungen miteinander verbunden sind.
Arten des Modellparallelismus
Schichtweiser (Pipeline-)Parallelismus
Dies ist die einfachste Form, bei der das Modell in sequentielle Stufen aufgeteilt wird, die jeweils einem anderen Gerät zugewiesen sind. Beispielsweise könnte ein 100-Schichten-Netzwerk in 10 Stufen mit je 10 Schichten aufgeteilt werden, wobei jede Stufe auf einer separaten GPU liegt. Während des Vorwärtsdurchlaufs fließen die Daten durch Stufe 1, dann Stufe 2 und so weiter. Die Hauptherausforderung besteht in der Lastverteilung und der Reduzierung von Pipeline-Blasen. Techniken wie GPipe und PipeDream nutzen Mikrobatching und Scheduling, um die Auslastung zu verbessern.
Tensorparallelismus
Der Tensorparallelismus teilt einzelne Operationen (z. B. Matrixmultiplikationen) auf mehrere Geräte auf. Beispielsweise können bei der Attention-Mechanik eines Transformers die Projektionen für Query, Key und Value auf GPUs partitioniert werden, wobei die Ergebnisse über All-Reduce-Operationen kombiniert werden. Dieser Ansatz wird in Megatron-LM verwendet und ist effektiv, um den Speicher pro Gerät zu reduzieren und gleichzeitig eine hohe Recheneffizienz zu erhalten, erfordert jedoch eine Kommunikation mit hoher Bandbreite.
Expertenparallelismus
Beim Expertenparallelismus, der in Mixture-of-Experts-Modellen (MoE) verwendet wird, werden verschiedene Expertennetzwerke auf verschiedenen Geräten platziert, während der Router (Gating-Netzwerk) Tokens an die entsprechenden Experten verteilt. Dies ist eine Form des Modellparallelismus, die enorme Parameterzahlen ermöglicht, ohne einen proportionalen Anstieg des Rechenaufwands, da nur eine Teilmenge der Experten pro Token aktiviert wird.
Implementierungsherausforderungen
Der Modellparallelismus bringt mehrere Herausforderungen mit sich:
- Kommunikationsaufwand: Geräte müssen Aktivierungen und Gradienten austauschen, was insbesondere bei langsamen Verbindungen zu einem Engpass werden kann.
- Lastungleichgewicht: Ungleichmäßige Schichtgrößen oder Rechenanforderungen können dazu führen, dass einige Geräte untätig sind, während andere arbeiten.
- Pipeline-Blasen: Bei der Pipeline-Parallelisierung können Geräte auf Daten aus früheren Stufen warten, was die Auslastung verringert.
- Speicherfragmentierung: Die Partitionierung von Modellen kann zu ungleichmäßigem Speicherverbrauch führen, was eine sorgfältige Platzierung und Planung erfordert.
- Fehlertoleranz: Mit vielen Geräten steigt die Wahrscheinlichkeit von Ausfällen, was Checkpointing- und Wiederherstellungsmechanismen erforderlich macht.
Vergleich mit Datenparallelismus
Beim Datenparallelismus hält jedes Gerät eine vollständige Kopie des Modells und verarbeitet ein anderes Mini-Batch von Daten. Die Gradienten werden nach jedem Schritt über alle Geräte gemittelt. Dies ist einfach und skaliert gut für Modelle, die in den Speicher eines einzelnen Geräts passen. Der Modellparallelismus hingegen ist notwendig, wenn das Modell selbst zu groß ist. Allerdings hat der Modellparallelismus oft höhere Kommunikationskosten und eine geringere Effizienz aufgrund serieller Abhängigkeiten. In der Praxis verwenden große Trainingsläufe beides: Datenparallelismus zwischen Knoten und Modellparallelismus innerhalb eines Knotens.
Arten des Modellparallelismus
Schichtweiser (Pipeline-)Parallelismus
Dies ist die einfachste Form, bei der das Modell in sequentielle Stufen aufgeteilt wird, die jeweils einem anderen Gerät zugewiesen sind. Zum Beispiel könnte ein Netzwerk mit 100 Schichten in 10 Stufen mit jeweils 10 Schichten aufgeteilt werden, wobei jede Stufe auf einer separaten GPU liegt. Beim Vorwärtsdurchlauf fließen die Daten durch Stufe 1, dann Stufe 2 und so weiter. Die größte Herausforderung ist die Lastverteilung und die Reduzierung von Pipeline-Blasen. Techniken wie GPipe und PipeDream verbessern die Auslastung durch Mikrobatching und Scheduling.
Tensorparallelismus
Beim Tensorparallelismus werden einzelne Operationen (z. B. Projektionen in Transformern) auf mehrere Geräte aufgeteilt. Jedes Gerät berechnet einen Teil der Operation, und die Ergebnisse werden über All-Reduce-Operationen kombiniert. Dieser Ansatz wird in Megatron-LM verwendet und ist effektiv, um den Speicher pro Gerät zu reduzieren und gleichzeitig eine hohe Recheneffizienz zu erhalten, erfordert jedoch eine Kommunikation mit hoher Bandbreite.
Expertenparallelismus
Der Expertenparallelismus wird in Mixture-of-Experts-Modellen (MoE) verwendet. Dabei werden verschiedene Expertennetzwerke auf verschiedenen Geräten platziert, während der Router (Gating-Netzwerk) die Tokens auf eine Teilmenge der Experten verteilt. Dies ist eine Form des Modellparallelismus, die enorme Parameterzahlen ermöglicht, ohne dass der Rechenaufwand proportional steigt, da pro Token nur ein Teil der Experten aktiviert wird.
Implementierungsherausforderungen
Der Modellparallelismus bringt mehrere Herausforderungen mit sich:
- Kommunikationsaufwand: Der Austausch von Aktivierungen und Gradienten zwischen Geräten kann, insbesondere bei langsamen Verbindungen, zum Engpass werden.
- Lastungleichgewicht: Ungleichmäßige Schichtgrößen oder Rechenanforderungen können dazu führen, dass einige Geräte im Leerlauf sind, während andere stark ausgelastet sind.
- Pipeline-Blasen: Geräte können auf Daten aus vorherigen Stufen warten, was die Auslastung verringert.
- Speicherfragmentierung: Die Partitionierung kann zu ungleichmäßiger Speichernutzung führen, was eine sorgfältige Platzierung und Planung erfordert.
- Fehlertoleranz: Mit vielen Geräten steigt die Wahrscheinlichkeit von Ausfällen, was Checkpointing- und Wiederherstellungsmechanismen erforderlich macht.
Vergleich mit Datenparallelismus
Beim Datenparallelismus hält jedes Gerät eine vollständige Kopie des Modells und verarbeitet ein anderes Mini-Batch von Daten. Die Gradienten werden nach jedem Schritt über alle Geräte gemittelt. Dieser Ansatz ist einfach und skaliert gut für Modelle, die in den Speicher eines einzelnen Geräts passen. Der Modellparallelismus hingegen ist notwendig, wenn das Modell selbst zu groß ist. Allerdings hat der Modellparallelismus oft höhere Kommunikationskosten und eine geringere Effizienz aufgrund serieller Abhängigkeiten. In der Praxis werden beide Ansätze kombiniert: Datenparallelismus zwischen Knoten und Modellparallelismus innerhalb eines Knotens.
Anwendungen
Der Modellparallelismus ist entscheidend für das Training großer Sprachmodelle wie GPT-4, PaLM und LLaMA sowie für deren Bereitstellung in der Produktion. Unternehmen wie OpenAI, Google (über Google Cloud) und Anthropic verlassen sich auf Modellparallelismus, um ihre Modelle zu trainieren und einzusetzen. Er wird auch in anderen Bereichen eingesetzt, etwa in der Computervision (z. B. 3D-CNNs) und im wissenschaftlichen Rechnen, wenn Modelle zu groß für ein einzelnes Beschleuniger-System sind.
Softwareunterstützung
Mehrere Frameworks bieten integrierte Unterstützung für Modellparallelismus:
- PyTorch: Bietet
torch.distributedmit Pipeline-Parallelismus (z. B.torch.distributed.pipeline.sync.Pipe) und Tensor-Parallelismus übertensor_parallel-Bibliotheken. - TensorFlow: Bietet
tf.distributemit Strategien wieTPUStrategyundMultiWorkerMirroredStrategy, die Modellparallelismus integrieren können. - Megatron-LM: Eine spezialisierte Bibliothek für Tensor- und Pipeline-Parallelismus.
- DeepSpeed: Von Microsoft, bietet den Zero Redundancy Optimizer (ZeRO), der Optimizer-Zustände, Gradienten und Parameter partitioniert - eine Form des Modellparallelismus.
Hardware-Überlegungen
Der Modellparallelismus hängt stark von der Kommunikationsbandbreite zwischen den Geräten ab. Innerhalb eines einzelnen Knotens bieten NVLink und PCIe schnelle Verbindungen; über Knoten hinweg werden InfiniBand oder Hochgeschwindigkeits-Ethernet verwendet. Spezialisierte Hardware wie NVIDIA-GPUs und Google TPUs umfassen oft dedizierte Hochgeschwindigkeitsverbindungen (z. B. NVSwitch, TPU-Links), um den Modellparallelismus zu erleichtern. Unternehmen wie Cerebras und SambaNova haben Systeme mit großem On-Chip-Speicher entwickelt, um den Bedarf an Modellparallelismus zu reduzieren, aber für extreme Skalen bleiben verteilte Ansätze notwendig.
Software-Unterstützung
Mehrere Frameworks bieten integrierte Unterstützung für Modellparallelismus:
- PyTorch: Bietet
torch.distributedmit Pipeline-Parallelismus (z. B.torch.distributed.pipeline.sync.Pipe) und Tensorparallelismus über Bibliotheken wietensor_parallel. - TensorFlow:
tf.distributebietet Strategien wietf.distribute.MirroredStrategyundtf.distribute.TPUStrategy, die Modellparallelismus unterstützen. - Megatron-LM: Eine Bibliothek von NVIDIA für Tensor- und Pipeline-Parallelismus.
- DeepSpeed: Von Microsoft, bietet ZeRO (Zero Redundancy Optimizer), eine Form des Modellparallelismus, die Parameter, Gradienten und Optimizer-Zustände partitioniert.
Softwareunterstützung
Mehrere Frameworks bieten integrierte Unterstützung für Modellparallelismus:
- PyTorch: Bietet
torch.distributedmit Pipeline-Parallelismus (z. B.torch.distributed.pipeline.sync.Pipe) und Tensorparallelismus über dietensor_parallel-Bibliothek. - TensorFlow: Unterstützt Modellparallelismus über
tf.distributemit Strategien wieTPUStrategyundMultiWorkerMirroredStrategy. - Megatron-LM: Eine Bibliothek von NVIDIA für Tensor- und Pipeline-Parallelismus.
- DeepSpeed: Von Microsoft, bietet ZeRO (Zero Redundancy Optimizer), eine Form des Modellparallelismus, die Optimierungszustände, Gradienten und Parameter partitioniert.
- Alpa und FlexFlow: Automatisieren die Partitionierung von Modellen über mehrere Dimensionen hinweg.
Hardware-Überlegungen
Der Modellparallelismus ist stark auf schnelle Kommunikation zwischen Geräten angewiesen. Innerhalb eines Knotens bieten NVLink und NVSwitch bei NVIDIA-GPUs hohe Bandbreiten; zwischen Knoten werden InfiniBand oder Hochgeschwindigkeits-Ethernet verwendet. Spezialisierte Hardware wie NVIDIA-GPUs und Google-TPUs unterstützen diese Kommunikationsmuster. Unternehmen wie Cerebras haben Systeme mit extrem großem On-Chip-Speicher entwickelt, um den Bedarf an Modellparallelismus zu reduzieren, aber für sehr große Modelle bleibt die verteilte Partitionierung notwendig.
Neuere Entwicklungen
Die Forschung konzentriert sich zunehmend auf die Verbesserung der Effizienz des Modellparallelismus. Techniken wie Kontextparallelismus (für lange Sequenzen) und automatische Partitionierungsalgorithmen (z. B. in Alpa oder FlexFlow) optimieren die Platzierung von Operationen über Geräte hinweg. Zudem wird modellparalleles Training durch Mischformen aus Daten-, Tensor- und Pipeline-Parallelismus immer üblicher, wie etwa beim Training des Megatron-Turing-NLG-Modells durch NVIDIA und Microsoft.
Einschränkungen und zukünftige Richtungen
Trotz seiner Leistungsfähigkeit hat der Modellparallelismus Einschränkungen. Die Kommunikation kann bei kleinen Modellen oder langsamen Verbindungen dominant werden, und die Partitionierung ist oft komplex. Zukünftige Arbeiten zielen auf bessere automatische Partitionierung, Kommunikationskompression und Hardware-Designs ab, die den Modellparallelismus effizienter machen. Mit dem Trend zu immer größeren Modellen bleibt der Modellparallelismus eine zentrale Technik für skalierbares Deep Learning.
Siehe auch
- Datenparallelismus
- Pipeline-Parallelismus
- Tensorparallelismus
- Mixture of Experts
- Verteiltes Training
- GPU-Cluster
Referenzen
- Narayanan, D., et al. (2019). PipeDream: Generalized Pipeline Parallelism for DNN Training.
- Shoeybi, M., et al. (2019). Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism.
- Rajbhandari, S., et al. (2020). ZeRO: Memory Optimizations Toward Training Trillion Parameter Models.
- Huang, Y., et al. (2019). GPipe: Efficient Training of Giant Neural Networks using Pipeline Parallelism.