Questo tutorial mostra come utilizzare un container personalizzato per eseguire il deployment di un modello di machine learning (ML) PyTorch che fornisce previsioni online.
In questo tutorial, eseguirai il deployment di un container che esegue lo strumento TorchServe di PyTorch al fine di fornire previsioni da un modello di riconoscimento delle cifre fornito da TorchServe che è stato preaddestrato sul set di dati MNIST. Puoi quindi utilizzare AI Platform Prediction per classificare le immagini di cifre.
Prima di iniziare
- Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API AI Platform Training & Prediction and Artifact Registry API.
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API AI Platform Training & Prediction and Artifact Registry API.
-
Nella console Google Cloud, attiva Cloud Shell.
Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.
Durante questo tutorial, ti consigliamo di utilizzare Cloud Shell per interagire con Google Cloud. Se vuoi utilizzare una shell Bash diversa anziché Cloud Shell, esegui la seguente configurazione aggiuntiva:
- Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
gcloud init
- Segui la documentazione di Artifact Registry per installare Docker.
Creazione ed esecuzione del push dell'immagine container
Per utilizzare un container personalizzato, devi specificare un'immagine container Docker che soddisfi i requisiti per i container personalizzati. Questa sezione descrive come creare l'immagine container ed eseguirne il push in Artifact Registry.
Scarica artefatti del modello
Gli artefatti del modello sono file creati dall'addestramento ML che puoi utilizzare per fornire previsioni. Contengono, come minimo, la struttura e le ponderazioni del modello ML addestrato. Il formato degli artefatti del modello dipende dal framework ML utilizzato per l'addestramento .
Per questo tutorial, anziché addestrare da zero, scarica gli artefatti del modello di esempio forniti da TorchServe.
Per clonare il repository TorchServe e passare alla directory con gli artefatti del modello, esegui questi comandi nella shell:
git clone https://github.com/pytorch/serve.git \
--branch=v0.3.0 \
--depth=1
cd serve/examples/image_classifier/mnist
Questa directory contiene tre file importanti da creare nell'immagine container:
mnist.py
: definisce la struttura della rete neurale addestratamnist_cnn.pt
: contiene unstate_dict
con pesi delle caratteristiche e altri output di addestramentomnist_handler.py
: estende il modo in cui TorchServe gestisce le richieste di previsione
Crea un repository Artifact Registry
Crea un repository Artifact Registry per archiviare l'immagine container che creerai nella sezione successiva. Esegui questo comando nella shell:
gcloud beta artifacts repositories create getting-started-pytorch \
--repository-format=docker \
--location=REGION
Sostituisci REGION con la regione in cui Artifact Registry deve archiviare l'immagine container. Successivamente, dovrai creare una risorsa del modello di previsione di AI Platform su un endpoint a livello di regione corrispondente a questa regione, quindi scegli una regione in cui AI Platform Prediction ha un endpoint a livello di regione, ad esempio us-central1
.
Dopo aver completato l'operazione, questo comando stampa il seguente input:
Created repository [getting-started-pytorch].
Crea l'immagine container
TorchServe fornisce un Dockerfile per la creazione di un'immagine container che esegue TorchServe. Tuttavia, invece di utilizzare questo Dockerfile per installare tutte le dipendenze di TorchServe, puoi accelerare il processo di compilazione ricavando l'immagine container da una delle immagini TorchServe di cui il team TorchServe ha eseguito il push a Docker Hub.
Nella directory con gli artefatti del modello, crea un nuovo Dockerfile eseguendo questo comando nella shell:
cat > Dockerfile <<END FROM pytorch/torchserve:0.3.0-cpu COPY mnist.py mnist_cnn.pt mnist_handler.py /home/model-server/ USER root RUN printf "\nservice_envelope=json" >> /home/model-server/config.properties USER model-server RUN torch-model-archiver \ --model-name=mnist \ --version=1.0 \ --model-file=/home/model-server/mnist.py \ --serialized-file=/home/model-server/mnist_cnn.pt \ --handler=/home/model-server/mnist_handler.py \ --export-path=/home/model-server/model-store CMD ["torchserve", \ "--start", \ "--ts-config=/home/model-server/config.properties", \ "--models", \ "mnist=mnist.mar"] END
Queste istruzioni Docker svolgono le seguenti azioni:
L'istruzione
FROM
ricava l'immagine container corrente da un'immagine TorchServe esistente.L'istruzione
COPY
copia gli artefatti del modello e il gestore di previsioni dalla directory locale alla directory/home/model-server/
dell'immagine container.La prima istruzione
RUN
modifica il file di configurazione dell'immagine padre per supportare il formato di input preferito di AI Platform Prediction per le previsioni.Nello specifico, questa istruzione configura TorchServe in modo che si aspetti una inviluppo di servizio JSON per le richieste di previsione.
La modifica di questo file di configurazione richiede l'autorizzazione di cui non dispone l'utente
model-server
(creato nell'immagine principale). Le istruzioni indicano a Docker di eseguire l'esecuzione come utenteroot
per modificare il file di configurazione, quindi di continuare a utilizzare l'utentemodel-server
per seguire le istruzioni.La seconda istruzione
RUN
utilizza l'archivio modelli Torch, già installato sull'immagine container, per creare un archivio modelli a partire dai file copiati nell'immagine. Salva questo archivio di modelli nella directory/home/model-server/model-store/
con il nome filemnist.mar
.Se vuoi modificare l'immagine container, ad esempio per eseguire la pre-elaborazione o la post-elaborazione personalizzata nel gestore di richieste, puoi utilizzare istruzioni
RUN
aggiuntive per installare le dipendenze.L'istruzione
CMD
avvia il server HTTP TorchServe. Fa riferimento al file di configurazione dell'immagine padre e consente la pubblicazione per un modello denominatomnist
. Questo modello carica il filemnist.mar
creato dall'istruzioneRUN
.Questa istruzione sostituisce l'istruzione
CMD
dell'immagine principale. È importante eseguire l'override dell'istruzioneCMD
e non dell'istruzioneENTRYPOINT
, poiché lo scriptENTRYPOINT
dell'immagine padre esegue il comando passato inCMD
e aggiunge anche ulteriore logica per impedire l'uscita di Docker.
Per creare l'immagine del container in base al nuovo Dockerfile e taggarlo con un nome compatibile con il tuo repository Artifact Registry, esegui questo comando nella shell:
docker build \ --tag=REGION-docker.pkg.dev/PROJECT_ID/getting-started-pytorch/serve-mnist \ .
Sostituisci quanto segue:
- REGION: la regione del repository Artifact Registry, come specificato in una sezione precedente
- PROJECT_ID: l'ID del tuo progetto Google Cloud
Il comando potrebbe essere eseguito per diversi minuti.
Esegui il container localmente (facoltativo)
Prima di eseguire il push dell'immagine container ad Artifact Registry per utilizzarla con AI Platform Prediction, puoi eseguirla come container nel tuo ambiente locale per verificare che il server funzioni come previsto:
Per eseguire l'immagine container come container localmente, esegui questo comando nella shell:
docker run -d -p 8080:8080 --name=local_mnist \ REGION-docker.pkg.dev/PROJECT_ID/getting-started-pytorch/serve-mnist
Sostituisci quanto segue, come hai fatto nella sezione precedente:
- REGION: la regione del repository Artifact Registry, come specificato in una sezione precedente
- PROJECT_ID: l'ID del tuo progetto Google Cloud
Questo comando esegue un container in modalità scollegata, mappando la porta
8080
del container alla porta8080
dell'ambiente locale. L'immagine principale, da cui hai derivato l'immagine container, configura TorchServe per utilizzare la porta8080
.Per inviare un controllo di integrità al server del container, esegui questo comando nella shell:
curl localhost:8080/ping
In caso di esito positivo, il server restituisce la seguente risposta:
{ "status": "Healthy" }
Per inviare una richiesta di previsione al server del container, esegui questi comandi nella shell:
cat > instances.json <<END { "instances": [ { "data": { "b64": "$(base64 --wrap=0 test_data/3.png)" } } ] } END curl -X POST \ -H "Content-Type: application/json; charset=utf-8" \ -d @instances.json \ localhost:8080/predictions/mnist
La richiesta utilizza una delle immagini di test incluse nell'esempio di TorchServe.
In caso di esito positivo, il server restituisce la seguente previsione:
{"predictions": [3]}
Per arrestare il container, esegui questo comando nella shell:
docker stop local_mnist
Esegui il push dell'immagine container in Artifact Registry
Configura Docker per accedere ad Artifact Registry. Poi esegui il push dell'immagine container nel repository Artifact Registry.
Per concedere all'installazione Docker locale l'autorizzazione per eseguire il push ad Artifact Registry nella regione che hai scelto, esegui questo comando nella shell:
gcloud auth configure-docker REGION-docker.pkg.dev
Sostituisci REGION con la regione in cui hai creato il repository in una sezione precedente.
Per eseguire il push in Artifact Registry dell'immagine container che hai appena creato, esegui questo comando nella shell:
docker push REGION-docker.pkg.dev/PROJECT_ID/getting-started-pytorch/serve-mnist
Sostituisci quanto segue, come hai fatto nella sezione precedente:
- REGION: la regione del repository Artifact Registry, come specificato in una sezione precedente
- PROJECT_ID: l'ID del tuo progetto Google Cloud
Deployment del container
Questa sezione illustra la creazione di un modello e di una versione su AI Platform Prediction per fornire previsioni. La versione del modello esegue l'immagine container come container per fornire previsioni.
Questo tutorial fornisce opzioni di configurazione specifiche da utilizzare quando crei il modello e la versione del modello. Se vuoi conoscere le diverse opzioni di configurazione, consulta Deployment dei modelli.
Crea un modello
Per creare una risorsa del modello, esegui il comando seguente nella shell:
gcloud beta ai-platform models create getting_started_pytorch \
--region=REGION \
--enable-logging \
--enable-console-logging
Sostituisci REGION con la stessa regione in cui hai creato il repository Artifact Registry in una sezione precedente.
Crea una versione del modello
Per creare una risorsa della versione del modello, esegui questo comando nella shell:
gcloud beta ai-platform versions create v1 \
--region=REGION \
--model=getting_started_pytorch \
--machine-type=n1-standard-4 \
--image=REGION-docker.pkg.dev/PROJECT_ID/getting-started-pytorch/serve-mnist \
--ports=8080 \
--health-route=/ping \
--predict-route=/predictions/mnist
Sostituisci quanto segue:
- REGION: la regione in cui hai creato il repository Artifact Registry e il modello di AI Platform Prediction nelle sezioni precedenti
- PROJECT_ID: l'ID del tuo progetto Google Cloud
I flag relativi ai container in questo comando:
--image
: l'URI dell'immagine container.--ports
: la porta su cui il server HTTP del contenitore rimane in ascolto delle richieste. L'immagine padre, da cui hai derivato l'immagine container, configura TorchServe per utilizzare la porta8080
.--health-route
: il percorso in cui il server HTTP del container rimane in ascolto per i controlli di integrità. TorchServe rimane sempre in ascolto dei controlli di integrità sul percorso/ping
.--predict-route
: il percorso in cui il server HTTP del contenitore rimane in ascolto per le richieste di previsione. TorchServe rimane in ascolto delle richieste di previsione lungo il percorso/predictions/MODEL
.MODEL è il nome del modello che hai specificato quando hai avviato TorchServe. In questo caso, il nome è
mnist
, che hai impostato in questa istruzione Docker da una sezione precedente:CMD ["torchserve", \ "--start", \ "--ts-config=/home/model-server/config.properties", \ "--models", \ "mnist=mnist.mar"]
Recupero di una previsione in corso...
I file di esempio TorchServe che hai scaricato in una sezione precedente includono immagini di test. La configurazione TorchServe del container prevede di ricevere richieste di previsione in formato JSON, con l'immagine sotto forma di stringa con codifica Base64 nel campo data.b64
di ogni istanza.
Ad esempio, per classificare test_data/3.png
, esegui questi comandi nella shell:
cat > instances.json <<END
{
"instances": [
{
"data": {
"b64": "$(base64 --wrap=0 test_data/3.png)"
}
}
]
}
END
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @instances.json \
https://REGION-ml.googleapis.com/v1/projects/PROJECT_ID/models/getting_started_pytorch/versions/v1:predict
Sostituisci quanto segue:
- REGION: la regione in cui hai creato il modello di AI Platform Prediction, una sezione precedente
- PROJECT_ID: l'ID del tuo progetto Google Cloud
In caso di esito positivo, la versione del modello restituisce la seguente previsione:
{"predictions": [3]}
Eseguire la pulizia
Per evitare ulteriori addebiti di AI Platform Prediction e Artifact Registry, elimina le risorse Google Cloud che hai creato durante questo tutorial:
Per eliminare la versione del modello, esegui questo comando nella shell:
gcloud ai-platform versions delete v1 \ --region=REGION \ --model=getting_started_pytorch \ --quiet
Sostituisci REGION con la regione in cui hai creato il modello nella sezione precedente.
Per eliminare il modello, esegui questo comando nella shell:
gcloud ai-platform models delete getting_started_pytorch \ --region=REGION \ --quiet
Sostituisci REGION con la regione in cui hai creato il modello nella sezione precedente.
Per eliminare il repository Artifact Registry e l'immagine container al suo interno, esegui questo comando nella shell:
gcloud beta artifacts repositories delete getting-started-pytorch \ --location=REGION \ --quiet
Sostituisci REGION con la regione in cui hai creato il repository Artifact Registry in una sezione precedente.
Passaggi successivi
Se vuoi progettare un'immagine container personalizzata, da zero o da un'immagine container di terze parti esistente, consulta Requisiti per i container personalizzati.
Scopri di più sull'utilizzo di un container personalizzato per la previsione, inclusa la compatibilità con altre funzionalità di AI Platform Prediction e le opzioni di configurazione che puoi specificare per il container durante il deployment.