Verteiltes Training mit Containern

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 und parameterServerConfig.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 von masterConfig.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.

Weitere Informationen

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...