Trainingsjob ausführen

AI Platform Training bietet Modelltraining als asynchronen Batchdienst. Auf dieser Seite wird beschrieben, wie Sie einen Trainingsjob konfigurieren und senden. Dazu führen Sie gcloud ai-platform jobs submit training über die Befehlszeile aus oder senden eine Anfrage an die API unter projects.jobs.create.

Hinweise

Bevor Sie einen Trainingsjob senden können, müssen Sie ein Anwendungspaket erstellen und es zusammen mit allen speziellen Abhängigkeiten in einen Cloud Storage-Bucket hochladen. Hinweis: Wenn Sie den Job über die Google Cloud CLI senden, können Sie im selben Schritt ein Anwendungspaket erstellen und den Job senden.

Job konfigurieren

Senden Sie die Parameter an den Trainingsdienst, indem Sie die Mitglieder der Ressource Job festlegen, die die Elemente in der Ressource TrainingInput enthalten.

Wenn Sie Trainingsjobs über die Google Cloud CLI senden, haben Sie folgende Möglichkeiten:

  • Geben Sie die gebräuchlichsten Trainingsparameter als Flags des Befehls gcloud ai-platform jobs submit training an.
  • Übergeben Sie übrigen Parameter in einer YAML-Konfigurationsdatei, die üblicherweise den Namen config.yaml hat. Die Konfigurationsdatei folgt der Struktur der JSON-Darstellung der Ressource Job. Sie übergeben den Pfad Ihrer Konfigurationsdatei im Flag --config des Befehls gcloud ai-platform jobs submit training. Wenn der Pfad zu Ihrer Konfigurationsdatei also config.yaml lautet, müssen Sie --config=config.yaml festlegen.

Jobkonfigurationsdaten zusammenstellen

Mit den folgenden Parametern definieren Sie Ihren Job.

