arrow_back

Vertex AI: ottimizzazione degli iperparametri

Accedi Partecipa
Quick tip: Review the prerequisites before you run the lab
Use an Incognito or private browser window to run this lab. This prevents any conflicts between your personal account and the student account, which may cause extra charges incurred to your personal account.
Metti alla prova le tue conoscenze e condividile con la nostra community.
done
Accedi a oltre 700 lab pratici, badge delle competenze e corsi

Vertex AI: ottimizzazione degli iperparametri

Lab 2 ore 30 minuti universal_currency_alt 5 crediti show_chart Avanzati
info Questo lab potrebbe incorporare strumenti di AI a supporto del tuo apprendimento.
Metti alla prova le tue conoscenze e condividile con la nostra community.
done
Accedi a oltre 700 lab pratici, badge delle competenze e corsi

Panoramica

In questo lab imparerai a utilizzare Vertex AI per eseguire un job di ottimizzazione degli iperparametri per un modello TensorFlow. Sebbene questo lab utilizzi TensorFlow per il codice del modello, potresti facilmente sostituirlo con un altro framework.

Obiettivi di apprendimento

  • Creare un notebook di istanza di Workbench.
  • Modificare il codice dell'applicazione di addestramento per l'ottimizzazione degli iperparametri.
  • Avviare un job di ottimizzazione degli iperparametri dall'interfaccia utente di Vertex AI.

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 sui prodotti evidenziati di seguito: addestramento/ottimizzazione degli iperparametri e blocchi note.

Vertex AI offre due soluzioni di notebook, Workbench e Colab Enterprise.

Workbench

Vertex AI Workbench è una buona soluzione per i progetti che danno priorità al controllo e alla personalizzazione. È ideale per i progetti elaborati che comprendono più file, con dipendenze complesse. Rappresenta anche una valida scelta per i data scientist che stanno passando al cloud da una workstation o un laptop.

Le istanze di Vertex AI Workbench sono dotate di una suite preinstallata di pacchetti di deep learning, tra cui il supporto per i framework di TensorFlow e PyTorch.

Configurazione e requisiti

Per ciascun lab, riceverai un nuovo progetto Google Cloud e un insieme di risorse per un periodo di tempo limitato senza alcun costo aggiuntivo.

  1. Accedi a Qwiklabs utilizzando una finestra di navigazione in incognito.

  2. Tieni presente la durata dell'accesso al lab (ad esempio, 1:15:00) e assicurati di finire entro quell'intervallo di tempo.
    Non è disponibile una funzionalità di pausa. Se necessario, puoi riavviare il lab ma dovrai ricominciare dall'inizio.

  3. Quando è tutto pronto, fai clic su Inizia lab.

  4. Annota le tue credenziali del lab (Nome utente e Password). Le userai per accedere a Google Cloud Console.

  5. Fai clic su Apri console Google.

  6. Fai clic su Utilizza un altro account e copia/incolla le credenziali per questo lab nei prompt.
    Se utilizzi altre credenziali, compariranno errori oppure ti verranno addebitati dei costi.

  7. Accetta i termini e salta la pagina di ripristino delle risorse.

Abilita l'API Compute Engine

  1. Nella console Cloud, fai clic sul menu di navigazione > API e servizi > Libreria.

  2. Cerca API Compute Engine, quindi fai clic su Abilita se non è già abilitato. Ne avrai bisogno per creare la tua istanza di blocco note.

Abilita l'API Container Registry

  1. Nella console Cloud, fai clic sul menu di navigazione > API e servizi > Libreria.

  2. Cerca API Google Container Registry e seleziona Abilita se non è già selezionato. Lo utilizzerai per creare un container per il tuo job di addestramento personalizzato.

Attività 1: avvia l'istanza di Vertex AI Workbench

  1. Nella console Google Cloud, dal menu di navigazione (), seleziona Vertex AI.

  2. Fai clic su Abilita tutte le API consigliate.

  3. Nel menu di navigazione, fai clic su Workbench.

    Nella parte superiore della pagina Workbench, assicurati di essere nella vista Istanze.

  4. Fai clic su Crea nuova.

  5. Configura l'istanza:

    • Nome: lab-workbench
    • Regione: imposta la regione su
    • Zona: imposta la zona su
    • (Facoltativo) Opzioni avanzate: se necessario, fai clic su "Opzioni avanzate" per un'ulteriore personalizzazione (ad es. tipo di macchina, dimensione del disco).

  1. Fai clic su Crea.

La creazione dell'istanza richiede alcuni minuti. Quando è pronta, viene visualizzato un segno di spunta verde accanto al nome.

  1. Accanto al nome dell'istanza, fai clic su APRI JUPYTERLAB per avviare l'interfaccia di JupyterLab. Nel browser verrà visualizzata una nuova scheda.

Nota: il modello che addestrerai e ottimizzerai in questo lab è un modello di classificazione delle immagini addestrato sul set di dati di cavalli o esseri umani dai set di dati TensorFlow.

Fai clic su Controlla i miei progressi per verificare l'obiettivo. Avvia l'istanza di Vertex AI Workbench

Attività 2: containerizza il codice dell'applicazione di addestramento

Invierai questo job di ottimizzazione degli iperparametri a Vertex inserendo il codice dell'applicazione di addestramento in un container Docker ed eseguendo il push di questo container a Google Container Registry. Utilizzando questo approccio, puoi ottimizzare gli iperparametri per un modello creato con qualsiasi framework.

  1. In JupyterLab, dal menu Avvio app, apri una finestra Terminale nell'istanza del tuo notebook.

  1. Crea una nuova directory chiamata horses_or_humans e accedi tramite cd:
mkdir horses_or_humans cd horses_or_humans

Crea un Dockerfile

Il primo passaggio per containerizzare il codice è creare un Dockerfile. Nel Dockerfile includerai tutti i comandi necessari per eseguire l'immagine. Installerà tutte le librerie necessarie, inclusa la libreria CloudML Hypertune, e configurerà il punto di accesso per il codice di addestramento.

  1. Dal Terminale, crea un Dockerfile vuoto:
touch Dockerfile
  1. Apri il Dockerfile dal menu a sinistra e copia al suo interno quanto segue:
FROM gcr.io/deeplearning-platform-release/tf2-gpu.2-9 WORKDIR / # Installs hypertune library RUN pip install cloudml-hypertune # 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"]
  1. Salva il file premendo CTRL+S.

Questo Dockerfile utilizza l'immagine Docker GPU TensorFlow Enterprise 2.9 del container deep learning. Deep Learning Containers su Google Cloud è dotato di molti framework comuni di ML e data science preinstallati.

Dopo aver scaricato l'immagine, questo Dockerfile configura il punto di accesso per il codice di addestramento. Non hai ancora creato questi file: nel passaggio successivo aggiungerai il codice per l'addestramento e la messa a punto del modello.

Aggiungi il codice di addestramento del modello

  1. Dal tuo terminale, esegui quanto segue per creare una directory per il codice di addestramento e un file Python in cui aggiungerai il codice:
mkdir trainer touch trainer/task.py

Ora dovresti avere quanto segue nella tua directory horses_or_humans/:

+ Dockerfile + trainer/ + task.py
  1. Successivamente, apri il file task.py che hai appena creato e copia il codice seguente:
import tensorflow as tf import tensorflow_datasets as tfds import argparse import hypertune NUM_EPOCHS = 10 def get_args(): '''Parses args. Must include all hyperparameters you want to tune.''' parser = argparse.ArgumentParser() parser.add_argument( '--learning_rate', required=True, type=float, help='learning rate') parser.add_argument( '--momentum', required=True, type=float, help='SGD momentum value') parser.add_argument( '--num_neurons', required=True, type=int, help='number of units in last hidden layer') args = parser.parse_args() return args def preprocess_data(image, label): '''Resizes and scales images.''' image = tf.image.resize(image, (150,150)) return tf.cast(image, tf.float32) / 255., label def create_dataset(): '''Loads Horses Or Humans dataset and preprocesses data.''' data, info = tfds.load(name='horses_or_humans', as_supervised=True, with_info=True) # Create train dataset train_data = data['train'].map(preprocess_data) train_data = train_data.shuffle(1000) train_data = train_data.batch(64) # Create validation dataset validation_data = data['test'].map(preprocess_data) validation_data = validation_data.batch(64) return train_data, validation_data def create_model(num_neurons, learning_rate, momentum): '''Defines and complies model.''' inputs = tf.keras.Input(shape=(150, 150, 3)) x = tf.keras.layers.Conv2D(16, (3, 3), activation='relu')(inputs) x = tf.keras.layers.MaxPooling2D((2, 2))(x) x = tf.keras.layers.Conv2D(32, (3, 3), activation='relu')(x) x = tf.keras.layers.MaxPooling2D((2, 2))(x) x = tf.keras.layers.Conv2D(64, (3, 3), activation='relu')(x) x = tf.keras.layers.MaxPooling2D((2, 2))(x) x = tf.keras.layers.Flatten()(x) x = tf.keras.layers.Dense(num_neurons, activation='relu')(x) outputs = tf.keras.layers.Dense(1, activation='sigmoid')(x) model = tf.keras.Model(inputs, outputs) model.compile( loss='binary_crossentropy', optimizer=tf.keras.optimizers.SGD(learning_rate=learning_rate, momentum=momentum), metrics=['accuracy']) return model def main(): args = get_args() train_data, validation_data = create_dataset() model = create_model(args.num_neurons, args.learning_rate, args.momentum) history = model.fit(train_data, epochs=NUM_EPOCHS, validation_data=validation_data) # DEFINE METRIC hp_metric = history.history['val_accuracy'][-1] hpt = hypertune.HyperTune() hpt.report_hyperparameter_tuning_metric( hyperparameter_metric_tag='accuracy', metric_value=hp_metric, global_step=NUM_EPOCHS) if __name__ == "__main__": main()
  1. Salva il file premendo CTRL+S.

