Vertex AI Workbench: Image-Klassifizierungsmodell mit Lerntransfer und Notebook-Executor erstellen

Vertex AI Workbench:
Modell zur Bildklassifizierung mit Transfer Learning und dem Notebook-Executor erstellen

Informationen zu diesem Codelab

subjectZuletzt aktualisiert: Mai 23, 2022
account_circleVerfasst von Nikita Namjoshi

1. Übersicht

In diesem Lab lernen Sie, wie Sie Notebookausführungen mit Vertex AI Workbench konfigurieren und starten.

Lerninhalte

Die folgenden Themen werden behandelt:

  • Parameter in einem Notebook verwenden
  • Notebookausführungen über die Vertex AI Workbench-UI konfigurieren und starten

Die Gesamtkosten für das Lab in Google Cloud belaufen sich auf 2$.

2. Einführung in Vertex AI

In diesem Lab wird das neueste KI-Produktangebot von Google Cloud verwendet. Vertex AI bindet die ML-Angebote in Google Cloud in eine nahtlose Entwicklungsumgebung ein. Zuvor waren mit AutoML trainierte und benutzerdefinierte Modelle über separate Dienste zugänglich. Das neue Angebot vereint beides in einer einzigen API sowie weitere neue Produkte. Sie können auch vorhandene Projekte zu Vertex AI migrieren. Wenn Sie uns Feedback geben möchten, besuchen Sie die Supportseite.

Vertex AI enthält viele verschiedene Produkte zur Unterstützung von End-to-End-ML-Workflows. In diesem Lab geht es um Vertex AI Workbench.

Mit Vertex AI Workbench können Nutzer schnell End-to-End-Notebook-basierte Workflows erstellen, da sie tief in Datendienste wie Dataproc, Dataflow, BigQuery und Dataplex sowie Vertex AI eingebunden sind. Data Scientists können eine Verbindung zu GCP-Datendiensten herstellen, Datasets analysieren, mit verschiedenen Modellierungstechniken experimentieren, trainierte Modelle in der Produktion bereitstellen und MLOps während des gesamten Modelllebenszyklus verwalten.

3. Anwendungsfall – Übersicht

In diesem Lab trainieren Sie mithilfe von Transferlernen ein Bildklassifizierungsmodell mit dem DeepWeeds-Dataset aus TensorFlow Datasets. Sie verwenden TensorFlow Hub, um mit Featurevektoren zu experimentieren, die aus verschiedenen Modellarchitekturen wie ResNet50, Inception und MobileNet extrahiert wurden. Diese wurden mit dem ImageNet-Benchmark-Dataset vortrainiert. Wenn Sie den Notebook-Executor über die Vertex AI Workbench-UI nutzen, starten Sie Jobs in Vertex AI Training, die diese vortrainierten Modelle verwenden, und trainieren die letzte Ebene noch einmal, um die Klassen aus dem DeepWeeds-Dataset zu erkennen.

4. Umgebung einrichten

Sie benötigen ein Google Cloud Platform-Projekt mit aktivierter Abrechnung, um dieses Codelab auszuführen. Folgen Sie dieser Anleitung, um ein Projekt zu erstellen.

Schritt 1: Compute Engine API aktivieren

Rufen Sie Compute Engine auf und wählen Sie Aktivieren aus, falls die Option noch nicht aktiviert ist.

Schritt 2: Vertex AI API aktivieren

Rufen Sie den Bereich Vertex AI in der Cloud Console auf und klicken Sie auf Vertex AI API aktivieren.

Vertex AI-Dashboard

Schritt 3: Vertex AI Workbench-Instanz erstellen

Klicken Sie im Bereich Vertex AI der Cloud Console auf Workbench:

Vertex AI-Menü

Aktivieren Sie die Notebooks API, falls noch nicht geschehen.

Notebook_api

Klicken Sie nach der Aktivierung auf VERWALTETE NOTEBOOKS:

Notebooks_UI

Wählen Sie dann NEUES NOTEBOOK aus.

new_notebook

Geben Sie Ihrem Notebook einen Namen und klicken Sie auf Erweiterte Einstellungen.

create_notebook

Aktivieren Sie unter „Erweiterte Einstellungen“ das Herunterfahren bei Inaktivität und legen Sie die Anzahl der Minuten auf 60 fest. Das bedeutet, dass Ihr Notebook bei Nichtgebrauch automatisch heruntergefahren wird, sodass Ihnen keine unnötigen Kosten entstehen.

idle_timeout

Alle anderen erweiterten Einstellungen können Sie unverändert lassen.

Klicken Sie dann auf Erstellen.

Wählen Sie nach dem Erstellen der Instanz JupyterLab öffnen aus.

