Distributed Training
Verteiltes Training teilt das Modelltraining mithilfe von Daten-, Shard-, Tensor- oder Pipeline-Parallelität auf viele GPUs oder Rechner auf. Behandelt DDP, FSDP und Skalierung.
Verteiltes Training verteilt das Training eines einzelnen Modells auf mehrere Prozessoren, meist GPUs oder TPUs in einem Rechner oder über eine Cloud beziehungsweise einen lokalen Cluster. Dadurch wird das Training schneller abgeschlossen oder ein Modell lässt sich überhaupt erst trainieren, wenn es zu groß für den Speicher eines einzelnen Geräts ist. Die Geräte tauschen Gradienten, Aktivierungen oder Parameter-Shards über schnelle Verbindungen mithilfe von Kommunikationsbibliotheken wie NVIDIA NCCL aus. So werden moderne Basismodelle und große Sprachmodelle trainiert. Verteiltes Training verkürzt auch das alltägliche Training für die Objekterkennung auf Workstations mit mehreren GPUs.
So funktioniert verteiltes Training#
Datenparallelität ist die gängigste Strategie. Jede GPU enthält eine vollständige Kopie des Modells, verarbeitet ihren eigenen Teil jedes Batches aus den Trainingsdaten und beteiligt sich an einer All-Reduce-Operation, die die Gradienten mittelt, damit jede Kopie dasselbe Gradientenabstiegs-Update anwendet. PyTorchs verteilte Datenparallelität (DDP) überlappt diese Kommunikation mit dem Rückwärtsdurchlauf. Die globale Batchgröße ergibt sich aus der Batchgröße pro GPU multipliziert mit der Anzahl der GPUs. Daher muss die Lernrate üblicherweise entsprechend skaliert werden: Goyal et al. trainierten ResNet-50 auf ImageNet in einer Stunde auf 256 GPUs mit einem Batch aus 8,192 Bildern. Dabei verwendeten sie eine lineare Skalierungsregel und eine Aufwärmphase und erreichten zwischen 8 und 256 GPUs eine Skalierungseffizienz von etwa 90 %.
Shard-basierte Datenparallelität senkt den Speicherbedarf dieser Kopien. ZeRO und PyTorchs vollständig shard-basierte Datenparallelität (FSDP) verteilen Parameter, Gradienten und Optimiererzustände auf mehrere GPUs. Die vollständigen Gewichte jeder Schicht werden nur zusammengeführt, während diese Schicht berechnet wird. Dadurch sinkt der Speicherbedarf pro GPU, wenn weitere GPUs hinzukommen.
Modellparallelität teilt das neuronale Netz selbst auf. Tensorparallelität verteilt einzelne Matrixmultiplikationen auf mehrere GPUs, Pipeline-Parallelität weist aufeinanderfolgende Schichten verschiedenen GPUs zu und leitet Mini-Batches nacheinander durch sie, Kontextparallelität teilt lange Sequenzen auf, und Expertenparallelität platziert die Experten eines Modells mit Expertenmischung auf verschiedenen GPUs. Frameworks wie Megatron-LM kombinieren diese Verfahren mit Datenparallelität, um Modelle mit Hunderten Milliarden Parametern zu trainieren.
Training mit mehreren GPUs in der Praxis#
Die Kommunikation verursacht den größten Mehraufwand: Der All-Reduce-Datenverkehr wächst mit der Modellgröße. Deshalb skalieren GPUs, die innerhalb eines Knotens über NVLink verbunden sind, besser als Knoten, die über langsamere Netzwerke verbunden sind. Statistiken für die Batchnormalisierung werden pro GPU berechnet, sofern die Schichten nicht in synchronisierte Batchnormalisierung umgewandelt werden. Das ist wichtig, wenn der Teil des Batches pro GPU klein ist. Ultralytics YOLO26 führt das Training mit mehreren GPUs über DDP aus: Werden mehrere Geräte-IDs übergeben, wird pro GPU ein Prozess gestartet, der torch.distributed.run verwendet. Unter CUDA kommt das NCCL-Backend zum Einsatz, und der Wert batch wird gleichmäßig auf die GPUs verteilt.
from ultralytics import YOLO
# Ein vortrainiertes YOLO26-Modell laden
model = YOLO("yolo26n.pt")
# Mit DDP auf GPUs 0 und 1 trainieren; bei batch=32 verarbeitet jede GPU 16 Bilder pro Schritt
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, batch=32, device=[0, 1])Anwendungen in der Praxis#
- Große Sprachmodelle: Meta trainierte Llama 3 405B auf bis zu 16K H100-GPUs und kombinierte dabei Tensor-, Pipeline-, Kontext- und Datenparallelität zu einer von den Autoren als 4D-Parallelität bezeichneten Methode.
- Autonome Fahrzeuge: Wahrnehmungsteams trainieren Erkennungs- und Segmentierungsmodelle mit umfangreichen Archiven von Kamera-, Lidar- und Radaraufnahmen aus Fahrzeugflotten. Dafür sind große GPU-Cluster erforderlich.
- Medizinische Bildanalyse: Hochauflösende 3D-CT- und MRT-Volumen überlasten den Speicher einer einzelnen GPU. Werden Batches oder Modell-Shards auf mehrere GPUs verteilt, lassen sich größere Volumen und Modelle trainieren.
Verteiltes Training und verwandte Konzepte#
- Föderiertes Lernen: Auch beim föderierten Lernen wird auf vielen Geräten trainiert. Aus Datenschutzgründen verbleiben die Daten jedoch auf Smartphones, in Krankenhäusern oder bei anderen Clients. Nur Modell-Updates werden an einen zentralen Server übertragen. Beim verteilten Training werden die Daten in einem Cluster zusammengeführt, um die Geschwindigkeit zu maximieren.
- Geteiltes Lernen: Beim geteilten Lernen wird ein Modell zwischen Client und Server aufgeteilt, sodass die Rohdaten den Client nie verlassen. Dafür nimmt man zusätzliche Kommunikation in Kauf.
- Gradientenakkumulation: Bei der Gradientenakkumulation werden die Gradienten mehrerer kleiner Batches vor einem einzelnen Update summiert. So lässt sich die Berechnung eines großen Batches auf einer GPU nachbilden, allerdings auf Kosten der Zeit. Bei Datenparallelität werden diese Batches gleichzeitig auf mehreren GPUs berechnet.