Jobname (jobId)
Der für den Job zu verwendende Name, bestehend aus Groß- und Kleinbuchstaben, Ziffern und Unterstrichen, der mit einem Buchstaben beginnt.
Clusterkonfiguration (scaleTier)
Eine Skalierungsstufe, die den Typ von Verarbeitungscluster angibt, auf dem der Job ausgeführt wird. Dabei kann es sich um die Skalierungsstufe CUSTOM handeln, bei der Sie außerdem die Anzahl und Typen der zu verwendenden Maschinen explizit angeben.
Laufwerkkonfiguration (diskConfig)
Konfiguration des Bootlaufwerks für jede Trainings-VM. Dieses Feld ist optional. Standardmäßig wird jede VM mit einem Bootlaufwerk mit 100 GB pd-ssd ausgeführt. Wenn Sie dieses Feld angeben, können zusätzliche Laufwerkgebühren anfallen.
Trainingsanwendungspaket (packageUris)
Eine Trainingsanwendung, die in Form eines Pakets an einem Cloud Storage-Speicherort zur Verfügung gestellt wurde. Wenn Sie die Google Cloud CLI verwenden, ist das Erstellen eines Anwendungspakets weitgehend automatisiert. Weitere Informationen finden Sie in der Anleitung Anwendungspaket erstellen.
Modulname (pythonModule)
Der Name des Hauptmoduls in Ihrem Paket. Das Hauptmodul ist die Python-Datei, die Sie zum Starten der Anwendung aufrufen. Wenn Sie den Job mit dem Befehl gcloud senden, geben Sie den Namen des Hauptmoduls im Flag --module-name an. Weitere Informationen finden Sie in der Anleitung Anwendungspaket erstellen.
Region (region)
Die Compute Engine-Region, in der Sie den Job ausführen möchten. Sie sollten den Trainingsjob in der Region ausführen, in der sich auch der Cloud Storage-Bucket befindet, in dem die Trainingsdaten gespeichert sind. Hier finden Sie die Regionen, in denen die Dienste von AI Platform Training verfügbar sind.
Jobverzeichnis (jobDir)
Der Pfad zum Cloud Storage-Speicherort, der für die Jobausgabe verwendet werden soll. Die meisten Trainingsanwendungen speichern im Verlauf des Trainings Prüfpunkte und speichern das trainierte Modell nach Abschluss des Jobs in eine Datei. Für das Speichern der Datei benötigen Sie einen Cloud Storage-Standort. Ihr Google Cloud-Projekt muss Schreibzugriff auf diesen Bucket haben. Der Trainingsdienst übergibt dann den Pfad des angegebenen Jobverzeichnisses automatisch als Befehlszeilenargument mit dem Namen job_dir an Ihre Trainingsanwendung. Sie können dieses Argument mit den anderen Argumenten Ihrer Anwendung parsen und in Ihrem Code verwenden. Ein Jobverzeichnis bietet den Vorteil, dass der Trainingsdienst das Verzeichnis vor dem Start Ihrer Anwendung validiert.
Laufzeitversion (runtimeVersion)
Die AI Platform Training-Laufzeitversion, die für den Job verwendet werden soll.
Python-Version (pythonVersion)
Die Python-Version, die für den Job verwendet werden soll. Python 3.5 ist in den Laufzeitversionen 1.13 bis 1.14 verfügbar. Python 3.7 ist in der Laufzeitversion 1.15 und höher verfügbar.
Maximale Wartezeit (scheduling.maxWaitTime)
Maximale Wartezeit in Sekunden mit dem Suffix s (z. B. 3600s), der festlegt, wie lange Ihr Job in den Status QUEUED und PREPARING bleibt. AI Platform Training startet Ihren Job nicht immer sofort, da Ressourcenbeschränkungen auftreten. Geben Sie dieses Feld an, wenn Sie nicht so lange warten möchten, bis die Ausführung des Jobs abgeschlossen ist. Die begrenzte Dauer beginnt, wenn Sie den Job erstellen. Wenn der Job bis zum Ende dieses Zeitraums noch nicht den Status RUNNING hat, bricht AI Platform Training den Job ab. Dieses Feld ist optional und hat standardmäßig kein Limit. Wenn Sie dieses Feld angeben, müssen Sie für den Wert mindestens auf 1800s (30 Minuten) festlegen.
Maximale Laufzeit (scheduling.maxRunningTime)
Maximale Dauer in Sekunden mit dem Suffix s (z. B. 7200s) für Ihren Trainingsjob. Die begrenzte Dauer beginnt, wenn der Job in den Status RUNNING wechselt. Wenn der Job nach Ablauf dieser Zeit noch ausgeführt wird, bricht AI Platform Training den Job ab. Dieses Feld ist optional und standardmäßig auf sieben Tage eingestellt (604800s).
serviceAccountDienstkonto
Die E-Mail-Adresse eines Dienstkontos, das AI Platform Training beim Ausführen Ihrer Trainingsanwendung verwenden soll. Dadurch kann Ihre Trainingsanwendung auf Google Cloud-Ressourcen zugreifen, ohne direkten Zugriff auf das von Google verwaltete AI Platform-Dienstkonto Ihres Projekts zu gewähren. Dieses Feld ist optional. Weitere Informationen finden Sie unter Anforderungen an benutzerdefinierte Dienstkonten.

Konfigurationsparameter formatieren

Wie Sie die Konfigurationsdetails angeben, hängt davon ab, wie der Trainingsjob gestartet wird:

gcloud

Geben Sie im Befehl gcloud ai-platform jobs submit training die Jobkonfigurationsdetails an. Dafür haben Sie die beiden folgenden Möglichkeiten:

  • Mit Befehlszeilen-Flags.
  • In einer YAML-Datei, die die Ressource Job darstellt. Dieser Datei können Sie einen beliebigen Namen geben. Der Name lautet üblicherweise config.yaml.

Selbst wenn Sie eine YAML-Datei verwenden, müssen bestimmte Angaben als Befehlszeilen-Flags bereitgestellt werden. Beispielsweise müssen Sie das Flag --module-name und entweder --package-path oder --packages angeben. Wenn Sie --package-path verwenden, müssen Sie auch --job-dir oder --staging-bucket anfügen. Außerdem müssen Sie entweder das Flag --region angeben oder eine Standardregion für den gcloud-Client festlegen. Diese Optionen – und alle anderen, die Sie als Befehlszeilen-Flags angeben – überschreiben die Werte für diese Optionen in der Konfigurationsdatei.

Beispiel 1: In diesem Beispiel wählen Sie einen vorkonfigurierten Maschinencluster aus und geben beim Senden des Jobs alle erforderlichen Details als Befehlszeilen-Flags an. Es ist keine Konfiguration notwendig. Weitere Informationen finden Sie im nächsten Abschnitt Job senden.

