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
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.
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.
Seleziona IMPORTA.
Seleziona Importa come nuovo modello e poi fornisci un nome per il modello.
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.
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.
Assegna un nome all'endpoint, lascia invariate le altre impostazioni e fai clic su CONTINUA.
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.
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.
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.
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.
Puoi trovare il numero di progetto nella home page della console. Tieni presente che è diverso dall'ID progetto.
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.
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.
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.
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.
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: