TF_CONFIG und verteiltes Training

Wenn Sie einen Trainingsjob ausführen, legt AI Platform Training für jede VM-Instanz, die Teil Ihres Jobs ist, eine Umgebungsvariable namens TF_CONFIG fest. Ihr Trainingscode, der auf jeder VM ausgeführt wird, kann mit der Umgebungsvariablen TF_CONFIG auf Details zum Trainingsjob und zur Rolle der VM zugreifen, auf der er ausgeführt wird.

TensorFlow verwendet die Umgebungsvariable TF_CONFIG, um verteiltes Training zu ermöglichen, aber Sie müssen wahrscheinlich nicht direkt in Ihrem Trainingscode darauf zugreifen. In diesem Dokument wird die Umgebungsvariable TF_CONFIG und ihre Verwendung in verteilten TensorFlow-Jobs und Hyperparameter-Abstimmungsjobs beschrieben.

Format von TF_CONFIG

AI Platform Training legt die Umgebungsvariable TF_CONFIG auf den einzelnen VMs jedes Trainingsjobs so fest, dass die Spezifikationen erfüllt werden, die TensorFlow für verteiltes Training benötigt. Bei AI Platform Training werden jedoch zusätzliche Felder in der Umgebungsvariablen TF_CONFIG festgelegt, die über die Anforderungen von TensorFlow hinausgehen.

Die Umgebungsvariable TF_CONFIG ist ein JSON-String mit dem folgenden Format:

TF_CONFIG-Felder
cluster

Die TensorFlow-Clusterbeschreibung. Ein Wörterbuch, das einen oder mehrere Aufgabennamen (chief, worker, ps oder master) Listen von Netzwerkadressen zuordnet, in denen diese Aufgaben ausgeführt werden. Für einen bestimmten Trainingsjob ist dieses Wörterbuch auf jeder VM gleich.

Dies ist ein gültiges erstes Argument für den tf.train.ClusterSpec-Konstruktor. Beachten Sie, dass dieses Wörterbuch niemals evaluator als Schlüssel enthält, da Evaluators nicht als Teil des Trainingsclusters angesehen werden, selbst wenn Sie sie für Ihren Job verwenden.

Informationen zum Unterschied zwischen chief und master finden Sie in einem anderen Abschnitt dieses Dokuments.

task

Die Aufgabenbeschreibung der VM, auf der diese Umgebungsvariable festgelegt ist. Bei einem bestimmten Trainingsjob ist dieses Wörterbuch auf jeder VM unterschiedlich. Anhand dieser Informationen können Sie anpassen, welcher Code auf jeder VM in einem verteilten Trainingsjob ausgeführt wird. Sie können damit auch das Verhalten Ihres Trainingscodes für verschiedene Versuche eines Hyperparameter-Abstimmungsjobs ändern.

Dieses Wörterbuch enthält die folgenden Schlüssel/Wert-Paare:

task-Felder
type

Die Art der Aufgabe, die diese VM ausführt. Dieser Wert wird für Worker auf worker, für Parameterserver auf ps und für Evaluators auf evaluator gesetzt. Beim Master-Worker Ihres Jobs wird der Wert entweder auf chief oder auf master gesetzt. Weitere Informationen zum Unterschied zwischen den beiden Optionen finden Sie im Abschnitt chief im Vergleich zu master in diesem Dokument.

index

Der nullbasierte Index der Aufgabe. Wenn Ihr Trainingsjob beispielsweise zwei Worker enthält, wird dieser Wert für den einen auf 0 und für den anderen auf 1 festgelegt.

trial

Die ID des Tests zur Hyperparameter-Abstimmung, der aktuell auf dieser VM ausgeführt wird. Dieses Feld wird nur festgelegt, wenn der aktuelle Trainingsjob ein Hyperparameter-Abstimmungsjob ist.

Bei Hyperparameter-Abstimmungsjobs führt AI Platform Training Ihren Trainingscode wiederholt in vielen Testläufen mit jeweils unterschiedlichen Hyperparametern aus. Dieses Feld enthält die aktuelle Testnummer, beginnend mit 1 für den ersten Test.

cloud

Eine ID, die intern von AI Platform Training verwendet wird. Dieses Feld können Sie ignorieren.

job

Die TrainingInput, die Sie zum Erstellen des aktuellen Trainingsjobs angegeben haben, dargestellt als Wörterbuch.

environment

Der String cloud.

Für benutzerdefinierte Container-Trainingsjobs legt AI Platform Training eine zusätzliche Umgebungsvariable namens CLUSTER_SPEC fest, die ein ähnliches Format wie TF_CONFIG hat, aber mit einigen wichtigen Unterschieden. Informationen zur Umgebungsvariable CLUSTER_SPEC

Beispiel

