Verteiltes Training nutzt verteilte ML-Techniken, um das Modelltraining auf verschiedene Geräte zu verteilen. Diese Technik wird beispielsweise häufig bei großen neuronalen Netzen eingesetzt. Wenn entweder das Netzwerk, der Trainingsdatensatz oder beides für einen einzelnen Prozessor zu umfangreich ist, wird die Workload beim verteilten Training auf mehrere Server, GPUs oder Maschinen verteilt.
Der stochastische Gradientenabstieg (Stochastic Gradient Descent, SGD) ist ein Lernalgorithmus, der den Datensatz in Mini-Batches aufteilt und nach jedem Batch den Gradienten der Verlustfunktion berechnet. Die Verwendung von Mini-Batches anstelle des vollständigen Datensatzes erhöht die Effizienz des Trainings.
Die Verlustfunktion misst den Fehler in den Vorhersagen des Modells, und das Ziel von SGD ist es, den Gradienten zu senken, um den Wert der Funktion zu minimieren. Wie beim herkömmlichen Modelltraining gilt der Trainingsprozess als abgeschlossen, wenn das Modell Konvergenz erreicht hat: wenn der SGD-Algorithmus den Wert der Funktion erfolgreich minimiert hat.
Knoten verarbeiten Mini-Batches parallel, was möglich ist, da jeder Batch innerhalb jeder Iteration unabhängig von den anderen verarbeitet wird. Jeder Knoten berechnet seinen Gradienten und überträgt dann den aktualisierten Gradientenwert an die anderen Knoten im Netzwerk. Die anderen Worker-Knoten implementieren die Aktualisierungen, die sie erhalten, in ihre eigenen Modelle und tragen so dazu bei, dass alle Kopien des Modells während des gesamten Trainingsprozesses identisch bleiben.
Die AllReduce-Funktion ist eine kollektive Kommunikationsoperation, die es jedem Knoten ermöglicht, seine Ergebnisse zu teilen und die aggregierten Ergebnisse über das Netz zu verbreiten. AllReduce ermöglicht es allen Knoten, Aktualisierungen der Modellparameter zu synchronisieren und die Konsistenz aufrechtzuerhalten. AllReduce, das lange Zeit im High-Performance-Rechnen verwendet wurde, wurde in ML-Frameworks wie Horovod populär.
SGD kann synchron oder asynchron ausgeführt werden. Synchrones SGD aktualisiert alle Knoten gleichzeitig, wodurch die Konsistenz auf Kosten möglicher Verzögerungen gewahrt bleibt, wenn einige Knoten zurückbleiben. Asynchrones SGD aktualisiert Parameter, sobald ein Update bereit ist, aber einige Knoten erhalten möglicherweise Updates, die nicht die aktuellsten Werte enthalten.
Durch die Reduzierung der pro Gerät benötigten Rechenressourcen kann das verteilte Training die Trainingszeiten beschleunigen. Da es so rechenintensiv ist, ist das Training ein wichtiger Anwendungsfall für verteiltes ML.