Verteiltes Training mit Azure Machine Learning
Dieser Artikel informiert Sie über verteiltes Training und die Unterstützung von Deep Learning-Modellen durch Azure Machine Learning.
Beim verteilten Training wird die Arbeitsauslastung zum Trainieren eines Modells auf mehrere Miniprozessoren, die als Workerknoten bezeichnet werden, verteilt. Diese Workerknoten werden parallel ausgeführt, um das Modelltraining zu beschleunigen. Verteiltes Training kann für herkömmliche Machine Learning-Modelle verwendet werden, eignet sich jedoch besser für rechen- und zeitintensive Aufgaben, z. B. Deep Learning zum Trainieren von Deep Neural Networks.
Deep Learning und verteiltes Training
Es gibt zwei Haupttypen von verteiltem Training: Datenparallelität und Modellparallelität. Das Azure Machine Learning-SDK in Python unterstützt für verteiltes Training in Deep Learning-Modellen Integrationen in die PyTorch und TensorFlow. Beide sind beliebte Frameworks, die Datenparallelität für verteiltes Training verwenden und Horovod verwenden können, um Rechengeschwindigkeiten zu optimieren.
Verteiltes Training (PyTorch)
Verteiltes Training (TensorFlow)
Für Machine Learning-Modelle, die kein verteiltes Training erfordern, finden Sie unter Trainieren von Modellen mit Azure Machine Learning Informationen über die verschiedenen Möglichkeiten zum Trainieren von Modellen mithilfe des Python-SDK.
Datenparallelität
Datenparallelität lässt sich einfacher als der andere Ansatz für verteiltes Training implementieren und ist für die meisten Anwendungsfälle ausreichend.
Hierbei werden die Daten in Partitionen unterteilt, wobei die Anzahl der Partitionen gleich der Gesamtzahl der verfügbaren Knoten ist (im Computecluster oder beim serverlosen Computing). Das Modell wird in jeden dieser Workerknoten kopiert, und jeder Knoten arbeitet mit einer eigenen Teilmenge der Daten. Beachten Sie, dass jeder Knoten das Modell unterstützen muss, das trainiert wird. Das heißt, das gesamte Modell muss auf jeden Knoten passen.
Im folgenden Diagramm wird diese Vorgehensweise veranschaulicht.
Jeder Knoten berechnet eigenständig die Fehler (Abweichungen) zwischen den Vorhersagen für die Trainingsbeispiele und den gekennzeichneten Ausgaben. Jeder Knoten wiederum aktualisiert sein Modell basierend auf den Fehlern. Er muss alle seine Änderungen an die anderen Knoten übermitteln, damit diese ihre entsprechenden Modelle aktualisieren. Die Workerknoten müssen die Modellparameter (oder Gradienten) am Ende der Batchberechnung synchronisieren, um sicherzustellen, dass sie ein konsistentes Modell trainieren.
Modellparallelität
Bei der Modellparallelität, auch als Netzwerkparallelität bezeichnet, wird das Modell in verschiedene Teile segmentiert, die gleichzeitig auf verschiedenen Knoten ausgeführt werden können. Jeder Knoten wird für dieselben Daten ausgeführt. Die Skalierbarkeit dieser Methode hängt vom Grad der Aufgabenparallelisierung des Algorithmus ab, und sie ist schwieriger zu implementieren als Datenparallelität.
Bei Modellparallelität müssen die Workerknoten nur die freigegebenen Parameter synchronisieren, in der Regel einmal für jeden Vorwärtspropagierungs- oder Rückpropagierungsschritt. Außerdem sind größere Modelle ohne Belang, da jeder Knoten in einem Unterabschnitt des Modells mit denselben Trainingsdaten arbeitet.