Benutzerdefiniertes Container-Image für das Training erstellen

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:

  1. Benutzerdefinierten Container erstellen:
    1. 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.
    2. Ihren Docker-Container lokal erstellen und ausführen
  2. 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 gcloud beta ai custom-jobs local-run, um ein benutzerdefiniertes Container-Image zu erstellen und zu testen, das auf Ihrem Trainingscode basiert, ohne selbst ein Dockerfile schreiben zu müssen.

    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 basierend darauf ein Container-Image. Testen Sie den Container schließlich 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:

  • pytorch/pytorch:latest
  • tensorflow/tensorflow:nightly
  • python:2.7.15-jessie
  • nvidia/cuda:9.0-cudnn7-runtime
WORKDIR /path/to/directory Gibt das Verzeichnis im Image an, in dem nachfolgende Anweisungen ausgeführt werden. /root
RUN pip install pkg1 pkg2 pkg3 Installiert zusätzliche Pakete mit pip.

Hinweis: Wenn Ihr Basis-Image pip nicht enthält, müssen Sie einen Befehl zur Installation des Tools hinzufügen, bevor Sie weitere Pakete installieren.

Beispielpakete:

  • google-cloud-storage
  • cloudml-hypertune
  • pandas
COPY src/foo.py dest/foo.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:

  • model.py
  • task.py
  • data_utils.py
ENTRYPOINT ["exec", "file"] 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"]

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- und Container Registry-Berechtigungen

Wenn Sie ein Artifact Registry- oder Container 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 oder Container 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.

Container Registry

Die Zugriffssteuerung für Container Registry basiert auf einem Cloud Storage-Bucket im Hintergrund. Folgen Sie der Anleitung in der Dokumentation zur Zugriffssteuerung in Container Registry, um Ihrem Vertex AI-Dienst-Agent die Rolle "Storage-Objekt-Betrachter" (roles/storage.objectViewer) für den entsprechenden Cloud Storage-Bucket zuzuweisen.

Nächste Schritte