Paket für eine Trainingsanwendung erstellen

Für die Ausführung Ihrer Trainingsanwendung mit AI Platform müssen Sie den Code und alle Abhängigkeiten in einen Cloud Storage-Bucket hochladen, auf den das Google Cloud Platform-Projekt Zugriff hat. Auf dieser Seite erfahren Sie, wie Sie Ihre Anwendung in der Cloud verpacken und bereitstellen.

Die besten Ergebnisse erzielen Sie, wenn Sie Ihre Trainingsanwendung lokal testen, bevor Sie sie in die Cloud hochladen. Bei Trainings mit AI Platform werden Ihrem Konto Gebühren für die verwendeten Ressourcen berechnet.

Vorbereitung

Bevor Sie Ihre Trainingsanwendung in die Cloud verschieben können, müssen Sie die folgenden Schritte ausführen:

  1. Konfigurieren Sie die Entwicklungsumgebung wie unter Erste Schritte erläutert.
  2. Befolgen Sie die Anleitung zum Einrichten eines Cloud Storage-Buckets, in dem Sie die Daten und Dateien Ihrer Trainingsanwendung speichern können.

  3. Machen Sie sich mit allen Python-Bibliotheken vertraut, auf die Ihre Trainingsanwendung angewiesen ist, ganz gleich, ob es sich um benutzerdefinierte Pakete handelt oder diese frei über PyPI verfügbar sind.

