Python-Trainingsanwendung für einen vordefinierten Container erstellen

Bevor Sie ein benutzerdefiniertes Training mit einem vordefinierten Container ausführen können, müssen Sie eine Python-Quellverteilung erstellen, die Ihre Trainingsanwendung enthält. Laden Sie sie in einen Cloud Storage-Bucket hoch, auf den Ihr Google Cloud-Projekt zugreifen kann.

Alternativen zum Erstellen einer Quelldistribution

In dieser Anleitung wird beschrieben, wie Sie eine Quelldistribution manuell erstellen und in Cloud Storage hochladen. Bevor Sie dem Leitfaden folgen, sollten Sie die folgenden alternativen Workflows in Betracht ziehen, die in einigen Fällen praktischer sind:

Wenn keine der vorherigen Optionen für Ihren Anwendungsfall geeignet ist oder Sie Ihre Trainingsanwendung manuell als Quellverteilung packen möchten, folgen Sie der restlichen Anleitung.

Hinweis

Bevor Sie Ihre Trainingsanwendung für die Ausführung in der Cloud vorbereiten, führen Sie die folgenden Schritte aus:

  1. Entwickeln Sie Ihre Trainingsanwendung mithilfe eines Frameworks für maschinelles Lernen (ML), das in einem der vordefinierten Container für das Training von Vertex AI verfügbar ist. Diese Trainingsanwendung muss die Anforderungen für einen Trainingscode erfüllen.

    Wenn Sie die Trainingsanwendung von Grund auf neu schreiben möchten, empfehlen wir Ihnen, Ihren Code entsprechend der im folgenden Abschnitt dieses Dokuments beschriebenen Anwendungsstruktur zu organisieren.

  2. Erstellen Sie einen Cloud Storage-Bucket in demselben Google Cloud-Projekt, in dem Sie Vertex AI verwenden möchten. Sie speichern dann in diesem Bucket Ihre Trainingsanwendung. An sich ist es möglich, auch einen Bucket in einem anderen Google Cloud-Projekt zu verwenden. Dies erfordert aber eine zusätzliche Konfiguration, die in diesem Leitfaden nicht behandelt wird.

    Für eine optimale Leistung sollte sich der Cloud Storage-Bucket an dem Standort befinden, an dem Sie Vertex AI verwenden möchten.

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

Anwendungsstruktur

Wenn Sie ein benutzerdefiniertes Training mit einem vordefinierten Container ausführen, müssen Sie für den Trainingscode die folgenden Anforderungen berücksichtigen:

  • Stellen Sie den Code als eine oder mehrere Python-Quelldistributionen bereit.

    Wenn Sie die Vertex AI API zum Starten des benutzerdefinierten Trainings verwenden, geben Sie diese im Feld packageUris an.

  • Erstellen Sie ein Modul in einer dieser Quelldistributionen, die als Einstiegspunkt für das Training dient.

    Wenn Sie die Vertex AI API zum Starten des benutzerdefinierten Trainings verwenden, geben Sie dies im Feld pythonModule an.

Solange Sie diese Anforderungen erfüllen, können Sie Ihre Trainingsanwendung auf beliebige Weise strukturieren. Wir empfehlen aber, eine einzelne Python-Quelldistribution zu erstellen. Dazu organisieren Sie Ihren Code in der folgenden Struktur, die in den Vertex AI-Beispielen häufig verwendet wird:

  • Verwenden Sie ein Hauptprojektverzeichnis, das die Datei setup.py enthält. Informationen zum Inhalt dieser Datei finden Sie im folgenden Abschnitt.

  • Erstellen Sie im Hauptprojektverzeichnis ein Unterverzeichnis namens trainer/, das als Hauptpaket für Ihren Trainingscode dienen soll.

  • Erstellen Sie in trainer/ ein Modul mit dem Namen task.py, das als Einstiegspunkt für Ihren Trainingscode dienen soll.

  • Für die Unterstützung von trainer/task.py erstellen Sie bei Bedarf beliebige zusätzliche Python-Module für das trainer/-Paket. Außerdem können Sie mit diesem zusätzlichen Code beliebige zusätzliche Unterverzeichnisse im Hauptprojektverzeichnis erstellen.

  • Erstellen Sie in jedem Unterverzeichnis eine Datei __init__.py, um sie zu einem Paket hinzuzufügen.

Im weiteren Verlauf dieses Leitfadens wird davon ausgegangen, dass der Code gemäß dieser Struktur organisiert ist.

Quelldistribution erstellen

