Vertex AI Workbench: crea un modello di classificazione delle immagini con Transfer Learning e esecutore del blocco note

1. Panoramica

In questo lab imparerai a configurare e avviare le esecuzioni di blocchi note con Vertex AI Workbench.

Cosa imparerai

Al termine del corso sarai in grado di:

  • Utilizzare i parametri in un blocco note
  • Configura e avvia le esecuzioni di blocchi note dall'interfaccia utente di Vertex AI Workbench

Il costo totale per eseguire questo lab su Google Cloud è di circa 2 $.

2. Introduzione a Vertex AI

Questo lab utilizza la più recente offerta di prodotti AI disponibile su Google Cloud. Vertex AI integra le offerte ML di Google Cloud in un'esperienza di sviluppo fluida. In precedenza, i modelli addestrati con AutoML e i modelli personalizzati erano accessibili tramite servizi separati. La nuova offerta combina entrambi in un'unica API, insieme ad altri nuovi prodotti. Puoi anche migrare progetti esistenti su Vertex AI. In caso di feedback, consulta la pagina di supporto.

Vertex AI include molti prodotti diversi per supportare i flussi di lavoro ML end-to-end. Questo lab si concentrerà su Vertex AI Workbench.

Vertex AI Workbench aiuta gli utenti a creare rapidamente flussi di lavoro end-to-end basati su notebook tramite un'integrazione profonda con i servizi di dati (come Dataproc, Dataflow, BigQuery e Dataplex) e Vertex AI. Consente ai data scientist di connettersi ai servizi dati di Google Cloud, analizzare i set di dati, sperimentare diverse tecniche di modellazione, eseguire il deployment dei modelli addestrati in produzione e gestire MLOps durante il ciclo di vita del modello.

3. Panoramica del caso d'uso

In questo lab userai il transfer learning per addestrare un modello di classificazione delle immagini sul set di dati DeepWeeds dei set di dati TensorFlow. Utilizzerai TensorFlow Hub per sperimentare con vettori di funzionalità estratti da diverse architetture di modelli, come ResNet50, Inception e MobileNet, tutti preaddestrati sul set di dati di benchmark ImageNet. Sfruttando l'executor di notebook tramite l'interfaccia utente di Vertex AI Workbench, lancerai job in Vertex AI Training che utilizzano questi modelli preaddestrati e addestrerai di nuovo l'ultimo livello per riconoscere le classi del set di dati DeepWeeds.

4. Configura l'ambiente

Per eseguire questo codelab, devi disporre di un progetto Google Cloud con la fatturazione abilitata. Per creare un progetto, segui le istruzioni riportate qui.

Passaggio 1: abilita l'API Compute Engine

Vai a Compute Engine e seleziona Attiva se non è già abilitato.

Passaggio 2: attiva l'API Vertex AI

Vai alla sezione Vertex AI della tua console Cloud e fai clic su Abilita API Vertex AI.

Dashboard di Vertex AI

Passaggio 3: crea un'istanza di Vertex AI Workbench

Dalla sezione Vertex AI della console Cloud, fai clic su Workbench:

Menu Vertex AI

Abilita l'API Notebooks, se non lo è già.

Notebook_api

Una volta attivata, fai clic su NOTEBOOK GESTORI:

Notebooks_UI

Quindi seleziona NUOVO NOTEBOOK.

new_notebook

Assegna un nome al notebook e fai clic su Impostazioni avanzate.

create_notebook

In Impostazioni avanzate, abilita l'arresto per inattività e imposta il numero di minuti su 60. Ciò significa che il blocco note si arresterà automaticamente quando non è in uso, per evitare costi inutili.

idle_timeout

Puoi lasciare invariate tutte le altre impostazioni avanzate.

Quindi, fai clic su Crea.

Una volta creata l'istanza, seleziona Apri JupyterLab.

open_jupyterlab

La prima volta che utilizzi una nuova istanza, ti verrà chiesto di autenticarti.

autenticare

Vertex AI Workbench dispone di un livello di compatibilità di calcolo che ti consente di avviare kernel per TensorFlow, PySpark, R e così via, il tutto da una singola istanza del notebook. Dopo l'autenticazione, potrai selezionare il tipo di blocco note che vuoi utilizzare da Avvio app.

Per questo lab, seleziona il kernel TensorFlow 2.

tf_kernel

5. Scrivi il codice di addestramento

Il set di dati di DeepWeeds è composto da 17.509 immagini che catturano otto diverse specie di erbacce native dell'Australia. In questa sezione scriverai il codice per pre-elaborare il set di dati DeepWeeds e creare e addestrare un modello di classificazione delle immagini utilizzando i vettori di caratteristiche scaricati da TensorFlow Hub.

Dovrai copiare i seguenti snippet di codice nelle celle del tuo notebook. L'esecuzione delle celle è facoltativa.

Passaggio 1: scarica e pre-elabora il set di dati

Innanzitutto, installa la versione notturna dei set di dati TensorFlow per assicurarti di acquisire la versione più recente del set di dati DeepWeeds.

!pip install tfds-nightly

Importa quindi le librerie necessarie:

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

Scarica i dati dai set di dati TensorFlow ed estrai il numero di classi e le dimensioni del set di dati.

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

Definisci una funzione di pre-elaborazione per scalare i dati dell'immagine per 255.

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

Il set di dati DeepWeeds non include le suddivisioni di addestramento e convalida. È fornito solo con un set di dati di addestramento. Nel codice riportato di seguito utilizzerai l'80% di questi dati per l'addestramento e il restante 20% per la convalida.

# 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)

Passaggio 2: crea il modello

Ora che hai creato i set di dati di addestramento e convalida, puoi creare il tuo modello. TensorFlow Hub fornisce vettori di funzionalità, ovvero modelli preaddestrati senza il livello di classificazione superiore. Creerai un estrattore di funzionalità avvolgendo il modello preaddestrato con hub.KerasLayer, che avvolge un SavedModel di TensorFlow come livello Keras. Successivamente, aggiungerai uno strato di classificazione e creerai un modello con l'API Sequential Keras.

Per prima cosa, definisci il parametro feature_extractor_model, che è il nome del vettore di caratteristiche TensorFlow Hub che utilizzerai come base per il tuo modello.

feature_extractor_model = "inception_v3"

Successivamente, renderai questa cella una cella di parametro, che ti consentirà di passare un valore per feature_extractor_model durante l'esecuzione.

Innanzitutto, seleziona la cella e fai clic sull'ispettore delle proprietà nel riquadro a destra.

property_inspector

I tag sono un modo semplice per aggiungere metadati al tuo notebook. Digita "parametri" nella casella Aggiungi tag e premi Invio. In seguito, durante la configurazione dell'esecuzione, passerai i diversi valori, in questo caso il modello TensorFlow Hub che vuoi testare. Tieni presente che devi digitare la parola "parameters" (e non un'altra parola), in quanto è così che l'eseguitore del notebook sa quali celle parametrizzare.

add_tag

Puoi chiudere l'inspector della proprietà facendo di nuovo clic sull'icona a forma di ingranaggio.

Crea una nuova cella e definisci tf_hub_uri, dove utilizzerai l'interpolazione di stringhe per sostituire il nome del modello preaddestrato che vuoi utilizzare come modello di base per un'esecuzione specifica del tuo notebook. Per impostazione predefinita, hai impostato feature_extractor_model su "inception_v3", ma altri valori validi sono "resnet_v2_50" o "mobilenet_v1_100_224". Puoi esplorare opzioni aggiuntive nel catalogo di TensorFlow.

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

A questo punto, crea l'estrattore di funzionalità utilizzando hub.KerasLayer e passando il valore tf_hub_uri definito sopra. Imposta l'argomento trainable=False per bloccare le variabili in modo che l'addestramento modifichi solo il nuovo livello del classificatore che aggiungerai in primo piano.

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

Per completare il modello, aggrega il livello di estrattore di caratteristiche in un modello tf.keras.Sequential e aggiungi uno livello completamente connesso per la classificazione. Il numero di unità in questa testa di classificazione deve essere uguale al numero di classi nel set di dati:

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

Infine, compila e adatta il modello.

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. Esegui il notebook

Fai clic sull'icona Esecutore nella parte superiore del blocco note.

esecutore

Passaggio 1: configura il job di addestramento

Assegna un nome all'esecuzione e fornisci un bucket di archiviazione nel tuo progetto.

executor_config

Imposta il tipo di macchina su 4 CPU, 15 GB di RAM.

Aggiungi anche 1 GPU NVIDIA.

Imposta l'ambiente su TensorFlow Enterprise 2.6 (GPU).

Scegli Esecuzione una tantum.

Passaggio 2: configura i parametri

Fai clic sul menu a discesa OPZIONI AVANZATE per impostare il parametro. Nella casella, digita feature_extractor_model=resnet_v2_50. In questo modo, resnet_v2_50 sostituirà inception_v3, il valore predefinito impostato per questo parametro nel notebook.

advanced_options

Puoi lasciare selezionata la casella Utilizza account di servizio predefinito.

Quindi, fai clic su INVIA.

Passaggio 3: esamina i risultati

Nella scheda Esecuzioni dell'interfaccia utente della console puoi visualizzare lo stato dell'esecuzione del blocco note.

executions_UI

Se fai clic sul nome dell'esecuzione, verrà visualizzato il job Vertex AI Training in cui è in esecuzione il tuo blocco note.

vertex_training

Al termine del job, potrai visualizzare il notebook di output facendo clic su VISUALIZZA RISULTATO.

view_result

Nel blocco note di output, noterai che il valore per feature_extractor_model è stato sovrascritto dal valore trasmesso in fase di runtime.

param_cells

🎉 Complimenti! 🎉

Hai imparato a utilizzare Vertex AI Workbench per:

  • Utilizzare i parametri in un blocco note
  • Configurare e avviare le esecuzioni dei blocchi note dall'interfaccia utente di Vertex AI Workbench

Per saperne di più sulle diverse parti di Vertex AI, consulta la documentazione.

7. Esegui la pulizia

Per impostazione predefinita, i notebook gestiti si spengono automaticamente dopo 180 minuti di inattività. Se vuoi arrestare manualmente l'istanza, fai clic sul pulsante Arresta nella sezione Vertex AI Workbench della console. Per eliminare completamente il blocco note, fai clic sul pulsante Elimina.

elimina

Per eliminare il bucket di archiviazione, utilizza il menu di navigazione nella console Cloud, vai a Storage, seleziona il bucket e fai clic su Elimina:

Elimina spazio di archiviazione