1. Übersicht
In diesem Lab verwenden Sie Vertex AI, um einen benutzerdefinierten Trainingsjob auszuführen.
Dieses Lab ist Teil der Videoserie Prototype to Production. Sie erstellen ein Bildklassifizierungsmodell mit dem Flowers-Dataset. Weitere Informationen finden Sie im zugehörigen Video:
.
Lerninhalte
Die folgenden Themen werden behandelt:
- Verwaltetes Vertex AI Workbench-Notebook erstellen
- Benutzerdefinierten Trainingsjob über die Vertex AI-UI konfigurieren und starten
- Benutzerdefinierten Trainingsjob mit dem Vertex AI Python SDK konfigurieren und starten
Die Gesamtkosten für die Ausführung dieses Labs in Google Cloud betragen etwa 1$.
2. Einführung in Vertex AI
In diesem Lab wird das neueste KI-Produkt von Google Cloud verwendet. Vertex AI vereint die ML-Angebote von Google Cloud in einer nahtlosen Entwicklungsumgebung. Bisher musste auf mit AutoML trainierte und benutzerdefinierte Modelle über verschiedene Dienste zugegriffen werden. Das neue Angebot kombiniert diese und weitere, neue Produkte zu einer einzigen API. Sie können auch vorhandene Projekte zu Vertex AI migrieren.
Vertex AI umfasst viele verschiedene Produkte zur Unterstützung von End-to-End-ML-Workflows. In diesem Lab konzentrieren wir uns auf die unten hervorgehobenen Produkte: Training und Workbench.

3. Umgebung einrichten
Sie benötigen ein Google Cloud-Projekt mit aktivierter Abrechnung, um dieses Codelab auszuführen. Eine Anleitung zum Erstellen eines Projekts finden Sie hier.
Schritt 1: Compute Engine API aktivieren
Rufen Sie Compute Engine auf und wählen Sie Aktivieren aus, falls die API noch nicht aktiviert ist.
Schritt 2: Artifact Registry API aktivieren
Rufen Sie Artifact Registry auf und wählen Sie Aktivieren aus, falls die API noch nicht aktiviert ist. Sie verwenden diese API, um einen Container für Ihren benutzerdefinierten Trainingsjob zu erstellen.
Schritt 3: Vertex AI API aktivieren
Rufen Sie den Bereich „Vertex AI“ in der Cloud Console auf und klicken Sie auf **Vertex AI API aktivieren**.

Schritt 4: Vertex AI Workbench-Instanz erstellen
Klicken Sie im Bereich „Vertex AI“ der Cloud Console auf „Workbench“:

Aktivieren Sie die Notebooks API, falls sie noch nicht aktiviert ist.

Klicken Sie nach der Aktivierung auf VERWALTETE NOTEBOOKS:

Wählen Sie dann NEUES NOTEBOOK aus.

Geben Sie Ihrem Notebook einen Namen und wählen Sie unter Berechtigung die Option Dienstkonto aus.

Wählen Sie Erweiterte Einstellungen aus.
Wählen Sie unter Sicherheit die Option „Terminal aktivieren“ aus, falls sie noch nicht aktiviert ist.

Sie können alle anderen erweiterten Einstellungen unverändert lassen.
Klicken Sie dann auf Erstellen. Die Bereitstellung der Instanz kann einige Minuten dauern.
Nachdem die Instanz erstellt wurde, wählen Sie JUPYTERLAB ÖFFNEN aus.

4. Trainingsanwendungscode containerisieren
Sie senden diesen Trainingsjob an Vertex AI, indem Sie den Code der Trainingsanwendung in einen Docker-Container packen und diesen Container per Push in Google Artifact Registry übertragen. Mit diesem Ansatz können Sie ein Modell trainieren, das mit einem beliebigen Framework erstellt wurde.
Öffnen Sie im Launcher-Menü ein Terminalfenster in Ihrer Notebook-Instanz:

