Prototipazione alla produzione: ottenere previsioni da modelli addestrati personalizzati

1. Panoramica

In questo lab utilizzerai Vertex AI per ottenere previsioni online e batch da un modello addestrato in modo personalizzato.

Questo lab fa parte della serie di video Prototype to Production (Dal prototipo alla produzione). Assicurati di completare il lab precedente prima di provare questo. Per saperne di più, guarda il video allegato:

.

Cosa imparerai

Al termine del corso sarai in grado di:

  • carica i modelli in Vertex AI Model Registry
  • Eseguire il deployment di un modello in un endpoint
  • Ottenere previsioni online e batch con l'interfaccia utente e l'SDK

Il costo totale per l'esecuzione di questo lab su Google Cloud è di circa $1.

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.

Vertex AI include molti prodotti diversi per supportare i flussi di lavoro ML end-to-end. Questo lab è incentrato sui prodotti evidenziati di seguito: Predictions e Workbench

Panoramica dei prodotti Vertex

3. Configura l'ambiente

Completa i passaggi del lab Addestramento di modelli personalizzati con Vertex AI per configurare l'ambiente.

4. Carica il modello nel registry

Prima di poter usare il nostro modello per ottenere previsioni, dobbiamo caricarlo su Vertex AI Model Registry, che è un repository in cui puoi gestire il ciclo di vita dei tuoi modelli ML.

Puoi caricare i modelli quando configuri un job di addestramento personalizzato, come mostrato di seguito.

training_prediction

In alternativa, puoi importare i modelli al termine del job di addestramento, a condizione che tu archivi gli artefatti del modello salvati in un bucket Cloud Storage. Questa è l'opzione che utilizzeremo in questo lab.

Vai alla sezione Modelli della console.

menu del modello

Seleziona IMPORTA.

import_model

Seleziona Importa come nuovo modello e poi fornisci un nome per il modello.

new_model

In Impostazioni modello, importa il modello con un container predefinito e utilizza TensorFlow 2.8. Puoi trovare l'elenco completo dei contenitori di previsione predefiniti qui.

Fornisci quindi il percorso del bucket Cloud Storage in cui hai salvato gli artefatti del modello nel job di addestramento personalizzato. Dovrebbe avere un aspetto simile a questo: gs://{PROJECT_ID}-bucket/model_output

Salteremo la sezione Spiegabilità, ma se vuoi saperne di più su Vertex Explainable AI, consulta la documentazione.

Una volta importato, il modello sarà visibile nel registro.

flower_model

Tieni presente che se vuoi eseguire questa operazione tramite l'SDK anziché l'interfaccia utente, puoi eseguire quanto segue dal tuo blocco note Workbench per caricare il modello.

from google.cloud import aiplatform

my_model = aiplatform.Model.upload(display_name='flower-model',
                                  artifact_uri='gs://{PROJECT_ID}-bucket/model_output',
                                  serving_container_image_uri='us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-8:latest')

5. Esegui il deployment del modello nell'endpoint

In Vertex AI possiamo eseguire due tipi di job di previsione: batch e online.

La previsione batch è una richiesta asincrona. È ideale se non hai bisogno di una risposta immediata e vuoi elaborare i dati accumulati in una singola richiesta.

Se invece vuoi ottenere previsioni a bassa latenza dai dati trasmessi al tuo modello in tempo reale, devi utilizzare la previsione online.

Ora che il modello è nel registry, possiamo utilizzarlo per le previsioni batch.

Tuttavia, se vogliamo ottenere previsioni online, dobbiamo eseguire il deployment del modello in un endpoint. In questo modo, gli elementi del modello salvati vengono associati alle risorse fisiche per le previsioni a bassa latenza.

Per eseguire il deployment in un endpoint, seleziona i tre puntini all'estrema destra del modello e poi Esegui il deployment nell'endpoint.

deploy_model

Assegna un nome all'endpoint, lascia invariate le altre impostazioni e fai clic su CONTINUA.

endpoint_name

Gli endpoint supportano la scalabilità automatica, il che significa che puoi impostare un valore minimo e massimo e i nodi di calcolo verranno scalati per soddisfare la domanda di traffico entro questi limiti.

Poiché questo lab è solo a scopo dimostrativo e non utilizzeremo questo endpoint per un traffico elevato, puoi impostare Numero massimo di note di computing su 1 e selezionare n1-standard-4 come Tipo di macchina.

endpoint_compute

Salteremo il monitoraggio dei modelli, ma se vuoi saperne di più su questa funzionalità, consulta la documentazione.

Quindi, fai clic su ESEGUI IL DEPLOYMENT.

Il deployment richiederà alcuni minuti, ma al termine vedrai che lo stato del deployment del modello è impostato su Deployment eseguito su Vertex AI.

Se vuoi eseguire il deployment di un modello tramite l'SDK, esegui il comando seguente.

my_model = aiplatform.Model("projects/{PROJECT_NUMBER}/locations/us-central1/models/{MODEL_ID}") 

endpoint = my_model.deploy(
     deployed_model_display_name='my-endpoint',
     traffic_split={"0": 100},
     machine_type="n1-standard-4",
     accelerator_count=0,
     min_replica_count=1,
     max_replica_count=1,
   )

