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 Sie mit Code auf Ihrem lokalen Computer trainieren und die Menge der manuellen Paketerstellung so weit wie möglich reduzieren möchten, empfehlen wir die Verwendung das Autopacking-Feature der Google Cloud CLI. Mit diesem Feature können Sie ein Docker-Container-Image erstellen, es in Artifact Registry übertragen und eine
CustomJob
-Ressource basierend auf dem Container-Image erstellen – alles mit einem einzigen Befehl. Weitere Informationen finden Sie in der Anleitung zum Erstellen einesCustomJob
.Sie müssen Docker auf Ihrem lokalen Computer installieren, um Autopackaging verwenden zu können. Mit dieser Option können Sie nur eine
CustomJob
-Ressource erstellen, keineTrainingPipeline
- oderHyperparameterTuningJob
-Ressource. (Informationen zu den Unterschieden zwischen benutzerdefinierten Trainingsressourcen.)Wenn Sie das Container-Image weiter anpassen und Ihren Code lokal in einem Container ausführen möchten, bevor Sie ihn auf Vertex AI ausführen, können Sie den Befehl
local-run
der gcloud-Befehlszeile verwenden, um Ihren Code zu containerisieren und lokal auszuführen. Anschließend können Sie das Image manuell per Push in Artifact Registry übertragen.Zur Verwendung des Befehls
local-run
müssen Sie Docker auf Ihrem lokalen Computer installieren.Wenn Sie Ihren Trainingscode in einem einzelnen Python-Skript schreiben können, können Sie die
CustomJob
-Klasse des Vertex AI SDK für Python verwenden, um einen benutzerdefinierten Job oder eineCustomTrainingJob
-Klasse zu erstellen. So können Sie eine benutzerdefinierteTrainingPipeline
erstellen. Der Trainingscode wird automatisch als Quelldistribution verpackt und in Cloud Storage hochgeladen.Die größte Flexibilität erhalten Sie, wenn Sie manuell ein benutzerdefiniertes Container-Image erstellen und in Artifact Registry hochladen.
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:
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.
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.
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 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 Namentask.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 dastrainer/
-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.
Erstellen Sie eine Datei
setup.py
, die für Setuptools festlegt, wie die Quelldistribution erstellt wird. Eine einfache Dateisetup.py
enthält Folgendes:Importanweisungen für
setuptools.find_packages
undsetuptools.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
wirdfind_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
wirdTrue
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.' )
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 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
-Scripts 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 der gcloud CLI können Sie die Quelldistribution und alle benutzerdefinierten Abhängigkeiten in einen Cloud Storage-Bucket hochladen. Beispiel:
gcloud storage 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
- Weitere Anforderungen von zusätzlichen Trainingscodes für benutzerdefiniertes Training
- Mehr erfahren zum Erstellen eines benutzerdefinierten Trainingsjobs oder einer benutzerdefinierten Trainingspipeline, die Ihre Trainingsanwendung verwendet