Auf dieser Seite wird erläutert, wie benutzerdefinierte Container die Struktur des verteilten Trainings in AI Platform unterstützen.
Mit benutzerdefinierten Containern können Sie ein verteiltes Training mit jedem ML-Framework ausführen, das eine Verteilung unterstützt. Die hier verwendete Terminologie beruht auf dem verteilten Modell von TensorFlow. Sie können aber auch ein beliebiges anderes ML-Framework mit einer ähnlichen Verteilungsstruktur nutzen. Bei verteilten Trainings in MXNet werden beispielsweise ein Planer sowie Worker und Server verwendet. Dies entspricht der Struktur für verteiltes Training der benutzerdefinierten AI Platform-Container, das einen Master, Worker und auch Parameterserver nutzt.
Struktur des Trainingsclusters
Wenn Sie einen verteilten Trainingsjob mit AI Platform ausführen, geben Sie mehrere Maschinen (Knoten) in einem Trainingscluster an. Der Trainingsdienst weist die Ressourcen für die von Ihnen angegebenen Maschinentypen zu. Der aktuell auf einem Knoten ausgeführte Job wird als Replikat bezeichnet. Gemäß dem verteilten TensorFlow-Modell wird jedem Replikat im Trainingscluster eine einzige Rolle oder Aufgabe im verteilten Training zugewiesen:
Master: Es wird genau ein Replikat als Master festgelegt. Es verwaltet die anderen Replikate und meldet den Gesamtstatus des Jobs.
Worker: Es können ein oder mehrere Replikate als Worker festgelegt werden. Diese Replikate übernehmen jeweils einen Teil der Arbeit, wie Sie dies in der Jobkonfiguration festgelegt haben.
Parameterserver: Es können ein oder mehrere Replikate als Parameterserver festgelegt werden. Diese Replikate speichern Modellparameter und koordinieren den gemeinsamen Modellstatus unter den Workern.
API-Zuordnung
Die drei verschiedenen Rollen, die Sie Maschinen in Ihrem Trainingscluster zuweisen können, entsprechen drei Feldern, die Sie in TrainingInput
angeben können. Dies sind die Eingabeparameter für einen Trainingsjob:
masterConfig.imageUri
stellt den Container-Image-URI dar, der auf dem Master ausgeführt werden soll.workerConfig.imageUri
undparameterServerConfig.imageUri
stellen der Container-Image-URI dar, der auf Workern bzw. Parameterservern ausgeführt werden soll. Wenn für diese Felder kein Wert festgelegt ist, verwendet AI Platform den Wert vonmasterConfig.imageUri
.
Sie können die Werte für jedes Feld auch mit den entsprechenden Flags in gcloud ai-platform jobs submit training
festlegen:
- Verwenden Sie für die Master-Konfiguration
--master-image-uri
. - Verwenden Sie für die Worker-Konfiguration
--worker-image-uri
. - Verwenden Sie für die Konfiguration des Parameterservers
--parameter-server-image-uri
.
Informationen dazu erhalten Sie im Beispiel zum Senden eines verteilten Trainingsjobs mit benutzerdefinierten Containern.
Informationen zu CLUSTER_SPEC
AI Platform fügt für jedes Replikat Daten in eine CLUSTER_SPEC
-Umgebungsvariable ein, die beschreiben, wie der allgemeine Cluster eingerichtet ist. Wie TF_CONFIG
von TensorFlow beschreibt CLUSTER_SPEC
jedes Replikat im Cluster, einschließlich Index und Rolle (Master, Worker oder Parameterserver).
Wenn Sie ein verteiltes Training mit TensorFlow ausführen, wird TF_CONFIG
für das Erstellen von tf.train.ClusterSpec
geparst.
Ähnliches gilt für die Ausführung des verteilten Trainings mit anderen ML-Frameworks. CLUSTER_SPEC
muss geparst werden, um Umgebungsvariablen oder Einstellungen festzulegen, die für das Framework erforderlich sind.
Format von CLUSTER_SPEC
Die Umgebungsvariable CLUSTER_SPEC
ist ein JSON-String mit dem folgenden Format:
Schlüssel | Beschreibung | |
---|---|---|
"cluster"
|
Die Clusterbeschreibung für den benutzerdefinierten Container. Wie bei TF_CONFIG wird dieses Objekt als TensorFlow-Clusterspezifikation formatiert und kann an den Konstruktor von tf.train.ClusterSpec übergeben werden. | |
"task"
|
Beschreibt die Aufgabe des jeweiligen Knotens, auf dem der Code ausgeführt wird. Sie können diese Informationen verwenden, um Code für bestimmte Worker in einem verteilten Job zu schreiben. Dieser Eintrag ist ein Wörterbuch mit folgenden Schlüsseln: | |
"type"
|
Die Art der Aufgabe, die von diesem Knoten ausgeführt wird. Mögliche Werte sind master , worker und ps .
| |
"index"
|
Der nullbasierte Index der Aufgabe. Die meisten verteilten Trainingsjobs haben eine einzige Masteraufgabe, einen oder mehrere Parameterserver und einen oder mehrere Worker. | |
"trial"
|
Die Kennzeichnung des aktuell ausgeführten Hyperparameter-Abstimmungstests. Wenn Sie die Hyperparameter-Abstimmung für Ihren Job konfigurieren, legen Sie eine Reihe von Tests fest, die trainiert werden sollen. Mit diesem Wert können Sie zwischen den verschiedenen Tests unterscheiden, die in Ihrem Code ausgeführt werden. Die Kennzeichnung ist ein Stringwert mit der Testnummer, beginnend mit Test 1. | |
"job"
|
Die Jobparameter, die Sie für das Initiieren des Jobs verwendet haben. In den meisten Fällen können Sie diesen Eintrag ignorieren, da er nur die über die Befehlszeilenargumente an die Anwendung übergebenen Daten repliziert. |
Kompatibilität mit TensorFlow
Verteiltes Training mit TensorFlow funktioniert mit benutzerdefinierten Containern in AI Platform genauso wie mit dem Trainingscode, der in AI Platform-Laufzeitversionen ausgeführt wird. In beiden Fällen fügt AI Platform die WerteTF_CONFIG
für Sie ein. Wenn Sie das verteilte Training mit TensorFlow mithilfe von benutzerdefinierten Containern ausführen, legt AI Platform Werte sowohl für TF_CONFIG
als auch für CLUSTER_SPEC
für Sie fest.
Wenn Sie die TensorFlow Estimator API verwenden, parst TensorFlow TF_CONFIG
für die automatische Erstellung der Clusterspezifikation. Wenn Sie die Core API verwenden, müssen Sie die Clusterspezifikation aus TF_CONFIG
in Ihrer Trainingsanwendung erstellen.
Weitere Informationen und Beispiele finden Sie unter TF_CONFIG
für verteiltes Training in AT Platform verwenden.