Trainingsjob ausführen

AI Platform 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.

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. Hinweis: Wenn Sie zum Senden des Jobs das gcloud-Befehlszeilentool 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, 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, mit einem Buchstaben beginnende Name, bestehend aus Groß- und Kleinbuchstaben, Ziffern und Unterstrichen.
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.
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 Trainingsdienst übergibt dann den Pfad des angegebenen Jobverzeichnisses automatisch als Befehlszeilenargument namens 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-Laufzeitversion, die für den Job verwendet werden soll. Wenn Sie keine Laufzeitversion angeben, verwendet der Trainingsdienst die Laufzeitversion 1.0. Für das Training mit scikit-learn oder XGBoost müssen Sie die Laufzeitversion 1.4 oder höher verwenden.
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. 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: '1.14'
  pythonVersion: '3.5'

Im vorherigen Beispiel ist die Python-Version 3.5 angegeben, die in AI Platform ab Laufzeitversion 1.4 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 APIs-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': '1.14',
    'pythonVersion': '3.5'}

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

Beachten Sie, dass training_inputs und job_spec willkürliche Kennzeichnungen sind. 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.5 angegeben, die in AI Platform ab Laufzeitversion 1.4 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 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.

Erstellen Sie den Job:

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:

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.14"

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 $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 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.
  • 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 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 ü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 Training and Prediction API 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())
    

Nächste Schritte

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

Feedback geben zu...