Schritt 1: Cloud Storage-Bucket erstellen
In diesem Trainingsjob exportieren Sie das trainierte TensorFlow-Modell in einen Cloud Storage-Bucket. Außerdem speichern Sie die Daten für das Training in einem Cloud Storage-Bucket.
Führen Sie im Terminal den folgenden Befehl aus, um eine Umgebungsvariable für Ihr Projekt zu definieren. Ersetzen Sie dabei your-cloud-project durch die ID Ihres Projekts:
PROJECT_ID='your-cloud-project'
Führen Sie als Nächstes den folgenden Befehl im Terminal aus, um einen neuen Bucket in Ihrem Projekt zu erstellen.
BUCKET="gs://${PROJECT_ID}-bucket"
gsutil mb -l us-central1 $BUCKET
Schritt 2: Daten in Cloud Storage-Bucket kopieren
Wir müssen das Flowers-Dataset in Cloud Storage übertragen. Zu Demonstrationszwecken laden Sie das Dataset zuerst in diese Workbench-Instanz herunter und kopieren es dann in einen Bucket.
Laden Sie die Daten herunter und entpacken Sie sie.
wget https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz
tar xvzf flower_photos.tgz
Kopieren Sie sie dann in den gerade erstellten Bucket. Wir fügen „-r“ hinzu, weil wir das gesamte Verzeichnis kopieren möchten, und „-m“, um eine Kopie mit mehreren Prozessen auszuführen, wodurch der Vorgang beschleunigt wird.
gsutil -m cp -r flower_photos $BUCKET
Schritt 3: Trainingscode schreiben
Erstellen Sie ein neues Verzeichnis mit dem Namen flowers und wechseln Sie zu diesem Verzeichnis:
mkdir flowers
cd flowers
Führen Sie den folgenden Befehl aus, um ein Verzeichnis für den Trainingscode und eine Python-Datei zu erstellen, in der Sie den Code hinzufügen.
mkdir trainer
touch trainer/task.py
Das Verzeichnis flowers/ sollte jetzt Folgendes enthalten:
+ trainer/
+ task.py
Weitere Informationen zum Strukturieren des Trainingsanwendungscodes finden Sie in der Dokumentation.
Öffnen Sie als Nächstes die gerade erstellte Datei task.py und kopieren Sie den folgenden Code.
Ersetzen Sie {your-gcs-bucket} durch den Namen des gerade erstellten Cloud Storage-Buckets.
Mit dem Cloud Storage FUSE-Tool können Trainingsjobs in Vertex AI Training auf Daten in Cloud Storage als Dateien im lokalen Dateisystem zugreifen. Wenn Sie einen benutzerdefinierten Trainingsjob starten, wird für den Job ein Verzeichnis /gcs angezeigt, das alle Cloud Storage-Buckets als Unterverzeichnisse enthält. Daher beginnen die Datenpfade im Trainingscode mit /gcs.
import tensorflow as tf
import numpy as np
import os
## Replace {your-gcs-bucket} !!
BUCKET_ROOT='/gcs/{your-gcs-bucket}'
# Define variables
NUM_CLASSES = 5
EPOCHS=10
BATCH_SIZE = 32
IMG_HEIGHT = 180
IMG_WIDTH = 180
DATA_DIR = f'{BUCKET_ROOT}/flower_photos'
def create_datasets(data_dir, batch_size):
'''Creates train and validation datasets.'''
train_dataset = tf.keras.utils.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="training",
seed=123,
image_size=(IMG_HEIGHT, IMG_WIDTH),
batch_size=batch_size)
validation_dataset = tf.keras.utils.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="validation",
seed=123,
image_size=(IMG_HEIGHT, IMG_WIDTH),
batch_size=batch_size)
train_dataset = train_dataset.cache().shuffle(1000).prefetch(buffer_size=tf.data.AUTOTUNE)
validation_dataset = validation_dataset.cache().prefetch(buffer_size=tf.data.AUTOTUNE)
return train_dataset, validation_dataset
def create_model():
'''Creates model.'''
model = tf.keras.Sequential([
tf.keras.layers.Resizing(IMG_HEIGHT, IMG_WIDTH),
tf.keras.layers.Rescaling(1./255, input_shape=(IMG_HEIGHT, IMG_WIDTH, 3)),
tf.keras.layers.Conv2D(16, 3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(32, 3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(64, 3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(NUM_CLASSES, activation='softmax')
])
return model
# CREATE DATASETS
train_dataset, validation_dataset = create_datasets(DATA_DIR, BATCH_SIZE)
# CREATE/COMPILE MODEL
model = create_model()
model.compile(optimizer=tf.keras.optimizers.Adam(),
loss=tf.keras.losses.SparseCategoricalCrossentropy(),
metrics=['accuracy'])
# TRAIN MODEL
history = model.fit(
train_dataset,
validation_data=validation_dataset,
epochs=EPOCHS
)
# SAVE MODEL
model.save(f'{BUCKET_ROOT}/model_output')
Schritt 4: Dockerfile erstellen
Um Ihren Code zu containerisieren, müssen Sie ein Dockerfile erstellen. Das Dockerfile enthält alle Befehle, die zum Ausführen des Images erforderlich sind. Es installiert alle erforderlichen Bibliotheken und richtet den Einstiegspunkt für den Trainingscode ein.
Erstellen Sie im Terminal ein leeres Dockerfile im Stammverzeichnis Ihres Verzeichnisses „flowers“:
touch Dockerfile
Das Verzeichnis flowers/ sollte jetzt Folgendes enthalten:
+ Dockerfile
+ trainer/
+ task.py
Öffnen Sie das Dockerfile und kopieren Sie Folgendes hinein:
FROM gcr.io/deeplearning-platform-release/tf2-gpu.2-8
WORKDIR /
# Copies the trainer code to the docker image.
COPY trainer /trainer
# Sets up the entry point to invoke the trainer.
ENTRYPOINT ["python", "-m", "trainer.task"]
Sehen wir uns die Befehle in dieser Datei an.
Der Befehl FROM gibt das Basis-Image an. Das ist das übergeordnete Image, auf dem das von Ihnen erstellte Image basiert. Als Basis-Image verwenden Sie das Deep Learning Container TensorFlow Enterprise 2.8 GPU Docker-Image. Die Deep Learning Container in Google Cloud enthalten viele gängige ML- und Data-Science-Frameworks, die vorinstalliert sind.
Der Befehl WORKDIR gibt das Verzeichnis im Image an, in dem nachfolgende Anweisungen ausgeführt werden.
Der Befehl COPY kopiert den Trainer-Code in das Docker-Image. In diesem Beispiel haben wir nur eine Python-Datei im Trainer-Verzeichnis. In einem realistischeren Beispiel wären wahrscheinlich weitere Dateien vorhanden. Möglicherweise eine Datei mit dem Namen data.py, die die Datenvorverarbeitung übernimmt, und eine Datei mit dem Namen model.py, die nur den Modellcode enthält. Weitere Informationen zu komplexerem Trainingscode finden Sie in der Python-Dokumentation zum Erstellen von Paketen für Python-Projekte.
Wenn Sie zusätzliche Bibliotheken hinzufügen möchten, können Sie den Befehl RUN verwenden, um sie mit pip zu installieren (z. B. RUN pip install -r requirements.txt). Für unser Beispiel ist jedoch nichts Zusätzliches erforderlich.
Schließlich richtet der Befehl ENTRYPOINT den Einstiegspunkt zum Aufrufen des Trainers ein. Dieser Befehl wird ausgeführt, wenn wir den Trainingsjob starten. In unserem Fall wird die Datei task.py ausgeführt.
Weitere Informationen zum Schreiben von Dockerfiles für Vertex AI Training finden Sie hier.
Schritt 4: Container erstellen
Führen Sie im Terminal Ihres Workbench-Notebooks den folgenden Befehl aus, um eine Umgebungsvariable für Ihr Projekt zu definieren. Ersetzen Sie dabei your-cloud-project durch die ID Ihres Projekts:
PROJECT_ID='your-cloud-project'
Repository in Artifact Registry erstellen
REPO_NAME='flower-app'
gcloud artifacts repositories create $REPO_NAME --repository-format=docker \
--location=us-central1 --description="Docker repository"
Definieren Sie eine Variable mit dem URI Ihres Container-Images in Google Artifact Registry:
IMAGE_URI=us-central1-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/flower_image:latest
Docker konfigurieren
gcloud auth configure-docker \
us-central1-docker.pkg.dev
Erstellen Sie dann den Container, indem Sie den folgenden Befehl im Stammverzeichnis Ihres Verzeichnisses flower ausführen:
docker build ./ -t $IMAGE_URI
Übertragen Sie ihn schließlich per Push in Artifact Registry:
docker push $IMAGE_URI
Nachdem der Container per Push in Artifact Registry übertragen wurde, können Sie den Trainingsjob starten.
5. Benutzerdefinierten Trainingsjob in Vertex AI ausführen
In diesem Lab wird benutzerdefiniertes Training über einen benutzerdefinierten Container in Google Artifact Registry verwendet. Sie können aber auch einen Trainingsjob mit den vordefinierten Containern ausführen.
Rufen Sie zuerst den Bereich Training im Bereich „Vertex AI“ der Cloud Console auf:

Schritt 1: Trainingsjob konfigurieren
Klicken Sie auf Erstellen , um die Parameter für den Trainingsjob einzugeben.

- Wählen Sie unter Dataset die Option Kein verwaltetes Dataset aus.
- Wählen Sie dann Benutzerdefiniertes Training (erweitert) als Trainingsmethode aus und klicken Sie auf Weiter.
- Wählen Sie Neues Modell trainieren aus und geben Sie unter Modellname
flowers-model(oder einen beliebigen anderen Namen für Ihr Modell) ein. - Klicken Sie auf Weiter.
Wählen Sie im Schritt „Containereinstellungen“ die Option Benutzerdefinierter Container aus:

Geben Sie im ersten Feld (Container-Image) den Wert der Variablen IMAGE_URI aus dem vorherigen Abschnitt ein. Er sollte so aussehen: us-central1-docker.pkg.dev/{PROJECT_ID}/flower-app/flower_image:latest, wobei `{PROJECT_ID}` durch Ihre Projekt-ID ersetzt wird. Lassen Sie die übrigen Felder leer und klicken Sie auf Weiter.
Überspringen Sie den Schritt „Hyperparameter“ und klicken Sie noch einmal auf Weiter.
Schritt 2: Compute-Cluster konfigurieren
Konfigurieren Sie Worker-Pool 0 so:

Wir überspringen Schritt 6 vorerst und konfigurieren den Vorhersagecontainer im nächsten Lab dieser Reihe.
Klicken Sie auf TRAINING STARTEN , um den Trainingsjob zu starten. Im Bereich „Training“ der Console sehen Sie auf dem Tab TRAININGSPIPLINES den neu gestarteten Job:

🎉 Das wars! 🎉
Sie haben gelernt, wie Sie mit Vertex AI Folgendes tun:
- Benutzerdefinierten Trainingsjob für Trainingscode starten, der in einem benutzerdefinierten Container bereitgestellt wird. In diesem Beispiel haben Sie ein TensorFlow-Modell verwendet. Sie können aber auch ein Modell trainieren, das mit einem beliebigen Framework erstellt wurde, indem Sie benutzerdefinierte oder integrierte Container verwenden.
Weitere Informationen zu den verschiedenen Bereichen von Vertex finden Sie in der Dokumentation.
6. [Optional] Vertex AI Python SDK verwenden
Im vorherigen Abschnitt wurde gezeigt, wie Sie den Trainingsjob über die UI starten. In diesem Abschnitt sehen Sie eine alternative Möglichkeit, den Trainingsjob mit dem Vertex AI Python SDK zu senden.
Kehren Sie zu Ihrer Notebook-Instanz zurück und erstellen Sie über den Launcher ein TensorFlow 2-Notebook:

Importieren Sie das Vertex AI SDK.
from google.cloud import aiplatform
Erstellen Sie dann einen CustomContainerTrainingJob. Ersetzen Sie {PROJECT_ID} in container_uri durch den Namen Ihres Projekts und ersetzen Sie {BUCKET} in staging_bucket durch den zuvor erstellten Bucket.
my_job = aiplatform.CustomContainerTrainingJob(display_name='flower-sdk-job',
container_uri='us-central1-docker.pkg.dev/{PROJECT_ID}/flower-app/flower_image:latest',
staging_bucket='gs://{BUCKET}')
Führen Sie dann den Job aus.
my_job.run(replica_count=1,
machine_type='n1-standard-8',
accelerator_type='NVIDIA_TESLA_V100',
accelerator_count=1)
Zu Demonstrationszwecken wurde dieser Job so konfiguriert, dass er auf einer größeren Maschine als im vorherigen Abschnitt ausgeführt wird. Außerdem verwenden wir eine GPU. Wenn Sie machine-type, accelerator_type oder accelerator_count nicht angeben, wird der Job standardmäßig auf einer n1-standard-4-Maschine ausgeführt.
Im Bereich „Training“ der Console sehen Sie auf dem Tab BENUTZERDEFINIERTE JOBS den Trainingsjob:
7. Bereinigen
Da verwaltete Vertex AI Workbench-Notebooks ein Feature zum Herunterfahren bei Inaktivität haben, müssen wir uns nicht um das Herunterfahren der Instanz kümmern. Wenn Sie die Instanz manuell herunterfahren möchten, klicken Sie im Bereich „Vertex AI Workbench“ der Console auf die Schaltfläche „Beenden“. Wenn Sie das Notebook vollständig löschen möchten, klicken Sie auf die Schaltfläche „Löschen“.

Wenn Sie den Storage-Bucket löschen möchten, rufen Sie im Navigationsmenü der Cloud Console „Storage“ auf, wählen Sie den Bucket aus und klicken Sie auf „Löschen“:
