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

Imparerai a:

  • 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 l'esecuzione di 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 è incentrato su Vertex AI Workbench.

Vertex AI Workbench consente agli utenti di creare rapidamente flussi di lavoro end-to-end basati su blocchi note attraverso un'integrazione approfondita 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 set di dati, sperimentare diverse tecniche di modellazione, eseguire il deployment di modelli addestrati in produzione e gestire MLOps attraverso il ciclo di vita dei modelli.

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 vettori di caratteristiche estratti da diverse architetture di modelli, come ResNet50, Inception e MobileNet, tutti preaddestrati sul set di dati di benchmark ImageNet. Sfruttando l'esecutore del blocco note tramite l'interfaccia utente di Vertex AI Workbench, avvierai job in Vertex AI Training che utilizzano questi modelli preaddestrati e riaddestrare l'ultimo livello a riconoscere le classi dal set di dati DeepWeeds.

4. Configura l'ambiente

Per eseguire questo codelab, è necessario un progetto Google Cloud con fatturazione abilitata. Per creare un progetto, segui le istruzioni riportate qui.

Passaggio 1: abilita l'API Compute Engine

Passa a Compute Engine e seleziona Abilita se non è già abilitato.

Passaggio 2: abilita 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

Dopo averla attivata, fai clic su NOTEBOOK GESTITI:

Notebooks_UI

Quindi seleziona NUOVO Blocco note.

new_notebook

Assegna un nome al blocco note, quindi 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 offre un livello di compatibilità del calcolo che ti consente di avviare kernel per TensorFlow, PySpark, R e così via, il tutto da un'unica istanza di blocco note. 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 blocco note. 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 recuperare l'ultima versione del set di dati DeepWeeds.

!pip install tfds-nightly

Quindi, importa 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 di 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. Viene 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 un modello

Ora che hai creato i set di dati di addestramento e convalida, puoi iniziare a creare il tuo modello. TensorFlow Hub fornisce vettori di caratteristiche, che sono modelli preaddestrati senza il livello di classificazione principale. Creerai un estrattore di caratteristiche eseguendo il wrapping del modello preaddestrato con hub.KerasLayer, che aggrega un TensorFlow SavedModel 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.

Per prima cosa, seleziona la cella e fai clic sulla finestra di controllo delle proprietà nel riquadro a destra.

property_inspector

I tag sono un modo semplice per aggiungere metadati al tuo blocco note. 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 "parametri" (e nessun'altra parola), perché è così che l'esecutore del blocco note sa quali celle parametrizzare.

add_tag

Puoi chiudere la finestra di controllo delle proprietà facendo di nuovo clic sulla doppia icona a forma di ingranaggio.

Crea una nuova cella e definisci tf_hub_uri, in cui utilizzerai l'interpolazione di stringhe per sostituire il nome del modello preaddestrato che vuoi usare come modello di base per un'esecuzione specifica del tuo blocco note. 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"

Poi, crea l'estrattore di caratteristiche utilizzando hub.KerasLayer e passando il 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 blocco note

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.

e aggiungi 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. Questa operazione sostituirà inception_v3, il valore predefinito impostato per questo parametro nel blocco note, con resnet_v2_50.

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

Una volta completato il job, potrai vedere il blocco note 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 come utilizzare Vertex AI Workbench per:

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

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

7. Esegui la pulizia

Per impostazione predefinita, i blocchi note gestiti si arrestano 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, utilizzando il menu di navigazione nella console Cloud, vai a Storage, seleziona il bucket e fai clic su Elimina:

Elimina spazio di archiviazione