Dopo aver creato un modello AutoML Vision Edge e averlo esportato in un bucket Google Cloud Storage, puoi utilizzare i servizi RESTful con i tuoi modelli AutoML Vision Edge e TF Serving Image Docker.
Cosa creerai
I container Docker possono aiutarti a eseguire facilmente il deployment di modelli perimetrali su dispositivi diversi. Puoi eseguire modelli perimetrali chiamando le API REST dai container con il linguaggio che preferisci, con l'ulteriore vantaggio di non dover installare dipendenze o trovare le versioni di TensorFlow appropriate.
In questo tutorial imparerai a conoscere l'esecuzione di modelli perimetrali sui dispositivi utilizzando i container Docker.
Nello specifico, questo tutorial illustra tre passaggi:
- Recupero di container predefiniti.
- Esecuzione di container con modelli Edge per avviare le API REST.
- Fare previsioni.
Molti dispositivi dispongono solo di CPU, mentre alcuni potrebbero avere GPU per ottenere previsioni più rapide. Forniamo tutorial con container predefiniti di CPU e GPU.
Obiettivi
In questa procedura dettagliata introduttiva end-to-end, utilizzerai esempi di codice per:
- Ottieni il container Docker.
- Avvia le API REST utilizzando container Docker con modelli perimetrali.
- Fai previsioni per ottenere risultati analizzati.
Prima di iniziare
Per completare questo tutorial, devi:
- Addestra un modello Edge esportabile. Segui la guida rapida ai modelli di dispositivi Edge per addestrare un modello Edge.
- Esporta un modello AutoML Vision Edge. Questo modello verrà gestito con container come API REST.
- Installa Docker. Questo è il software necessario per eseguire i container Docker.
- (Facoltativo) Installa il docker e il driver NVIDIA. Questo passaggio è facoltativo se hai dispositivi con GPU e vuoi ottenere previsioni più rapide.
- Prepara le immagini di test. Queste immagini verranno inviate nelle richieste per ottenere i risultati dell'analisi.
I dettagli per l'esportazione dei modelli e l'installazione del software necessario sono disponibili nella sezione seguente.
Esporta modello AutoML Vision Edge
Dopo aver addestrato un modello Edge, puoi esportarlo su dispositivi diversi.
I container supportano i modelli TensorFlow, denominati saved_model.pb
al momento dell'esportazione.
Per esportare un modello AutoML Vision Edge per i container, seleziona la scheda Container nell'interfaccia utente, quindi esporta il modello in ${YOUR_MODEL_PATH} in Google Cloud Storage. Questo modello esportato verrà pubblicato con i container come API REST in un secondo momento.
Per scaricare il modello esportato in locale, esegui questo comando.
Dove:
- ${YOUR_MODEL_PATH}: la posizione del modello su Google Cloud Storage (ad esempio,
gs://my-bucket-vcm/models/edge/ICN4245971651915048908/2020-01-20_01-27-14-064_tf-saved-model/
) - ${YOUR_LOCAL_MODEL_PATH} - Il percorso locale
da cui vuoi scaricare il modello (ad esempio,
/tmp
).
gsutil cp ${YOUR_MODEL_PATH} ${YOUR_LOCAL_MODEL_PATH}/saved_model.pb
Installa Docker
Docker è un software utilizzato per il deployment e l'esecuzione di applicazioni all'interno di container.
Installa Docker Community Edition (CE) sul tuo sistema. Lo utilizzerai per servire i modelli Edge come API REST.
Installa il driver NVIDIA e NVIDIA DOCKER (facoltativo - solo per GPU)
Alcuni dispositivi sono dotati di GPU per fornire previsioni più rapide. Il container docker GPU viene fornito con supporto per le GPU NVIDIA.
Per eseguire i container GPU, devi installare il driver NVIDIA e NVIDIA Docker sul tuo sistema.
Esecuzione dell'inferenza del modello mediante CPU
Questa sezione fornisce istruzioni dettagliate per eseguire inferenze dei modelli utilizzando i container della CPU. Utilizzerai il Docker installato per ottenere ed eseguire il container della CPU per gestire i modelli Edge esportati come API REST, quindi inviare le richieste di un'immagine di test alle API REST per ottenere i risultati analizzati.
Esegui il pull dell'immagine Docker
Innanzitutto, utilizzerai Docker per ottenere un container CPU predefinito. Il container CPU predefinito include già l'intero ambiente per la gestione dei modelli Edge esportati, che non contengono ancora modelli Edge.
Il container predefinito della CPU è archiviato in Google Container Registry. Prima di richiedere il container, imposta una variabile di ambiente per la posizione del container in Google Container Registry:
export CPU_DOCKER_GCR_PATH=gcr.io/cloud-devrel-public-resources/gcloud-container-1.14.0:latest
Dopo aver impostato la variabile di ambiente per il percorso di Container Registry, esegui questa riga di comando per ottenere il container della CPU:
sudo docker pull ${CPU_DOCKER_GCR_PATH}
esegui il container Docker
Dopo aver ottenuto il container esistente, eseguirai questo container della CPU per fornire inferenze del modello Edge con le API REST.
Prima di avviare il container della CPU, devi impostare le variabili di sistema:
- ${CONTAINER_NAME} - Una stringa che indica il nome del container, ad esempio
CONTAINER_NAME=automl_high_accuracy_model_cpu
, quando viene eseguito. - ${PORT} - Un numero che indica la porta nel tuo dispositivo per accettare in seguito chiamate API REST, ad esempio
PORT=8501
.
Dopo aver impostato le variabili, esegui Docker nella riga di comando per gestire le inferenze del modello Edge con le API REST:
sudo docker run --rm --name ${CONTAINER_NAME} -p ${PORT}:8501 -v ${YOUR_MODEL_PATH}:/tmp/mounted_model/0001 -t ${CPU_DOCKER_GCR_PATH}
Una volta eseguito correttamente il container, le API REST sono pronte per essere pubblicate su http://localhost:${PORT}/v1/models/default:predict
. La sezione seguente descrive come inviare richieste di previsione a questa località.
Invia una richiesta di previsione
Ora che il container funziona correttamente, puoi inviare una richiesta di previsione su un'immagine di test alle API REST.
Riga di comando
Il corpo della richiesta della riga di comando contiene image_bytes
con codifica Base64 e una stringa key
per identificare l'immagine specificata. Consulta l'argomento Codifica Base64 per ulteriori informazioni sulla codifica delle immagini. Il formato del file JSON della richiesta è il seguente:
/tmp/request.json
{ "instances": [ { "image_bytes": { "b64": "/9j/7QBEUGhvdG9zaG9...base64-encoded-image-content...fXNWzvDEeYxxxzj/Coa6Bax//Z" }, "key": "your-chosen-image-key" } ] }
Dopo aver creato un file di richiesta JSON locale, puoi inviare la tua richiesta di previsione.
Utilizza il seguente comando per inviare la richiesta di previsione:
curl -X POST -d @/tmp/request.json http://localhost:${PORT}/v1/models/default:predictRisposta
Dovresti vedere un output simile al seguente:
{ "predictions": [ { "labels": ["Good", "Bad"], "scores": [0.665018, 0.334982] } ] }
Python
Per maggiori informazioni, consulta la documentazione di riferimento dell'API AutoML Vision Python.
Per eseguire l'autenticazione in AutoML Vision, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
(Facoltativo) Esegui l'inferenza del modello utilizzando i container GPU
Questa sezione mostra come eseguire le inferenze dei modelli utilizzando i container GPU. Questo processo è molto simile all'esecuzione dell'inferenza del modello utilizzando una CPU. Le differenze principali sono il percorso del container GPU e il modo in cui avvii i container GPU.
Esegui il pull dell'immagine Docker
Innanzitutto, utilizzerai Docker per ottenere un container GPU predefinito. Il container GPU predefinito include già l'ambiente per gestire i modelli Edge esportati con GPU, che non contengono ancora modelli Edge o driver.
Il container predefinito della CPU è archiviato in Google Container Registry. Prima di richiedere il container, imposta una variabile di ambiente per la posizione del container in Google Container Registry:
export GPU_DOCKER_GCR_PATH=gcr.io/cloud-devrel-public-resources/gcloud-container-1.14.0-gpu:latest
Esegui la riga di comando seguente per recuperare il container GPU:
sudo docker pull ${GPU_DOCKER_GCR_PATH}
esegui il container Docker
Questo passaggio eseguirà il container GPU per gestire le inferenze dei modelli Edge con le API REST. Devi installare il driver NVIDIA e docker come indicato sopra. Devi inoltre impostare le seguenti variabili di sistema:
- ${CONTAINER_NAME} - Una stringa che indica il nome del container, ad esempio
CONTAINER_NAME=automl_high_accuracy_model_gpu
, quando viene eseguito. - ${PORT} - Un numero che indica la porta nel tuo dispositivo per accettare in seguito chiamate API REST, ad esempio
PORT=8502
.
Dopo aver impostato le variabili, esegui Docker nella riga di comando per gestire le inferenze del modello Edge con le API REST:
sudo docker run --runtime=nvidia --rm --name "${CONTAINER_NAME}" -v \ ${YOUR_MODEL_PATH}:/tmp/mounted_model/0001 -p \ ${PORT}:8501 -t ${GPU_DOCKER_GCR_PATH}
Una volta eseguito correttamente il container, le API REST sono pronte per essere pubblicate in http://localhost:${PORT}/v1/models/default:predict
. La sezione seguente descrive come inviare richieste di previsione a questa località.
Invia una richiesta di previsione
Ora che il container funziona correttamente, puoi inviare una richiesta di previsione su un'immagine di test alle API REST.
Riga di comando
Il corpo della richiesta della riga di comando contiene image_bytes
con codifica Base64 e una stringa key
per identificare l'immagine specificata. Consulta l'argomento Codifica Base64 per ulteriori informazioni sulla codifica delle immagini. Il formato del file JSON della richiesta è il seguente:
/tmp/request.json
{ "instances": [ { "image_bytes": { "b64": "/9j/7QBEUGhvdG9zaG9...base64-encoded-image-content...fXNWzvDEeYxxxzj/Coa6Bax//Z" }, "key": "your-chosen-image-key" } ] }
Dopo aver creato un file di richiesta JSON locale, puoi inviare la tua richiesta di previsione.
Utilizza il seguente comando per inviare la richiesta di previsione:
curl -X POST -d @/tmp/request.json http://localhost:${PORT}/v1/models/default:predictRisposta
Dovresti vedere un output simile al seguente:
{ "predictions": [ { "labels": ["Good", "Bad"], "scores": [0.665018, 0.334982] } ] }
Python
Per maggiori informazioni, consulta la documentazione di riferimento dell'API AutoML Vision Python.
Per eseguire l'autenticazione in AutoML Vision, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Riepilogo
In questo tutorial hai esaminato l'esecuzione di modelli Edge utilizzando i container Docker della CPU o della GPU. Ora puoi eseguire il deployment di questa soluzione basata su container.
Passaggio successivo
- Scopri di più su TensorFlow in generale con la documentazione di TensorFlow Getting Started.
- Scopri di più sulla pubblicazione di Tensorflow.
- Scopri come utilizzare TensorFlow Serving con Kubernetes.