Das Erstellen von Python-Quelldistributionen ist ein umfassendes Thema, das den Rahmen dieser Dokumentation sprengen würde. Der Einfachheit halber bietet dieser Abschnitt eine Übersicht über die Verwendung von Setuptools, um eine Quelldistribution zur Nutzung mit Vertex AI zu erstellen. Es gibt noch weitere Bibliotheken, die Sie für diesen Zweck verwenden können.

  1. Erstellen Sie eine Datei setup.py, die für Setuptools festlegt, wie die Quelldistribution erstellt wird. Eine einfache Datei setup.py enthält Folgendes:

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

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

      • Für name wird der Name der Quelldistribution festgelegt.

      • Für version wird die Versionsnummer dieses Builds der Quelldistribution festgelegt.

      • Für install_requires wird die Liste der Abhängigkeiten festgelegt, die die Anwendung benötigt, mit Versionsanforderungen wie 'docutils>=0.3'.

      • Für packages wird find_packages() festgelegt. Damit wird angegeben, dass Setuptools alle Unterverzeichnisse des übergeordneten Verzeichnisses, die eine Datei __init__.py enthalten, als Pakete einbeziehen soll.

      • Für include_package_data wird True festgelegt.

    Das folgende Beispiel zeigt eine einfache Datei setup.py für eine Trainingsanwendung:

    from setuptools import find_packages
    from setuptools import setup
    
    setup(
        name='trainer',
        version='0.1',
        packages=find_packages(),
        include_package_data=True,
        description='My training application.'
    )
    
  2. Führen Sie den folgenden Befehl aus, um die Quelldistribution dist/trainer-0.1.tar.gz zu erstellen:

    python setup.py sdist --formats=gztar
    

Python-Anwendungsabhängigkeiten

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

Für jedes Replikat im benutzerdefinierten Trainingsjob wird Ihr Code in einem Container ausgeführt, in dem bereits viele gängige Python-Abhängigkeiten installiert sind. Prüfen Sie die Abhängigkeiten im vordefinierten Container, die Sie für das Training verwenden möchten, und notieren Sie sich alle Abhängigkeiten, die noch nicht installiert sind. Die folgenden Schritte sind nur für Abhängigkeiten erforderlich, die noch nicht im vordefinierten Container installiert sind.

Es gibt zwei Arten von Abhängigkeiten, die Sie eventuell hinzufügen müssen:

  • Standardabhängigkeiten, also häufig genutzte Distributionspakete, die auf PyPI zur Verfügung stehen.
  • Benutzerdefinierte Abhängigkeiten, also z. B. selbst entwickelte oder unternehmensinterne Pakete.

In den folgenden Abschnitten wird die Vorgehensweise für jede Art beschrieben.

Standardabhängigkeiten (PyPI)

Sie können die Standardabhängigkeiten Ihrer Anwendung im zugehörigen setup.py-Skript angeben. Vertex AI installiert Ihre Trainingsanwendung mit pip auf den Replikaten, die dem Job zugeordnet werden. Mit dem Befehl pip install können Sie nach konfigurierten Abhängigkeiten suchen und diese installieren.

Das folgende Beispiel zeigt eine Datei setup.py, die der aus einem vorherigen Abschnitt ähnelt. In setup.py wird jedoch Vertex AI angewiesen, some_PyPI_package bei der Installation der Trainingsanwendung zu installieren:

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.'
)

Benutzerdefinierte Abhängigkeiten

Sie können die benutzerdefinierten Abhängigkeiten der Anwendung angeben, indem Sie deren Pfade als Teil der Jobkonfiguration übergeben. Sie benötigen den URI der Quellverteilung jeder Abhängigkeit. Benutzerdefinierte Abhängigkeiten müssen sich an einem Cloud Storage-Speicherort befinden. Vertex AI installiert mithilfe von pip install benutzerdefinierte Abhängigkeiten, sodass diese in ihren setup.py-Skripts Standardabhängigkeiten haben können.

Jeder URI, den Sie hinzufügen, ist ein Pfad zu einer Quelldistribution, der als Tarball (.tar.gz) oder als Wheel (.whl) formatiert ist. Vertex AI installiert auf jedem Replikat, das sie Ihrem Trainingsjob zuweist, jede Abhängigkeit mit pip install.

Wenn Sie die Vertex AI API verwenden, um ein benutzerdefiniertes Training zu starten, geben Sie die Cloud Storage-URIs zu diesen Abhängigkeiten zusammen mit Ihrer Trainingsanwendung im Feld packageUris an.

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 mit einem Python-Aufruf aus, genau wie bei einer lokalen Ausführung.

Beispielsweise ist Ihr Hauptmodul task.py, wenn Sie der empfohlenen Struktur aus einem vorherigen Abschnitt folgen. Da es sich in einem Importpaket (Verzeichnis mit einer Datei __init__.py) namens trainer befindet, lautet der voll qualifizierte Name dieses Moduls trainer.task. Wenn Sie also mit der Vertex AI API ein benutzerdefiniertes Training starten, legen Sie das Feld moduleName auf trainer.task fest.

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

Quelldistribution in Cloud Storage hochladen

Mit dem gsutil-Tool können Sie die Quelldistribution und alle benutzerdefinierten Abhängigkeiten in einen Cloud Storage-Bucket hochladen. Beispiel:

gsutil cp dist/trainer-0.1.tar.gz CLOUD_STORAGE_DIRECTORY

Ersetzen Sie dabei CLOUD_STORAGE_DIRECTORY durch den URI (mit gs:// am Anfang und / am Ende) eines Cloud Storage-Verzeichnisses in einem Bucket, auf den Ihr Google Cloud-Projekt zugreifen kann.

Weitere Möglichkeiten zum Hochladen der Quelldistribution nach Cloud Storage finden Sie in der Cloud Storage-Dokumentation unter Objekte hochladen.

Nächste Schritte