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 verteiltes Training mit jedem ML-Framework durchführen, das eine Verteilung unterstützt. Die hier verwendete Terminologie beruht zwar auf dem verteilten Modell von TensorFlow, Sie können aber auch ein beliebiges anderes ML-Framework verwenden, das eine ähnliche Verteilungsstruktur besitzt. 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, die einen Master, Worker und auch Parameterserver verwenden.

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: Ein oder mehrere Replikate können als Worker festgelegt werden. Diese Replikate übernehmen jeweils einen Teil der Arbeit, wie Sie dies in der Jobkonfiguration festgelegt haben.

  • Parameterserver: Ein oder mehrere Replikate können 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. Dabei handelt es sich um die Eingabeparameter für einen Trainingsjob:

  • masterConfig.imageUri stellt den URI des Container-Images dar, das auf dem Master ausgeführt werden soll.
  • workerConfig.imageUri und parameterServerConfig.imageUri stellen die URIs der Container-Images dar, die auf dem oder den Workern bzw. Parameterservern ausgeführt werden sollen. Wenn für diese Felder kein Wert festgelegt ist, verwendet AI Platform den Wert von masterConfig.imageUri.

Ebenfalls können Sie die Werte für jedes dieser Felder mit den entsprechenden Flags in gcloud beta ai-platform jobs submit training festlegen:

  • Für die Master-Konfiguration verwenden Sie --master-image-uri.
  • Für die Worker-Konfiguration verwenden Sie --worker-image-uri.
  • Für die Parameterserver-Konfiguration verwenden Sie --parameter-server-image-uri.

Ein Beispiel zum Senden eines verteilten Trainingsjobs mit benutzerdefinierten Containern finden Sie hier.

Informationen zu CLUSTER_SPEC

AI Platform stellt eine CLUSTER_SPEC-Umgebungsvariable für jedes Replikat, um zu beschreiben, wie das allgemeine Cluster eingerichtet ist. Wie TF_CONFIG bei TensorFlow beschreibt CLUSTER_SPEC jedes Replikat im Cluster, einschließlich seines Index und seiner Rolle (Master, Worker oder Parameterserver).

Wenn Sie verteiltes Training mit TensorFlow ausführen, wird TF_CONFIG zur Erstellung 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 auszufüllen 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 ist 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 Ihr Code läuft. 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 gerade 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, der die Testnummer enthält, beginnend mit Test 1.
"job" Die Jobparameter, die Sie beim Initiieren des Jobs verwendet haben. In den meisten Fällen können Sie diesen Eintrag ignorieren, da er die über die Befehlszeilenargumente an die Anwendung übermittelten Daten repliziert.

Kompatibilität mit TensorFlow

Verteiltes Training mit TensorFlow funktioniert mit benutzerdefinierten Containern in AI Platform genauso wie mit Ihrem Trainingscode, der in AI Platform-Laufzeitversionen ausgeführt wird. In beiden Fällen legt AI Platform TF_CONFIG für Sie fest. Wenn Sie das verteilte Training mit TensorFlow mithilfe von benutzerdefinierten Containern ausführen, legt AI Platform sowohl TF_CONFIG als auch CLUSTER_SPEC für Sie fest.

Wenn Sie die TensorFlow Estimator API verwenden, parst TensorFlow TF_CONFIG, um die Clusterspezifikation automatisch zu erstellen. Wenn Sie die Core API verwenden, müssen Sie die Clusterspezifikation aus TF_CONFIG in Ihrer Trainingsanwendung erstellen.

Weitere Details und Beispiele zur Verwendung von TF_CONFIG für verteiltes Training auf AI Platform.

Weitere Informationen

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

Feedback geben zu...