6. Ricevi previsioni

Previsioni online

Quando il modello viene implementato in un endpoint, puoi accedervi come a qualsiasi altro endpoint REST, il che significa che puoi chiamarlo da una funzione cloud, da un chatbot, da un'app web e così via.

A scopo dimostrativo, chiameremo questo endpoint da Workbench.

Torna al blocco note che hai creato nel lab precedente. Da Avvio app, crea un nuovo blocco note TensorFlow 2.

tf_kernel

Importa l'SDK Python, il numero e il PIL di Vertex AI

from google.cloud import aiplatform

import numpy as np
from PIL import Image

Scarica l'immagine di seguito e caricala nell'istanza Workbench. Proveremo il modello su questa immagine di un dente di leone.

test_image

Innanzitutto, definisci l'endpoint. Dovrai sostituire {PROJECT_NUMBER} e {ENDPOINT_ID} di seguito.

endpoint = aiplatform.Endpoint(
    endpoint_name="projects/{PROJECT_NUMBER}/locations/us-central1/endpoints/{ENDPOINT_ID}")

Puoi trovare il tuo endpoint_id nella sezione Endpoints della console Cloud.

endpoint_id

Puoi trovare il numero di progetto nella home page della console. Tieni presente che è diverso dall'ID progetto.

project_number

Il codice seguente apre e ridimensiona l'immagine con PIL.

IMAGE_PATH = "test-image.jpg"
im = Image.open(IMAGE_PATH)

Poi, converti i dati NumPy in tipo float32 e in un elenco. Eseguiamo la conversione in un elenco perché i dati di NumPy non sono serializzabili in JSON, quindi non possiamo inviarli nel corpo della richiesta.

x_test = np.asarray(im).astype(np.float32).tolist()

Infine, chiama endpoint.predict.

endpoint.predict(instances=x_test).predictions

Il risultato è l'output del modello, ovvero uno strato softmax con 5 unità. Se vuoi scrivere una logica personalizzata per restituire l'etichetta della stringa anziché l'indice, puoi utilizzare le routine di previsione personalizzate.

Previsioni batch

Esistono diversi modi per formattare i dati per la previsione batch. Per semplicità, scarichiamo i dati numpy in un file json e salveremo il file in Cloud Storage.

with open('test-data.json', 'w') as fp:
    json.dump(x_test, fp)

!gsutil cp test-data.json gs://{YOUR_BUCKET}

Poi definisci il modello. Questo processo è simile alla definizione dell'endpoint, ma devi fornire MODEL_ID anziché un ENDPOINT_ID.

my_model=aiplatform.Model("projects/{PROJECT_NUMBER}/locations/us-central1/models/{MODEL_ID}") 

Puoi trovare l'ID modello selezionando il nome e la versione del modello nella sezione Modelli della console, quindi Dettagli versione.

model_id

Infine, utilizza l'SDK per chiamare un job di previsione batch, passando il percorso di Cloud Storage in cui hai archiviato il file JSON e fornendo una posizione di Cloud Storage in cui archiviare i risultati della previsione.

batch_prediction_job = my_model.batch_predict(
    job_display_name='flower_batch_predict',
    gcs_source='gs://{YOUR_BUCKET}/test-data.json',
    gcs_destination_prefix='gs://{YOUR_BUCKET}/prediction-results',
    machine_type='n1-standard-4',)

Puoi monitorare l'avanzamento del job nella sezione Predizioni batch della console. Tieni presente che l'esecuzione di un job di previsione batch per una singola immagine non è efficiente.

batch_pred

Passaggi successivi

In questo esempio, abbiamo prima convertito l'immagine di test in NumPy prima di effettuare la chiamata di previsione. Per casi d'uso più realistici, probabilmente vorrai inviare l'immagine stessa e non dovrai prima caricarla in NumPy. Per farlo, devi modificare la funzione di pubblicazione di TensorFlow per decodificare i byte delle immagini. Questo richiede un po' più di lavoro, ma sarà molto più efficiente per le immagini di grandi dimensioni e la creazione di applicazioni. Puoi vedere un esempio in questo blocco note.

🎉 Complimenti! 🎉

Hai imparato come utilizzare Vertex AI per:

  • Carica i modelli nel registro dei modelli di Vertex AI
  • Ottenere previsioni batch e online

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

7. Esegui la pulizia

Ti consigliamo di annullare il deployment dei modelli dall'endpoint se non prevedi di utilizzarli. Puoi anche eliminare completamente l'endpoint. Puoi sempre rieseguire il deployment di un modello in un endpoint, se necessario.

undeploy_model

I notebook gestiti da Workbench scadono automaticamente dopo 180 minuti di inattività, quindi non devi preoccuparti di arrestare l'istanza. Se vuoi arrestare manualmente l'istanza, fai clic sul pulsante Interrompi nella sezione Vertex AI Workbench della console. Se vuoi eliminare completamente il blocco note, fai clic sul pulsante Elimina.

Arresta istanza

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

Eliminare lo spazio di archiviazione