In diesem Dokument werden folgende Faktoren erläutert, die Einfluss darauf haben, wie Sie Ihre Anwendung verpacken und in Cloud Storage hochladen:

  • Verwenden des gcloud-Tools (empfohlen) oder Code-Erstellung für eine eigene Lösung.
  • Bei Bedarf manuelles Erstellen Ihres Pakets.
  • Einbeziehen zusätzlicher Abhängigkeiten, die nicht von der von Ihnen verwendeten AI Platform-Laufzeit installiert wurden.

    Die Verwendung des gcloud-Tools ist die einfachste Methode, ein Paket für Ihre Anwendung zu erstellen und sie mit ihren Abhängigkeiten hochzuladen: Dabei verwenden Sie denselben Befehl (gcloud ai-platform jobs submit training), um die Anwendung zu verpacken und hochzuladen sowie um Ihren ersten Trainingsjob zu senden.

    Aus praktischen Gründen ist es sinnvoll, die Konfigurationswerte als Umgebungsvariablen zu definieren. Die folgenden Variablen enthalten Werte, die zum Bereitstellen des Anwendungspakets verwendet werden:

    TRAINER_PACKAGE_PATH="/path/to/your/application/sources"
    MAIN_TRAINER_MODULE="trainer.task"
    PACKAGE_STAGING_PATH="gs://your/chosen/staging/path"
    

    Außerdem werden mit folgenden Variablen Werte definiert, die beim Ausführen des Jobs verwendet werden:

    now=$(date +"%Y%m%d_%H%M%S")
    JOB_NAME="your_name_$now"
    JOB_DIR="gs://your/chosen/job/output/path"
    REGION="us-east1"
    

    Das folgende Beispiel zeigt einen Befehl gcloud ai-platform jobs submit training, mit dem eine Anwendung verpackt und der Trainingsjob gesendet wird:

    gcloud ai-platform jobs submit training $JOB_NAME \
        --staging-bucket $PACKAGE_STAGING_PATH \
        --job-dir $JOB_DIR  \
        --package-path $TRAINER_PACKAGE_PATH \
        --module-name $MAIN_TRAINER_MODULE \
        --region $REGION \
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value
    
    • --staging-bucket gibt den Cloud Storage-Speicherort an, an dem Sie Ihre Trainings- und Abhängigkeitspakete bereitstellen möchten. Ihr GCP-Projekt muss Zugriff auf diesen Cloud Storage-Bucket haben. Außerdem sollte sich der Bucket in derselben Region befinden, in der Sie den Job ausführen. Sehen Sie sich die verfügbaren Regionen für AI Platform-Dienste an. Wenn Sie keinen Staging-Bucket angeben, stellt AI Platform Ihre Pakete an dem im Parameter job-dir angegebenen Speicherort bereit.

    • --job-dir gibt den Cloud Storage-Speicherort an, den Sie für die Ausgabedateien Ihres Trainingsjobs verwenden möchten. Ihr GCP-Projekt muss Zugriff auf diesen Cloud Storage-Bucket haben. Außerdem sollte sich der Bucket in derselben Region befinden, in der Sie den Job ausführen. Sehen Sie sich die verfügbaren Regionen für AI Platform-Dienste an.

    • --package-path gibt den lokalen Pfad zum Stammverzeichnis der Anwendung an. Weitere Informationen finden Sie unter empfohlene Projektstruktur.

    • --module-name gibt den Namen des Hauptmoduls der Anwendung unter Verwendung der Namespace-Punktnotation des Pakets an. Dies ist die Python-Datei, die Sie zum Starten der Anwendung ausführen. Wenn das Hauptmodul beispielsweise .../my_application/trainer/task.py ist (weitere Informationen unter empfohlene Projektstruktur), lautet der Name des Moduls trainer.task.

    • 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.

    Weitere Informationen zu Jobübermittlungs-Flags finden Sie unter Trainingsjob ausführen.

    Mit Abhängigkeiten arbeiten

    Abhängigkeiten sind Pakete, die Sie in Ihren Code importieren (import). Ihre Anwendung kann viele Abhängigkeiten haben, ohne die sie nicht richtig funktioniert.

    Wenn Sie einen Trainingsjob in AI Platform ausführen, wird der Job auf Trainingsinstanzen ausgeführt (speziell konfigurierte virtuelle Maschinen), auf denen bereits viele gängige Python-Pakete installiert sind. Überprüfen Sie die Pakete, die in der für das Training verwendeten Laufzeitversion enthalten sind, und notieren Sie sich die benötigten Abhängigkeiten, die noch nicht installiert sind.

    Es gibt zwei Typen von Abhängigkeiten, die Sie möglicherweise hinzufügen müssen:

    • Standardabhängigkeiten, also gängige Python-Pakete, die auf PyPI zur Verfügung stehen.
    • Benutzerdefinierte Pakete (z. B. selbst entwickelte oder unternehmensinterne Pakete).

    In den folgenden Abschnitten wird die Vorgehensweise für jeden Typ beschrieben.

    Standardabhängigkeiten (PyPI) hinzufügen

    Sie können die Standardabhängigkeiten Ihres Pakets im zugehörigen setup.py-Skript angeben. AI Platform verwendet pip zur Installation des Pakets auf den Trainingsinstanzen, die es für Ihren Job zuweist. Mit dem Befehl pip install können Sie nach konfigurierten Abhängigkeiten suchen und diese installieren.

    Erstellen Sie im Stammverzeichnis der Anwendung eine Datei mit dem Namen setup.py. Das Stammverzeichnis befindet sich eine Ebene über dem Verzeichnis trainer, wenn Sie sich an das empfohlene Muster halten.

    Geben Sie in setup.py folgendes Skript mit Ihren eigenen Werten ein:

    from setuptools import find_packages
    from setuptools import setup
    
    REQUIRED_PACKAGES = ['some_PyPI_package>=1.0']
    
    setup(
        name='trainer',
        version='0.1',
        install_requires=REQUIRED_PACKAGES,
        packages=find_packages(),
        include_package_data=True,
        description='My training application package.'
    )
    

    Wenn Sie den Trainingsjob mit dem gcloud-Befehlszeilentool senden, wird zum Erstellen des Pakets automatisch die Datei setup.py verwendet.

    Wenn Sie den Trainingsjob nicht mit gcloud senden, verwenden Sie den folgenden Befehl, um das Skript auszuführen:

    python setup.py sdist
    

    Weitere Informationen finden Sie unter Trainingsanwendungspaket manuell erstellen.

    Benutzerdefinierte Abhängigkeiten hinzufügen

    Sie können die benutzerdefinierten Abhängigkeiten der Anwendung angeben, indem Sie deren Pfade als Teil der Jobkonfiguration übergeben. Dazu benötigen Sie den URI zu jedem Abhängigkeitspaket. Benutzerdefinierte Abhängigkeiten müssen sich an einem Cloud Storage-Speicherort befinden. AI Platform verwendet pip install, um benutzerdefinierte Abhängigkeiten zu installieren, sodass sie in ihren setup.py-Skripten eigene Standardabhängigkeiten haben können.

    Wenn Sie den Trainingsjob mit dem gcloud-Tool ausführen, können Sie lokale Verzeichnisse angeben, damit das Tool die Pakete für Sie in der Cloud bereitstellt. Führen Sie den Befehl gcloud ai-platform jobs submit training aus:

    • Legen Sie das Flag package-path fest, um die Trainingsanwendung entweder als Pfad zum Verzeichnis, in dem der Quellcode gespeichert ist, oder als Pfad zu einem erstellten Paket anzugeben.

    • Legen Sie das Flag --packages fest, um die Abhängigkeiten in eine durch Kommas getrennte Liste aufzunehmen.

    Jeder URI, den Sie hinzufügen, ist ein Pfad zu einem Paket im Tarball- (*.tar.gz) oder Wheel-Format. AI Platform installiert mithilfe von pip install jedes Paket auf jeder virtuellen Maschine, die es für Ihren Trainingsjob zuweist.

    Im folgenden Beispiel werden die Abhängigkeitspakete mit den Namen dep1.tar.gz und dep2.whl (eines für jede unterstützte Paketart) verwendet, wobei ein Pfad zu den Quellcodes der Anwendung einbezogen wird:

    gcloud ai-platform jobs submit training $JOB_NAME \
        --staging-bucket $PACKAGE_STAGING_PATH \
        --package-path /Users/mluser/models/faces/trainer \
        --module-name $MAIN_TRAINER_MODULE \
        --packages dep1.tar.gz,dep2.whl \
        --region us-central1 \
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value
    

    In ähnlicher Weise werden im folgenden Beispiel die Abhängigkeitspakete mit den Namen dep1.tar.gz und dep2.whl (eines für jede unterstützte Paketart) verwendet, wobei jedoch eine erstellte Trainingsanwendung einbezogen wird:

    gcloud ai-platform jobs submit training $JOB_NAME \
        --staging-bucket $PACKAGE_STAGING_PATH \
        --module-name $MAIN_TRAINER_MODULE \
        --packages trainer-0.0.1.tar.gz,dep1.tar.gz,dep2.whl
        --region us-central1 \
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value
    

    Wenn Sie Trainingsjobs direkt mit der AI Platform Training and Prediction API ausführen, müssen Sie die Abhängigkeitspakete selbst an einem Cloud Storage-Speicherort bereitstellen und dann die Pfade zu den Paketen an diesem Speicherort verwenden.

    Paket manuell erstellen

    Die Paketerstellung für Python-Code ist ein umfassendes Thema, das den Rahmen dieser Dokumentation sprengen würde. Als Referenz enthält dieser Abschnitt aber eine Übersicht zum Erstellen eines Pakets mit Setuptools. Es gibt auch noch andere Bibliotheken, die Sie für denselben Zweck verwenden können.

    Führen Sie die folgenden Schritte aus, um Ihr Paket manuell zu erstellen:

    1. Fügen Sie in jedes Verzeichnis des Anwendungspakets eine Datei mit dem Namen __init__.py ein. Diese Datei kann leer sein oder Code enthalten, der beim Import des jeweiligen Pakets (beliebiges Modul in diesem Verzeichnis) ausgeführt wird.

    2. Fügen Sie in das Stammverzeichnis des Pakets (das Stammverzeichnis befindet sich eine Ebene über dem Verzeichnis trainer, wenn Sie sich an das empfohlene Muster halten) die Setuptools-Datei mit dem Namen setup.py ein, die Folgendes enthält:

      • Importanweisungen für setuptools.find_packages und setuptools.setup.

      • Einen Aufruf von setuptools.setup mit (mindestens) diesen Parametern, die so festgelegt sind:

        • _name_ ist auf den Namen des Paket-Namespace festgelegt.

        • _version_ ist auf die Versionsnummer des jeweiligen Paket-Builds festgelegt.

        • _install_requires_ ist auf eine Liste von Paketen festgelegt, die die Anwendung benötigt, mit Versionsanforderungen wie ‘docutils>=0.3'.

        • _packages_ ist auf find_packages() festgelegt.

        • _include_package_data_ ist auf True festgelegt.

    3. Führen Sie python setup.py sdist aus, um das Paket zu erstellen.

    Empfohlene Projektstruktur

    Sie können die Trainingsanwendung beliebig strukturieren. Die folgende Struktur wird jedoch häufig in AI Platform-Beispielen verwendet und wenn Sie eine ähnliche Struktur verwenden, können Sie die Beispiele leichter verfolgen.

    • Verwenden Sie ein Hauptprojektverzeichnis, das die Datei setup.py enthält.

    • Verwenden Sie ein Unterverzeichnis mit dem Namen trainer, um das Hauptanwendungsmodul zu speichern.

    • Geben Sie dem Hauptmodul der Trainingsanwendung den Namen task.py.

    • Erstellen Sie alle anderen Unterverzeichnisse im Hauptprojektverzeichnis, das Sie zum Implementieren der Anwendung benötigen.

    • Erstellen Sie in jedem Unterverzeichnis eine Datei namens __init__.py. Diese Dateien werden von Setuptools verwendet, um Verzeichnisse mit Code zu ermitteln, für den ein Paket erstellt werden soll. Die Dateien sind unter Umständen leer.

    In den Beispielen für AI Platform enthält das Verzeichnis trainer in der Regel folgende Quelldateien:

    • task.py enthält die Anwendungslogik, die den Job verwaltet.

    • model.py enthält den TensorFlow-Grafikcode – die Logik des Modells.

    • util.py enthält, sofern vorhanden, Code zur Ausführung der Anwendung.

    Empfohlene Struktur eines Trainingsanwendungsprojekts

    Wenn Sie das Anwendungspaket mit dem gcloud-Tool erstellen, müssen Sie keine Datei namens setup.py oder __init__.py erstellen. Für die Ausführung von gcloud ai-platform jobs submit training können Sie im Flag --package_path den Pfad zum Hauptprojektverzeichnis angeben oder das Tool direkt aus diesem Verzeichnis ausführen und das Flag ganz weglassen.

    Python-Module

    Das Anwendungspaket kann mehrere Module (Python-Dateien) enthalten. Sie müssen das Modul identifizieren, das Ihren Anwendungseinstiegspunkt enthält. Der Trainingsdienst führt dieses Modul aus, indem er Python aufruft, genau wie bei einer lokalen Ausführung.

    Wenn Sie die Anwendung in ein Python-Paket umwandeln, erstellen Sie damit einen Namespace. Wenn Sie zum Beispiel ein Paket mit dem Namen trainer erstellen und Ihr Hauptmodul den Namen task.py trägt, geben Sie dieses Paket mit dem Namen trainer.task an. Setzen Sie für die Ausführung von gcloud ai-platform jobs submit training daher das Flag --module-name auf trainer.task.

    Weitere Informationen zu den Modulen finden Sie in der Python-Anleitung zu Paketen.

    gcloud-Tool zum Hochladen eines vorhandenen Pakets verwenden

    Wenn Sie das Paket selbst erstellen, können Sie es mit dem gcloud-Tool hochladen. Führen Sie den Befehl gcloud ai-platform jobs submit training aus:

    • Legen Sie das Flag --packages auf den Pfad zum Anwendungspaket fest.

    • Legen Sie das Flag --module-name unter Verwendung der Namespace-Punktnotation des Pakets auf den Namen des Hauptmoduls der Anwendung fest. Dies ist die Python-Datei, die Sie zum Starten der Anwendung ausführen. Wenn das Hauptmodul beispielsweise .../my_application/trainer/task.py ist (weitere Informationen unter empfohlene Projektstruktur), lautet der Name des Moduls trainer.task.

    Im folgenden Beispiel wird gezeigt, wie Sie ein komprimiertes Tarball-Paket (hier als trainer-0.0.1.tar.gz bezeichnet) verwenden, das sich im selben Verzeichnis befindet, in dem Sie den Befehl ausführen. Die Hauptfunktion befindet sich in einem Modul namens task.py:.

    gcloud ai-platform jobs submit training $JOB_NAME \
        --staging-bucket $PACKAGE_STAGING_PATH \
        --job-dir $JOB_DIR \
        --packages trainer-0.0.1.tar.gz \
        --module-name $MAIN_TRAINER_MODULE \
        --region us-central1 \
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value
    

    Bereits in der Cloud vorhandenes Paket mit dem gcloud-Tool verwenden

    Wenn Sie das Paket selbst erstellen und in einen Cloud Storage-Speicherort hochladen, können Sie dafür das gcloud-Tool verwenden. Führen Sie den Befehl gcloud ai-platform jobs submit training aus:

    • Legen Sie das Flag --packages auf den Pfad zum Anwendungspaket fest.

    • Legen Sie das Flag --module-name unter Verwendung der Namespace-Punktnotation des Pakets auf den Namen des Hauptmoduls der Anwendung fest. Dies ist die Python-Datei, die Sie zum Starten der Anwendung ausführen. Wenn das Hauptmodul beispielsweise .../my_application/trainer/task.py ist (weitere Informationen unter empfohlene Projektstruktur), lautet der Name des Moduls trainer.task.

    Im folgenden Beispiel wird gezeigt, wie Sie ein komprimiertes Tarball-Paket verwenden, das sich in einem Cloud Storage-Bucket befindet.

    gcloud ai-platform jobs submit training $JOB_NAME \
        --job-dir $JOB_DIR \
        --packages $PATH_TO_PACKAGED_TRAINER \
        --module-name $MAIN_TRAINER_MODULE \
        --region us-central1 \
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value
    

    Dabei ist $PATH_TO_PACKAGED_TRAINER eine Umgebungsvariable, die den Pfad zu einem bereits in der Cloud vorhandenen Paket angibt. Der Pfad könnte beispielsweise auf den folgenden Cloud Storage-Speicherort verweisen, der ein komprimiertes Tarball-Paket mit dem Namen trainer-0.0.1.tar.gz enthält:

    PATH_TO_PACKAGED_TRAINER=gs://$CLOUD_STORAGE_BUCKET_NAME/trainer-0.0.0.tar.gz
    

    Pakete manuell hochladen

    Sie können Ihre Pakete manuell hochladen, wenn es dafür einen Grund gibt. Der häufigste Grund ist, dass Sie die AI Platform Training and Prediction API direkt aufrufen möchten, um Ihren Trainingsjob zu starten. Am einfachsten ist es, das Paket und benutzerdefinierte Abhängigkeiten mit dem gsutil-Tool in den Cloud Storage-Bucket hochzuladen:

    gsutil cp /local/path/to/package.tar.gz  gs://bucket/path/
    

    Wenn Sie für diesen Vorgang jedoch die Befehlszeile nutzen können, müssen Sie nur gcloud ai-platform jobs submit training verwenden, um bei der Einrichtung eines Trainingsjobs Ihre Pakete hochzuladen. Sollte die Verwendung der Befehlszeile nicht möglich sein, können Sie die Cloud Storage-Clientbibliothek verwenden, um den Upload programmgesteuert durchzuführen.

    Weitere Informationen

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

Feedback geben zu...

AI Platform für TensorFlow