Beispiel 2: Im folgenden Beispiel wird der Inhalt der Konfigurationsdatei für einen Job mit einem benutzerdefinierten Verarbeitungscluster gezeigt. Die Konfigurationsdatei enthält einige, aber nicht alle Konfigurationsdetails und setzt voraus, dass Sie beim Senden des Jobs alle erforderlichen Details als Befehlszeilen-Flags angeben.

trainingInput:
  scaleTier: CUSTOM
  masterType: complex_model_m
  workerType: complex_model_m
  parameterServerType: large_model
  workerCount: 9
  parameterServerCount: 3
  runtimeVersion: '2.11'
  pythonVersion: '3.7'
  scheduling:
    maxWaitTime: 3600s
    maxRunningTime: 7200s

Im vorherigen Beispiel ist die Python-Version 3.7 angegeben, die in AI Platform Training ab Laufzeitversion 1.15 verfügbar ist. Es werden auch virtuelle Maschinen für Worker und Parameterserver konfiguriert. Konfigurieren Sie diese Maschinen nur, wenn Sie verteiltes Training mit TensorFlow oder benutzerdefinierten Containern durchführen. Weitere Informationen finden Sie unter Maschinentypen.

Python

Wenn Sie einen Trainingsjob mit der Google API-Clientbibliothek für Python senden, geben Sie die Konfiguration in einem Wörterbuch an, das dieselbe Struktur wie die Ressource Job hat. Das Wörterbuch umfasst dann zwei Schlüssel: jobId und trainingInput, wobei die jeweiligen Daten der Name des Jobs und ein zweites Wörterbuch mit Schlüsseln für die Objekte in der Ressource TrainingInput sind.

Das folgende Beispiel zeigt, wie Sie eine Darstellung von "Job" für einen Job mit einem benutzerdefinierten Verarbeitungscluster erstellen.

training_inputs = {
    'scaleTier': 'CUSTOM',
    'masterType': 'complex_model_m',
    'workerType': 'complex_model_m',
    'parameterServerType': 'large_model',
    'workerCount': 9,
    'parameterServerCount': 3,
    'packageUris': ['gs://my/trainer/path/package-0.0.0.tar.gz'],
    'pythonModule': 'trainer.task',
    'args': ['--arg1', 'value1', '--arg2', 'value2'],
    'region': 'us-central1',
    'jobDir': 'gs://my/training/job/directory',
    'runtimeVersion': '2.11',
    'pythonVersion': '3.7',
    'scheduling': {'maxWaitTime': '3600s', 'maxRunningTime': '7200s'},
}

job_spec = {'jobId': 'my_job_name', 'trainingInput': training_inputs}

training_inputs und job_spec sind willkürliche Kennzeichnungen. Sie können diesen Wörterbüchern beliebige Namen geben. Allerdings müssen die Wörterbuchschlüssel genauso wie oben gezeigt benannt werden, da sie den Namen in den Ressourcen Job und TrainingInput entsprechen müssen.

Im vorherigen Beispiel ist die Python-Version 3.7 angegeben, die in AI Platform Training ab Laufzeitversion 1.15 verfügbar ist. Es werden auch virtuelle Maschinen für Worker und Parameterserver konfiguriert. Konfigurieren Sie diese Maschinen nur, wenn Sie verteiltes Training mit TensorFlow oder benutzerdefinierten Containern durchführen. Weitere Informationen finden Sie unter Maschinentypen.

Job senden

Vor dem Senden eines Trainingsjobs geben Sie zwei Gruppen von Flags an:

  • Parameter für die Jobkonfiguration. AI Platform Training benötigt diese Werte, um Ressourcen in der Cloud einzurichten und Ihre Anwendung auf jedem Knoten im Verarbeitungscluster bereitzustellen.
  • Nutzerargumente oder Anwendungsparameter. AI Platform Training übergibt den Wert dieser Flags an die Anwendung.

Job erstellen:

gcloud

Senden Sie einen Trainingsjob mithilfe des Befehls gcloud ai-platform jobs submit training.