open_jupyterlab

Wenn Sie zum ersten Mal eine neue Instanz verwenden, werden Sie zur Authentifizierung aufgefordert.

Authentifizieren

Vertex AI Workbench hat eine Computing-Kompatibilitätsebene, mit der Sie Kernel für TensorFlow, PySpark, R usw. über eine einzige Notebookinstanz starten können. Nach der Authentifizierung können Sie im Launcher den Notebooktyp auswählen, den Sie verwenden möchten.

Wählen Sie für dieses Lab den TensorFlow 2-Kernel aus.

tf_kernel

5. Trainingscode schreiben

Das DeepWeeds-Dataset besteht aus 17.509 Bildern, die acht verschiedene, in Australien heimische Unkrautarten abbilden. In diesem Abschnitt schreiben Sie den Code zur Vorverarbeitung des DeepWeeds-Datasets und erstellen und trainieren mithilfe von Featurevektoren, die von TensorFlow Hub heruntergeladen wurden, ein Bildklassifizierungsmodell.

Sie müssen die folgenden Code-Snippets in die Zellen Ihres Notebooks kopieren. Die Ausführung der Zellen ist optional.

Schritt 1: Dataset herunterladen und vorverarbeiten

Installieren Sie zuerst die nächtliche Version der TensorFlow-Datasets, damit wir die neueste Version des DeepWeeds-Datasets abrufen.

!pip install tfds-nightly

Importieren Sie dann die erforderlichen Bibliotheken:

import tensorflow as tf
import tensorflow_datasets as tfds
import tensorflow_hub as hub

Laden Sie die Daten aus TensorFlow-Datasets herunter und extrahieren Sie die Anzahl der Klassen und die Dataset-Größe.

data, info = tfds.load(name='deep_weeds', as_supervised=True, with_info=True)
NUM_CLASSES = info.features['label'].num_classes
DATASET_SIZE = info.splits['train'].num_examples

Definieren Sie eine Vorverarbeitungsfunktion, um die Bilddaten um 255 zu skalieren.

def preprocess_data(image, label):
  image
= tf.image.resize(image, (300,300))
 
return tf.cast(image, tf.float32) / 255., label

Das DeepWeeds-Dataset enthält keine Trainings-/Validierungs-Splits. Es ist nur mit einem Trainings-Dataset enthalten. Im folgenden Code verwenden Sie 80% dieser Daten für das Training und die restlichen 20% für die Validierung.

# Create train/validation splits

# Shuffle dataset
dataset
= data['train'].shuffle(1000)

train_split
= 0.8
val_split
= 0.2
train_size
= int(train_split * DATASET_SIZE)
val_size = int(val_split * DATASET_SIZE)

train_data
= dataset.take(train_size)
train_data  
= train_data.map(preprocess_data)
train_data  
= train_data.batch(64)

validation_data
= dataset.skip(train_size)
validation_data  
= validation_data.map(preprocess_data)
validation_data  
= validation_data.batch(64)

Schritt 2: Modell erstellen

Nachdem Sie nun Trainings- und Validierungs-Datasets erstellt haben, können Sie Ihr Modell erstellen. TensorFlow Hub bietet Featurevektoren, also vortrainierte Modelle ohne die oberste Klassifizierungsebene. Sie erstellen einen Feature-Extractor, indem Sie das vortrainierte Modell in hub.KerasLayer einbetten, das ein TensorFlow SavedModel als Keras-Ebene umschließt. Anschließend fügen Sie eine Klassifizierungsebene hinzu und erstellen ein Modell mit der Keras Sequential API.

Definieren Sie zuerst den Parameter feature_extractor_model. Das ist der Name des TensorFlow Hub-Featurevektors, den Sie als Grundlage für Ihr Modell verwenden.

feature_extractor_model = "inception_v3"

Als Nächstes machen Sie diese Zelle zu einer Parameterzelle, damit Sie bei der Laufzeit einen Wert für feature_extractor_model übergeben können.

Wählen Sie zuerst die Zelle aus und klicken Sie im rechten Steuerfeld auf das Property Inspector (Eigenschafteninspektor).

property_inspector

Mithilfe von Tags können Sie Ihrem Notebook ganz einfach Metadaten hinzufügen. Geben Sie „Parameter“ ein in das Feld Tag hinzufügen ein und drücken Sie die Eingabetaste. Später, wenn Sie die Ausführung konfigurieren, geben Sie die verschiedenen Werte ein, in diesem Fall das TensorFlow Hub-Modell, das Sie testen möchten. Sie müssen das Wort „Parameter“ eingeben und kein anderes Wort, da der Notebook-Ausführer so weiß, welche Zellen parametrisiert werden sollen.

