Trainingsjob ausführen

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

Vorbereitung

Bevor Sie einen Trainingsjob senden können, müssen Sie ein Anwendungspaket erstellen und dieses zusammen mit allen speziellen Abhängigkeiten in einen Cloud Storage-Bucket hochladen. Anmerkung: Wenn Sie das gcloud-Befehlszeilentool zum Senden des Jobs verwenden, 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 mit dem gcloud-Befehlszeilentool senden, können Sie:

  • Geben Sie die gebräuchlichsten Trainingsparameter als Flags des gcloud ai-platform jobs submit training-Befehls 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 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 (nur Groß- und Kleinbuchstaben, Zahlen und Unterstriche, beginnend mit einem Buchstaben).
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 Rechner explizit angeben.
Trainingsanwendungspaket (packageUris)
Eine Trainingsanwendung, die in Form eines Pakets an einem Cloud Storage-Speicherort zur Verfügung gestellt wurde. Wenn Sie das gcloud-Befehlszeilentool verwenden, ist die Erstellung 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. Sehen Sie sich die verfügbaren Regionen für AI Platform-Dienste an.
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 Platform-Projekt muss Schreibzugriff auf diesen Bucket haben. Der Trainigsdienst übergibt dann den Pfad des angegebenen Jobverzeichnisses automatisch als Befehlszeilenargument 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-Version, die für den Job verwendet werden soll. Wenn Sie keine Laufzeitversion angeben, verwendet der Trainingsdienst die Standardlaufzeitversion 1.0 von AI Platform.

Python-Version (pythonVersion)

Die Python-Version, die für den Job verwendet werden soll. Python 3.5 steht ab AI Platform-Laufzeitversion 1.4 zur Verfügung. Wenn Sie keine Python-Version angeben, verwendet der Trainingsdienst Python 2.7.

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 folgenden beiden Möglichkeiten:

  • Mit Befehlszeilen-Flags.
  • In einer YAML-Datei, die die Ressource Job darstellt. Dieser Datei können Sie einen beliebigen Namen geben. Konventionsgemäß erhält die Datei aber den Namen 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 in der Anleitung zum Starten eines Trainingsjobs.

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, vorausgesetzt, Sie geben beim Senden des Jobs alle erforderlichen Details als Befehlszeilen-Flags an.

trainingInput:
  scaleTier: CUSTOM
  masterType: complex_model_m
  workerType: complex_model_m
  parameterServerType: large_model
  workerCount: 9
  parameterServerCount: 3
  runtimeVersion: '1.13'
  pythonVersion: '3.5'

Im Beispiel oben ist die Python-Version 3.5 angegeben, die in der AI Platform ab Laufzeitversion 1.4 verfügbar ist.

Python

Wenn Sie einen Trainingsjob mit der Google APIs-Clientbibliothek für Python senden, geben Sie die Konfiguration in einem Wörterbuch mit derselben Struktur wie die Ressource Job an. Das Wörterbuch umfasst dann zwei Schlüssel: jobId und trainingInput, wobei die jeweiligen Daten der Name für den Job 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': '1.13',
    'pythonVersion': '3.5'}

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

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

Im Beispiel oben ist die Python-Version 3.5 angegeben, die in der AI Platform ab Laufzeitversion 1.4 verfügbar ist.

Job senden

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

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

Job erstellen:

gcloud

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

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:

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

Die folgende Jobübermittlung entspricht der Konfiguration im 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 $TRAINER_PACKAGE_PATH \
        --module-name $MAIN_TRAINER_MODULE \
        --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 $TRAINER_PACKAGE_PATH \
        --module-name $MAIN_TRAINER_MODULE \
        --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 mit dem 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.
  • AI Platform-spezifische Flags, wie --module-name, --runtime-version und --job-dir, müssen vor dem leeren Flag -- stehen. Der AI Platform-Dienst interpretiert diese Flags.
  • Das Flag --job-dir muss, falls es angegeben wird, vor dem leeren Flag -- stehen, weil AI Platform --job-dir verwendet, um den Pfad zu validieren.
  • Wenn das Flag --job-dir angegeben wird, muss es auch von der Anwendung verarbeitet werden. Obwohl das Flag -- vor dem leeren Flag --job-dir steht, wird es ebenfalls als Befehlszeilen-Flag an die Anwendung übergeben.
  • Sie können beliebig viele USER_ARGS definieren. AI Platform übergibt --user_first_arg, --user_second_arg usw. an Ihre Anwendung.

Python

Sie können die Google APIs-Clientbibliothek für Python verwenden, um die AI Platform API für Training und Vorhersagen aufzurufen, ohne manuell HTTP-Anfragen zu erstellen. 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-Dienste ab:

    cloudml = discovery.build('ml', 'v1')
    
  3. Erstellen Sie die Anfrage und senden Sie sie:

    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())
    

Weitere Informationen

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

Feedback geben zu...

AI Platform für TensorFlow