Prima di creare il container, diamo uno sguardo più approfondito al codice. Esistono alcuni componenti specifici dell'utilizzo del servizio di ottimizzazione degli iperparametri.

  • Lo script importa la libreria hypertune. Tieni presente che il Dockerfile del passaggio 1 includeva istruzioni per installare tramite pip questa libreria.

  • La funzione get_args() definisce un argomento della riga di comando per ogni iperparametro che desideri ottimizzare. In questo esempio, gli iperparametri che verranno ottimizzati sono il tasso di apprendimento, il valore momentum nell'ottimizzatore e il numero di neuroni nell'ultimo strato nascosto del modello, ma sperimenta pure con altri iperparametri. Il valore passato in questi argomenti viene quindi utilizzato per impostare l'iperparametro corrispondente nel codice.

  • Alla fine della funzione main(), la libreria hypertune viene utilizzata per definire la metrica che desideri ottimizzare. In TensorFlow, il metodo keras model.fit restituisce un oggetto History. L'attributo History.history è un record dei valori di perdita dell'addestramento e dei valori delle metriche in epoche successive. Se passi i dati di convalida a model.fit, l'attributo History.history includerà anche la perdita di convalida e i valori delle metriche. Ad esempio, se addestrassi un modello per tre epoche con dati di convalida e fornissi l'accuratezza come metrica, l'attributo History.history sarebbe simile al seguente dizionario.