add_tag

Sie können den Property Inspector schließen, indem Sie noch einmal auf das Doppelzahnradsymbol klicken.

Erstellen Sie eine neue Zelle und definieren Sie die tf_hub_uri, in der Sie mithilfe von Stringinterpolation den Namen des vortrainierten Modells, das Sie als Basismodell für eine bestimmte Ausführung Ihres Notebooks verwenden möchten, ersetzen. Standardmäßig ist für feature_extractor_model der Wert "inception_v3" festgelegt. Andere gültige Werte sind jedoch "resnet_v2_50" oder "mobilenet_v1_100_224". Weitere Optionen finden Sie im TensorFlow Hub-Katalog.

tf_hub_uri = f"https://tfhub.dev/google/imagenet/{feature_extractor_model}/feature_vector/5"

Erstellen Sie als Nächstes mit hub.KerasLayer den Feature-Extraktor und übergeben Sie das oben definierte tf_hub_uri. Legen Sie das Argument trainable=False so fest, dass die Variablen fixiert werden, sodass beim Training nur die neue Klassifikatorebene geändert wird, die Sie oben hinzufügen.

feature_extractor_layer = hub.KerasLayer(
    tf_hub_uri
,
    trainable
=False)

Fassen Sie die Feature-Extrahiererebene in einem tf.keras.Sequential-Modell zusammen und fügen Sie eine vollständig verbundene Ebene für die Klassifizierung hinzu. Die Anzahl der Einheiten in diesem Klassifizierungskopf sollte der Anzahl der Klassen im Datensatz entsprechen:

model = tf.keras.Sequential([
  feature_extractor_layer
,
  tf
.keras.layers.Dense(units=NUM_CLASSES)
])

Zuletzt müssen Sie das Modell kompilieren und anpassen.

model.compile(
  optimizer
=tf.keras.optimizers.Adam(),
  loss
=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
  metrics
=['acc'])

model
.fit(train_data, validation_data=validation_data, epochs=3)

6. Notebook ausführen

Klicken Sie oben im Notebook auf das Symbol Executor.

Executor

Schritt 1: Trainingsjob konfigurieren

Geben Sie der Ausführung einen Namen und geben Sie einen Storage-Bucket in Ihrem Projekt an.

executor_config

Legen Sie als Maschinentyp 4 CPUs, 15 GB RAM fest.

Fügen Sie 1 NVIDIA GPU hinzu.

Legen Sie als Umgebung TensorFlow Enterprise 2.6 (GPU) fest.

Wählen Sie „Einmalige Ausführung“ aus.

Schritt 2: Parameter konfigurieren

Klicken Sie auf das Drop-down-Menü ERWEITERTE OPTIONEN, um den Parameter festzulegen. Geben Sie feature_extractor_model=resnet_v2_50 in das Feld ein. Dadurch wird der Standardwert, den Sie für diesen Parameter im Notebook festgelegt haben, inception_v3 mit resnet_v2_50 überschrieben.

advanced_options

Sie können das Kästchen Standarddienstkonto verwenden angeklickt lassen.

Klicken Sie dann auf SENDEN.

Schritt 3: Ergebnisse prüfen

Auf dem Tab „Ausführungen“ in der Console-UI können Sie den Status Ihrer Notebook-Ausführung sehen.

executions_UI

Wenn Sie auf den Ausführungsnamen klicken, werden Sie zum Vertex AI Training-Job weitergeleitet, in dem Ihr Notebook ausgeführt wird.

vertex_training

Wenn der Job abgeschlossen ist, können Sie das Ausgabe-Notebook aufrufen, indem Sie auf ERGEBNIS ANSEHEN klicken.

view_result

Im Ausgabenotebook sehen Sie, dass der Wert für feature_extractor_model durch den Wert überschrieben wurde, den Sie zur Laufzeit übergeben haben.

param_cells

🎉 Glückwunsch! 🎉

Sie haben gelernt, wie Sie mit Vertex AI Workbench:

  • Parameter in einem Notebook verwenden
  • Notebookausführungen über die Vertex AI Workbench-UI konfigurieren und starten

Weitere Informationen zu den verschiedenen Teilen von Vertex AI finden Sie in der Dokumentation.

7. Bereinigen

Standardmäßig werden verwaltete Notebooks nach 180 Minuten Inaktivität automatisch heruntergefahren. Wenn Sie die Instanz manuell herunterfahren möchten, klicken Sie in der Console im Abschnitt Vertex AI Workbench auf die Schaltfläche „Stop“. Wenn Sie das Notizbuch vollständig löschen möchten, klicken Sie auf Löschen.

Löschen

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

Speicher löschen