Der folgende Beispielcode gibt die Umgebungsvariable TF_CONFIG an Ihre Trainingslogs aus:

import json
import os

tf_config_str = os.environ.get('TF_CONFIG')
tf_config_dict  = json.loads(tf_config_str)

# Convert back to string just for pretty printing
print(json.dumps(tf_config_dict, indent=2))

Bei einem Hyperparameter-Abstimmungsjob, der in der Laufzeitversion 2.1 oder höher ausgeführt wird und einen Master-Worker, zwei Worker und einen Parameterserver verwendet, erstellt dieser Code während des ersten Hyperparameter-Abstimmungstests für einen der Worker das folgende Log. Die Beispielausgabe blendet das job-Feld aus Gründen der Übersichtlichkeit aus und ersetzt einige IDs durch generische Werte.

{
  "cluster": {
    "chief": [
      "cmle-training-chief-[ID_STRING_1]-0:2222"
    ],
    "ps": [
      "cmle-training-ps-[ID_STRING_1]-0:2222"
    ],
    "worker": [
      "cmle-training-worker-[ID_STRING_1]-0:2222",
      "cmle-training-worker-[ID_STRING_1]-1:2222"
    ]
  },
  "environment": "cloud",
  "job": {
    ...
  },
  "task": {
    "cloud": "[ID_STRING_2]",
    "index": 0,
    "trial": "1",
    "type": "worker"
  }
}

chief im Vergleich zu master

Die Master-Worker-VM in AI Platform Training entspricht dem chief-Aufgabentyp in TensorFlow. TensorFlow kann eine worker-Aufgabe ernennen, die als chief fungiert. Bei AI Platform Training wird jedoch immer explizit ein chief angegeben.

master ist in TensorFlow ein verworfener Aufgabentyp. master war eine Aufgabe, die eine ähnliche Rolle wie chief erfüllte, aber in einigen Konfigurationen als evaluator fungierte. TensorFlow 2 unterstützt keine TF_CONFIG-Umgebungsvariablen, die eine master-Aufgabe enthalten.

AI Platform Training verwendet chief in den Feldern cluster und task der Umgebungsvariablen TF_CONFIG, wenn einer der folgenden Punkte zutrifft:

Andernfalls verwendet AI Platform Training aus Gründen der Kompatibilität den verworfenen Aufgabentyp master anstelle von chief.

Verwendung von TF_CONFIG

Wie in einem vorherigen Abschnitt erwähnt, müssen Sie wahrscheinlich nicht direkt im Trainingscode mit der Umgebungsvariablen TF_CONFIG interagieren. Greifen Sie nur dann auf die Umgebungsvariable TF_CONFIG zu, wenn die Verteilungsstrategien von TensorFlow und der standardmäßige Hyperparameter-Abstimmungsworkflow von AI Platform Training (beides wird in den nächsten Abschnitten beschrieben) nicht für Ihren Job geeignet sind.

Verteiltes Training

AI Platform Training legt die Umgebungsvariable TF_CONFIG fest, um die Spezifikationen zu erweitern, die TensorFlow für verteiltes Training benötigt.

Verwenden Sie die tf.distribute.Strategy API, um verteiltes Training mit TensorFlow durchzuführen. Insbesondere empfehlen wir Ihnen, die Keras API zusammen mit der MultiWorkerMirroredStrategy oder, wenn Sie für den Job Parameterserver angeben, mit der ParameterServerStrategy zu verwenden. Beachten Sie jedoch, dass TensorFlow derzeit nur experimentelle Unterstützung für diese Strategien bietet.

Bei diesen Verteilungsstrategien wird die Umgebungsvariable TF_CONFIG verwendet, um jeder VM in Ihrem Trainingsjob Rollen zuzuweisen und die Kommunikation zwischen den VMs zu erleichtern. Sie müssen nicht direkt im Trainingscode auf die Umgebungsvariable TF_CONFIG zugreifen, da TensorFlow das für Sie übernimmt.

Parsen Sie die Umgebungsvariable TF_CONFIG nur dann direkt, wenn Sie anpassen möchten, wie sich die verschiedenen VMs verhalten, die Ihren Trainingsjob ausführen.

Hyperparameter-Feinabstimmung

Wenn Sie einen Hyperparameter-Abstimmungsjob ausführen, stellt AI Platform Training bei jedem Test verschiedene Argumente für den Trainingscode bereit. Der Trainingscode muss nicht unbedingt wissen, welcher Test gerade ausgeführt wird. Darüber hinaus bietet AI Platform Training Tools zum Beobachten des Fortschritts von Hyperparameter-Abstimmungsjobs.

Bei Bedarf kann Ihr Code die aktuelle Testnummer aus dem Feld trial des Felds task der Umgebungsvariablen TF_CONFIG lesen.

Nächste Schritte