{ "accuracy": [ 0.7795261740684509, 0.9471358060836792, 0.9870933294296265 ], "loss": [ 0.6340447664260864, 0.16712145507335663, 0.04546636343002319 ], "val_accuracy": [ 0.3795261740684509, 0.4471358060836792, 0.4870933294296265 ], "val_loss": [ 2.044623374938965, 4.100203514099121, 3.0728273391723633 ]

Se desideri che il servizio di ottimizzazione degli iperparametri scopra i valori che massimizzano l'accuratezza di convalida del modello, definisci la metrica come l'ultima voce (o NUM_EPOCS - 1) dell'elenco val_accuracy. Quindi, passa questa metrica a un'istanza di HyperTune. Puoi scegliere la stringa che preferisci per hyperparameter_metric_tag, ma dovrai utilizzare nuovamente la stringa in seguito quando avvierai il job di ottimizzazione dell'iperparametro.

Fai clic su Controlla i miei progressi per verificare l'obiettivo. Crea un Dockerfile e aggiungi il codice di addestramento del modello

Crea il container

  1. Dal tuo terminale, esegui quanto segue per definire una variabile env per il tuo progetto, assicurandoti di sostituire your-cloud-project con il tuo ID progetto:
Nota: puoi ottenere l'ID del tuo progetto eseguendo gcloud config list --format 'value(core.project)' nel tuo terminale. PROJECT_ID='your-cloud-project'
  1. Definisci una variabile con l'URI dell'immagine container in Google Container Registry:
IMAGE_URI="gcr.io/$PROJECT_ID/horse-human:hypertune"
  1. Quindi, crea il container eseguendo quanto segue dalla radice della directory horses_or_humans:
docker build ./ -t $IMAGE_URI
  1. Infine, invialo a Google Container Registry:
docker push $IMAGE_URI

Con il push del container in Container Registry, ora puoi avviare un job di ottimizzazione degli iperparametri del modello personalizzato.

Fai clic su Controlla i miei progressi per verificare l'obiettivo. Crea il container

Attività 3: esegui un job di ottimizzazione degli iperparametri su Vertex AI

Questo lab utilizza l'addestramento personalizzato tramite un container personalizzato su Google Container Registry, ma puoi anche eseguire un job di ottimizzazione degli iperparametri con i container predefiniti.

  • Nella console Cloud, vai alla sezione Addestramento in Vertex AI.
  • Per l'API Vertex AI fai clic su Abilita e su Chiudi.

Configura il job di addestramento

  1. Fai clic su Addestra nuovo modello per inserire i parametri per il tuo job di ottimizzazione degli iperparametri:

    • In Set di dati, seleziona Nessun set di dati gestito.
    • Seleziona Addestramento personalizzato (avanzato) come metodo di addestramento e fai clic su Continua.
    • Inserisci horses-humans-hyptertune (o come preferisci chiamare il tuo modello) in Nome modello.
    • Fai clic su Continua.
  2. Nel passaggio Container di addestramento, seleziona Container personalizzato:

    • In Impostazioni container personalizzato, per Immagine container, inserisci il valore della variabile IMAGE_URI della sezione precedente. Dovrebbe essere: gcr.io/<your-cloud-project>/horse-human:hypertune, con il nome del tuo progetto. Lascia vuoti gli altri campi e fai clic su Continua.

Configura il job di ottimizzazione degli iperparametri

  • Seleziona Abilita ottimizzazione degli iperparametri.

Configura gli iperparametri

Successivamente, dovrai aggiungere gli iperparametri che hai impostato come argomenti della riga di comando nel codice dell'applicazione di addestramento. Quando aggiungi un iperparametro, devi prima fornire il nome. Dovrebbe corrispondere al nome dell'argomento che hai passato ad argparse.

  1. Inserisci learning_rate in Nome parametro.

  2. Seleziona Doppio come Tipo.

  3. Inserisci 0.01 per Min, e 1 per Max.

  4. Seleziona Log in Scalabilità.

  5. Fai clic su FINE.

  6. Dopo aver aggiunto l'iperparametro learning_rate, aggiungi i parametri per momentum e num_neurons.

  • Per momentum:

    • Fai clic su AGGIUNGI UN IPERPARAMETRO.
    • Inserisci momentum in Nome parametro.
    • Seleziona Doppio come Tipo.
    • Inserisci 0 per Min e 1 per Max.
    • Seleziona Lineare in Scalabilità.
    • Fai clic su FINE.
  • Per num_neurons:

    • Fai clic su AGGIUNGI UN IPERPARAMETRO.
    • Inserisci num_neurons in Nome parametro.
    • Seleziona Discreto per Tipo.
    • Inserisci 64,128,512 in Valori.
    • Seleziona Nessuna scala per Scalabilità.
    • Fai clic su FINE.

Configura la metrica

Dopo aver aggiunto gli iperparametri, fornirai la metrica che vuoi ottimizzare e l'obiettivo. Dovrebbe essere lo stesso hyperparameter_metric_tag impostato nell'applicazione di addestramento.

  1. Inserisci accuracy in Metrica da ottimizzare.
  2. Seleziona Massimizza per Obiettivo.

Il servizio di ottimizzazione degli iperparametri Vertex AI eseguirà più prove dell'applicazione di addestramento con i valori configurati nei passaggi precedenti. Dovrai porre un limite superiore al numero di prove che il servizio eseguirà.

Un numero maggiore di prove generalmente porta a risultati migliori, ma ci sarà un punto in cui i risultati diminuiranno dopo il quale ulteriori prove avranno poco o nessun effetto sulla metrica che stai cercando di ottimizzare. Una best practice è iniziare con un numero inferiore di prove e farsi un'idea dell'impatto degli iperparametri scelti prima dello scale up a un numero elevato di prove.

Dovrai inoltre impostare un limite superiore al numero di prove parallele. L'aumento del numero di prove parallele ridurrà la quantità di tempo necessaria per l'esecuzione del job di ottimizzazione degli iperparametri; tuttavia, può ridurre l'efficacia del job nel complesso. Questo perché la strategia di ottimizzazione predefinita utilizza i risultati delle prove precedenti per informare l'assegnazione dei valori nelle prove successive. Se si eseguono troppe prove in parallelo, ci saranno prove che inizieranno senza il beneficio del risultato delle prove ancora in esecuzione.

  1. A scopo dimostrativo, puoi impostare Numero massimo di prove su 15 e Numero massimo di prove parallele su 3. Puoi sperimentare numeri diversi, ma ciò può comportare tempi di ottimizzazione più lunghi e costi più elevati.

  2. Seleziona Predefinito per Algoritmo, che utilizzerà Google Vizier per eseguire l'ottimizzazione bayesiana per l'ottimizzazione degli iperparametri. Puoi scoprire di più su questo algoritmo dal blog Correzione degli iperparametri in Cloud Machine Learning Engine con l'ottimizzazione bayesiana.

  3. Fai clic su Continua.

Configura il calcolo

In Compute e prezzi, lascia la regione selezionata così com'è e per Impostazioni di calcolo seleziona Esegui il deployment a nuovo pool di worker.

Configura Pool di worker 0 come segue:

  1. Per Tipo di macchina, seleziona Standard > n1-standard-4.
  2. Per Tipo di disco, seleziona SSD.
  3. Per Dimensione disco (GB), inserisci 100.
  4. Fai clic su INIZIA ADDESTRAMENTO per dare il via al job di ottimizzazione degli iperparametri. Nella sezione Addestramento della tua console, nella scheda JOB DI OTTIMIZZAZIONE DEGLI IPERPARAMETRI vedrai qualcosa di simile a questo:

Nota: il completamento del job di ottimizzazione degli iperparametri richiederà circa 55-60 minuti.

Al termine, potrai fare clic sul nome del job e vedere i risultati delle prove di ottimizzazione.

Fai clic su Controlla i miei progressi per verificare l'obiettivo. Esegui un job di ottimizzazione degli iperparametri su Vertex AI

Attività 4: esegui la pulizia

  1. Se vuoi continuare a utilizzare il blocco note creato in questo lab, ti consigliamo di disattivarlo quando non lo usi. Dall'interfaccia utente di Notebooks nella console Cloud, seleziona il blocco note, quindi seleziona Interrompi.

    Se vuoi eliminare completamente il blocco note, fai semplicemente clic sul pulsante Elimina in alto a destra.

  2. Per eliminare il bucket di archiviazione, vai al menu di navigazione > Cloud Storage, seleziona il tuo bucket e fai clic su Elimina.

Complimenti!

Hai imparato come utilizzare Vertex AI per:

Avviare un processo di ottimizzazione degli iperparametri per il codice di addestramento fornito in un container personalizzato. In questo esempio hai utilizzato un modello TensorFlow, ma puoi addestrare un modello creato con qualsiasi framework utilizzando container personalizzati o integrati. Per saperne di più sulle diverse parti di Vertex, consulta la documentazione di Vertex AI.

Terminare il lab

Una volta completato il lab, fai clic su Termina lab. Qwiklabs rimuove le risorse che hai utilizzato ed esegue la pulizia dell'account.

Avrai la possibilità di inserire una valutazione in merito alla tua esperienza. Seleziona il numero di stelle applicabile, inserisci un commento, quindi fai clic su Invia.

Il numero di stelle corrisponde alle seguenti valutazioni:

  • 1 stella = molto insoddisfatto
  • 2 stelle = insoddisfatto
  • 3 stelle = esperienza neutra
  • 4 stelle = soddisfatto
  • 5 stelle = molto soddisfatto

Se non vuoi lasciare un feedback, chiudi la finestra di dialogo.

Per feedback, suggerimenti o correzioni, utilizza la scheda Assistenza.

Copyright 2020 Google LLC Tutti i diritti riservati. Google e il logo Google sono marchi di Google LLC. Tutti gli altri nomi di società e prodotti sono marchi delle rispettive società a cui sono associati.

Before you begin

  1. Labs create a Google Cloud project and resources for a fixed time
  2. Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
  3. On the top left of your screen, click Start lab to begin

Questi contenuti non sono al momento disponibili

Ti invieremo una notifica via email quando sarà disponibile

Bene.

Ti contatteremo via email non appena sarà disponibile

One lab at a time

Confirm to end all existing labs and start this one

Use private browsing to run the lab

Use an Incognito or private browser window to run this lab. This prevents any conflicts between your personal account and the Student account, which may cause extra charges incurred to your personal account.