Die Verwendung eines benutzerdefinierten Container-Image bietet die größte Flexibilität für das Training in Vertex AI. Informationen zu den Unterschieden bei der Verwendung von benutzerdefinierten Container-Images zur Verwendung einer Python-Trainingsanwendung mit einem vordefinierten Container finden Sie unter Anforderungen an Trainingscodes.
Die Anleitung führt Sie durch die folgenden Schritte:
- Benutzerdefinierten Container erstellen:
- Ein Dockerfile schreiben, das Ihren Container für die Arbeit mit Vertex AI einrichtet und die Abhängigkeiten enthält, die für Ihre Trainingsanwendung erforderlich sind.
- Ihren Docker-Container lokal erstellen und ausführen
- Container-Image per Push an Artifact Registry übertragen
Hinweis
Informationen zum Konfigurieren eines Artifact Registry-API-Repositorys und zum Einrichten von Docker in Ihrer Entwicklungsumgebung finden Sie in der Kurzanleitung zu Artifact Registry für Docker. Führen Sie speziell die folgenden Schritte der Kurzanleitung aus:
- Hinweis
- Shell auswählen
- Docker-Repository erstellen
- Authentifizierung konfigurieren
Benutzerdefiniertes Container-Image erstellen
Wir empfehlen zwei mögliche Workflows zum Erstellen eines benutzerdefinierten Container-Images:
Schreiben Sie Ihren Trainingscode. Verwenden Sie dann den Befehl
local-run
der gcloud-Befehlszeile, um ein benutzerdefiniertes Container-Image zu erstellen und zu testen, das auf Ihrem Trainingscode basiert, ohne selbst ein Dockerfile zu schreiben.Dieser Workflow kann einfacher sein, wenn Sie nicht mit Docker vertraut sind. Wenn Sie diesen Workflow befolgen, können Sie den Rest dieses Abschnitts überspringen.
Schreiben Sie Ihren Trainingscode. Schreiben Sie dann ein Dockerfile und erstellen Sie ein Container-Image. Testen Sie den Container lokal.
Dieser Workflow bietet mehr Flexibilität, da Sie das Container-Image nach Bedarf anpassen können.
Der Rest dieses Abschnitts führt Sie durch ein Beispiel für letzteren Workflow.
Trainingscode
Sie können Trainingscode mit beliebigen Abhängigkeiten in jeder Programmiersprache schreiben. Achten Sie darauf, dass Ihr Code die Anforderungen an den Trainingscode erfüllt. Wenn Sie planen, Hyperparameter-Feinabstimmung, GPUs oder verteiltes Training zu verwenden, lesen Sie unbedingt die entsprechenden Abschnitte dieses Dokuments. Diese Abschnitte beschreiben spezifische Überlegungen zur Verwendung der Features mit benutzerdefinierten Containern.
Dockerfile erstellen
Erstellen Sie ein Dockerfile, um alle Anleitungen zum Erstellen des Container-Image anzugeben.
In diesem Abschnitt wird beschrieben, wie Sie ein allgemeines Beispiel für ein Dockerfile erstellen, das für das benutzerdefinierte Training verwendet werden soll. Weitere Informationen zum Erstellen eines Container-Images finden Sie in der Kurzanleitung zur Docker-Dokumentation.
Für die Verwendung mit Vertex AI muss Ihr Dockerfile Befehle für die folgenden Aufgaben enthalten:
- Basis-Image auswählen
- Zusätzliche Abhängigkeiten installieren
- Trainingscode in das Image kopieren
- Einstiegspunkt für Vertex AI zum Aufrufen Ihres Trainingscodes konfigurieren
Ihr Dockerfile kann je nach Ihren Anforderungen zusätzliche Logik enthalten. Weitere Informationen zu den einzelnen Anweisungen finden Sie in der Dockerfile-Referenz.
Dockerfile-Befehl | Beschreibung | Beispiel(e) |
---|---|---|
FROM image:tag |
Gibt ein Basis-Image und sein Tag an. | Beispiele für Basis-Images mit Tags:
|
WORKDIR /path/to/directory |
Gibt das Verzeichnis im Image an, in dem nachfolgende Anweisungen ausgeführt werden. | /root |
|
Installiert zusätzliche Pakete mit pip .Hinweis: Wenn Ihr Basis-Image |
Beispielpakete:
|
COPY src/training-app.py dest/training-app.py |
Kopiert den Code für die Trainingsanwendung in das Image. Je nachdem, wie die Trainingsanwendung aufgebaut ist, umfasst dies wahrscheinlich mehrere Dateien. | Beispielnamen von Dateien in der Trainingsanwendung:
|
|
Legt den Einstiegspunkt fest, über den der Trainingscode zur Ausführung aufgerufen wird. Wenn Sie das benutzerdefinierte Training starten, können Sie diesen Einstiegspunkt überschreiben. Geben Sie dazu das Feld command in Ihrer ContainerSpec an. Sie können auch das Feld args in der ContainerSpec angeben, um zusätzliche Argumente für den Einstiegspunkt bereitzustellen (und die CMD -Anweisung des Container-Images zu überschreiben, wenn es eine solche hat). |
["python", "task.py"] |
Die Logik im Dockerfile kann je nach Ihren Anforderungen variieren, im Allgemeinen sieht sie jedoch so aus:
# Specifies base image and tag FROM image:tag WORKDIR /root # Installs additional packages RUN pip install pkg1 pkg2 pkg3 # Downloads training data RUN curl https://example-url/path-to-data/data-filename --output /root/data-filename # Copies the trainer code to the docker image. COPY your-path-to/model.py /root/model.py COPY your-path-to/task.py /root/task.py # Sets up the entry point to invoke the trainer. ENTRYPOINT ["python", "task.py"]
(Optional) Dockerfile für TPU-VMs anpassen
Wenn Sie in Vertex AI mit einer TPU-VM trainieren möchten, müssen Sie das Dockerfile anpassen, um speziell erstellte Versionen der Bibliotheken tensorflow
und libtpu
zu installieren. Weitere Informationen finden Sie unter Container für die Verwendung mit einer TPU-VM anpassen.
Container-Image erstellen
Erstellen Sie den richtigen Image-URI mithilfe von Umgebungsvariablen und anschließend das Docker-Image:
export PROJECT_ID=$(gcloud config list project --format "value(core.project)")
export REPO_NAME=REPOSITORY_NAME
export IMAGE_NAME=IMAGE_NAME
export IMAGE_TAG=IMAGE_TAG
export IMAGE_URI=us-central1-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}/${IMAGE_NAME}:${IMAGE_TAG}
docker build -f Dockerfile -t ${IMAGE_URI} ./
Ersetzen Sie in diesen Befehlen Folgendes:
- REPOSITORY_NAME: Name des Artifact Registry-Repositorys, das Sie im Abschnitt Vorbereitung erstellt haben.
- IMAGE_NAME : ein Name Ihrer Wahl für das Container-Image.
- IMAGE_TAG: ein Tag Ihrer Wahl für diese Version des Container-Images.
Weitere Informationen zu den Artifact Registry-Anforderungen zur Benennung eines Container-Image
Container lokal ausführen (optional)
Verifizieren Sie das Container-Image, indem Sie es lokal als Container ausführen. Sie möchten den Trainingscode wahrscheinlich für ein kleineres Dataset oder für eine kürzere Anzahl von Iterationen ausführen als in Vertex AI. Wenn beispielsweise das Einstiegspunktskript in Ihrem Container-Image ein --epochs
-Flag akzeptiert, um zu steuern, für wie viele Epochen es ausgeführt wird, können Sie den folgenden Befehl ausführen:
docker run ${IMAGE_URI} --epochs 1
Übertragen Sie den Container per Push in die Artifact Registry.
Wenn die lokale Ausführung funktioniert, können Sie den Container per Push in Artifact Registry übertragen.
Führen Sie als Erstes gcloud auth configure-docker us-central1-docker.pkg.dev
aus, wenn Sie dies noch nicht in Ihrer Entwicklungsumgebung getan haben. Führen Sie dann den folgenden Befehl aus:
docker push ${IMAGE_URI}
Artifact Registry-Berechtigungen
Wenn Sie ein Artifact Registry-Image aus demselben Google Cloud-Projekt verwenden, in dem Sie Vertex AI verwenden, müssen Sie keine Berechtigungen konfigurieren. Sie können sofort einen benutzerdefinierten Trainingsjob erstellen, der Ihr Container-Image verwendet.
Wenn Sie das Container-Image jedoch nicht in dem Google Cloud-Projekt, in dem Sie Vertex AI verwenden möchten, per Push in Artifact Registry übertragen haben, müssen Sie dem Vertex AI-Dienst-Agent für Ihr Vertex AI-Projekt die Berechtigung erteilen, das Image aus dem anderen Projekt abzurufen. Weitere Informationen zum Vertex AI-Dienst-Agent und wie Sie ihm Berechtigungen zuweisen.
Artifact Registry
Informationen dazu, wie Sie dem Vertex AI-Dienst-Agent Zugriff auf Ihr Artifact Registry-Repository gewähren, finden Sie in der Artifact Registry-Dokumentation unter Repository-spezifische Berechtigungen erteilen.
Nächste Schritte
- Konzepte für die Verwendung von Containern
- Weitere Anforderungen von zusätzlichen Trainingscodes für benutzerdefiniertes Training
- Lernen Sie, wie Sie einen benutzerdefinierten Trainingsjob erstellen oder eine Trainingspipeline erstellen, die Ihren benutzerdefinierten Container verwendet