Zuerst einmal ist es sinnvoll, einige Umgebungsvariablen zu definieren, in denen die Konfigurationsdetails enthalten sind. Beim folgenden Code werden zum Erstellen des Jobnamens das Datum und die Uhrzeit an den Modellnamen angehängt:

PACKAGE_PATH="/path/to/your/application/sources"
now=$(date +"%Y%m%d_%H%M%S")
JOB_NAME="your_name_$now"
MODULE_NAME="trainer.task"
JOB_DIR="gs://your/chosen/job/output/path"
REGION="us-east1"
RUNTIME_VERSION="2.11"

Die folgende Jobübermittlung entspricht der Konfiguration in Beispiel 1 oben. Dort wählen Sie eine vorkonfigurierte Skalierungsstufe (basic) aus und stellen alle Konfigurationsdetails über Befehlszeilen-Flags bereit. Die Datei config.yaml wird nicht benötigt:

gcloud ai-platform jobs submit training $JOB_NAME \
        --scale-tier basic \
        --package-path $PACKAGE_PATH \
        --module-name $MODULE_NAME \
        --job-dir $JOB_DIR \
        --region $REGION \
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value

Die folgende Jobübermittlung entspricht der Konfiguration in Beispiel 2 oben. Dabei befindet sich nur ein Teil der Konfiguration in der Datei und Sie stellen die anderen Details über Befehlszeilen-Flags bereit.

gcloud ai-platform jobs submit training $JOB_NAME \
        --package-path $PACKAGE_PATH \
        --module-name $MODULE_NAME \
        --job-dir $JOB_DIR \
        --region $REGION \
        --config config.yaml \
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value

Hinweise:

  • Wenn Sie eine Option sowohl in der Konfigurationsdatei (config.yaml) als auch als Befehlszeilen-Flag angeben, wird der Wert in der Konfigurationsdatei durch den Wert in der Befehlszeile überschrieben.
  • Das leere Flag -- markiert das Ende der gcloud-spezifischen Flags und den Anfang der USER_ARGS, die Sie an die Anwendung übergeben möchten.
  • Spezifische Flags von AI Platform Training, wie --module-name, --runtime-version und --job-dir, müssen vor dem leeren Flag -- stehen. Der AI Platform Training-Dienst interpretiert diese Flags.
  • Das Flag --job-dir muss, falls es angegeben wird, vor dem leeren Flag -- stehen, weil AI Platform Training --job-dir verwendet, um den Pfad zu validieren.
  • Wenn das Flag --job-dir angegeben wird, muss es auch von der Anwendung verarbeitet werden. Das Flag --job-dir steht zwar vor dem leeren Flag --, es wird aber trotzdem als Befehlszeilen-Flag an die Anwendung übergeben.
  • Sie können beliebig viele USER_ARGS definieren. AI Platform Training übergibt --user_first_arg, --user_second_arg usw. an Ihre Anwendung.

Python

Mit der Google API-Clientbibliothek für Java können Sie die AI Platform Training and Prediction API aufrufen, ohne manuell HTTP-Anfragen erstellen zu müssen. Bevor Sie das folgende Codebeispiel ausführen, müssen Sie die Authentifizierung einrichten.

  1. Speichern Sie die Projekt-ID in dem von den APIs benötigten Format ('projects/_projectname'):

    project_name = 'my_project_name'
    project_id = 'projects/{}'.format(project_name)
    
  2. Rufen Sie eine Python-Darstellung der AI Platform Training-Dienste ab:

    cloudml = discovery.build('ml', 'v1')
    
  3. Erstellen und senden Sie die Anfrage. Beachten Sie, dass job_spec im vorherigen Schritt erstellt wurde, in dem Sie die Konfigurationsparameter formatiert haben.

    request = cloudml.projects().jobs().create(body=job_spec,
                  parent=project_id)
    response = request.execute()
    
  4. Fangen Sie etwaige HTTP-Fehler ab. Die einfachste Möglichkeit besteht darin, den vorherigen Befehl in einen try-Block zu setzen:

    try:
        response = request.execute()
        # You can put your code for handling success (if any) here.
    
    except errors.HttpError, err:
        # Do whatever error response is appropriate for your application.
        # For this example, just send some text to the logs.
        # You need to import logging for this to work.
        logging.error('There was an error creating the training job.'
                      ' Check the details:')
        logging.error(err._get_reason())
    

Nächste Schritte