Verteiltes Training mit Containern

Auf dieser Seite wird erläutert, wie benutzerdefinierte Container die Struktur des verteilten Trainings in AI Platform Training 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 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. Das entspricht der Struktur für verteiltes Training der benutzerdefinierten AI Platform Training-Container, die einen Master, Worker und auch Parameterserver verwendet.

Struktur des Trainingsclusters

Wenn Sie einen verteilten Trainingsjob mit AI Platform Training ausführen, legen Sie mehrere Maschinen (Knoten) in einem Trainingscluster fest. 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-Worker: Genau ein Replikat wird als Master-Worker (auch als Chief-Worker bezeichnet) festgelegt. Diese Aufgabe 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.

  • Evaluators: Ein oder mehrere Replikate können als Evaluators bezeichnet werden. Es ist möglich, diese Replikate zur Bewertung Ihres Modells zu verwenden. Wenn Sie TensorFlow verwenden, wird im Allgemeinen davon ausgegangen, dass Sie nicht mehr als einen Evaluator verwenden.

API-Zuordnung

Die vier verschiedenen Rollen, die Sie Maschinen in Ihrem Trainingscluster zuweisen können, entsprechen vier 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-Worker ausgeführt werden soll.
  • workerConfig.imageUri, parameterServerConfig.imageUri und evaluatorConfig.imageUri stellen die Container-Image-URIs dar, die auf Workern, Parameterservern oder Evaluators ausgeführt werden sollen. Wenn für diese Felder kein Wert festgelegt ist, verwendet AI Platform Training 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-Worker-Konfiguration --master-image-uri.
  • Verwenden Sie für die Worker-Konfiguration --worker-image-uri.
  • Für die Parameterserver-Konfiguration verwenden Sie --parameter-server-image-uri.
  • Derzeit gibt es kein Flag zur Angabe des Container-Image-URI für Evaluators. Sie können evaluatorConfig.imageUri in einer config.yaml-Konfigurationsdatei angeben.

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

Informationen zu CLUSTER_SPEC

AI Platform Training fügt für jedes Replikat Daten in eine CLUSTER_SPEC-Umgebungsvariable ein, die beschreibt, 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, Worker, Parameterserver oder Evaluator).

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 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, ps und evaluator.
"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.

Vergleich mit TF_CONFIG

AI Platform Training legt auch die Umgebungsvariable TF_CONFIG für jedes Replikat aller Trainingsjobs fest. AI Platform Training legt die Umgebungsvariable CLUSTER_SPEC nur für Replikate von benutzerdefinierten Container-Trainingsjobs fest. Die beiden Umgebungsvariablen haben einige gleiche Werte, aber unterschiedliche Formate.

Wenn Sie mit benutzerdefinierten Containern trainieren, wird das Master-Replikat in der Umgebungsvariablen TF_CONFIG standardmäßig mit dem Aufgabennamen master gekennzeichnet. Sie können ihn so konfigurieren, dass er stattdessen mit dem Aufgabennamen chief gekennzeichnet wird. Setzen Sie dafür das Feld trainingInput.useChiefInTfConfig beim Erstellen des Trainingsjobs auf true oder verwenden Sie einen oder mehrere Evaluator-Replikate in Ihrem Job. Das ist besonders hilfreich, wenn Ihr benutzerdefinierter Container TensorFlow 2 verwendet.

Neben dieser Konfigurationsoption funktioniert verteiltes Training mit TensorFlow bei benutzerdefinierten Containen genauso wie bei einer Runtime-Version von AI Platform Training. Weitere Informationen und Beispiele finden Sie unter TF_CONFIG für verteiltes Training in AI Platform Training verwenden.

Nächste Schritte