Questo tutorial mostra come utilizzare una container per il deployment di una macchina PyTorch di machine learning (ML) che fornisce previsioni online.
In questo tutorial, eseguirai il deployment di un container che esegue TorchServe di PyTorch strumento per fornire previsioni un modello di riconoscimento delle cifre fornito TorchServe che è stato preaddestrato sul MNIST del set di dati. Puoi e poi usare AI Platform Prediction per classificare le immagini di cifre.
Prima di iniziare
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Artifact Registry API APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Artifact Registry API APIs.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Per tutto il tutorial, ti consigliamo di utilizzare Cloud Shell per interagire con Google Cloud. Se vuoi utilizzare una shell Bash diversa da Cloud Shell, quindi esegui configurazione aggiuntiva:
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Segui la documentazione di Artifact Registry per installare e Docker.
Creazione ed esecuzione del push dell'immagine container
Per utilizzare un container personalizzato, devi specificare un'immagine container Docker che soddisfi i requisiti dei container personalizzati. Questa sezione descrive come creare l'immagine container ed eseguirne il push a Artifact Registry.
Scarica artefatti del modello
Gli artefatti del modello sono file creati dall'addestramento ML che puoi utilizzare per pubblicare per le previsioni. Contengono almeno la struttura e ponderazioni di per il modello ML addestrato. Il formato degli artefatti del modello dipende da quale ML il framework utilizzato per l'addestramento .
Per questo tutorial, anziché addestrare da zero, scarica un modello di esempio gli artefatti forniti TorchServe.
clonare il repository TorchServe e passare alla directory con il modello. artefatto, 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 nel tuo container immagine:
mnist.py
: definisce la struttura della rete neurale addestratamnist_cnn.pt
: contiene unstate_dict
con i pesi delle funzionalità e altri output dell'addestramentomnist_handler.py
: espande 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 prossima sezione. 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 vuoi eseguire Artifact Registry
e archiviare l'immagine container. In seguito, dovrai creare una AI Platform Prediction
su un endpoint a livello di regione corrispondente a questa regione, quindi scegli una regione
dove AI Platform Prediction ha una regione
endpoint; ad esempio us-central1
.
Al termine dell'operazione, il comando visualizza il seguente input:
Created repository [getting-started-pytorch].
Crea l'immagine container
TorchServe fornisce un Dockerfile per creare un'immagine container che esegue TorchServe. Tuttavia, anziché utilizzare questo Dockerfile per installare tutte le dipendenze di TorchServe, puoi accelerare il processo di compilazione ricavando l'immagine container da uno dei Immagini TorchServe di cui il team TorchServe ha eseguito il push in Docker Hub.
Nella directory con gli artefatti del modello, crea un nuovo Dockerfile eseguendo il seguente 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 eseguono le seguenti azioni:
L'istruzione
FROM
ricava l'immagine container corrente da un un'immagine TorchServe esistente.L'istruzione
COPY
copia gli artefatti del modello e la previsione gestore dalla tua directory locale alla directory/home/model-server/
dell'immagine container.La prima istruzione
RUN
modifica il file di configurazione dall'elemento immagine per supportare il formato di input preferito di AI Platform Prediction per per le previsioni.Nello specifico, questa istruzione configura TorchServe in modo che preveda un JSON servizio busta per le richieste di previsione.
La modifica di questo file di configurazione richiede l'autorizzazione che l'utente
model-server
(creato nell'immagine principale) non ha. Le istruzioni indicano a Docker di eseguirsi come utenteroot
per modificare di configurazione del deployment e continuare a utilizzare l'utentemodel-server
per seguendo le istruzioni.La seconda istruzione
RUN
utilizza il modello Torch Archiver, già installato nell'immagine container, per creare un modello dai file copiati nell'immagine. Salva questo modello archivia nella directory/home/model-server/model-store/
con nome filemnist.mar
.Se vuoi modificare l'immagine container, ad esempio per eseguire pre-elaborazione o post-elaborazione personalizzate nel gestore di richieste: usa altre istruzioni di
RUN
per installare le dipendenze.)L'istruzione
CMD
avvia il server HTTP TorchServe. Fa riferimento al file di configurazione dell'immagine principale e attiva la pubblicazione per un modello denominatomnist
. Questo carica il filemnist.mar
creato dall'istruzioneRUN
.Questa istruzione sostituisce l'elemento
CMD
dell'immagine principale istruzioni per l'uso. È importante sostituire l'istruzioneCMD
non l'istruzioneENTRYPOINT
, perché gli attributiENTRYPOINT
dell'immagine principale script esegue il comando passato inCMD
e aggiunge anche per impedire la chiusura di Docker.
Per creare l'immagine container in base al nuovo Dockerfile e taggarla con un compatibile con Artifact Registry repository, esegui questo comando nella tua shell:
docker build \ --tag=REGION-docker.pkg.dev/PROJECT_ID/getting-started-pytorch/serve-mnist \ .
Sostituisci quanto segue:
- REGION: la regione del tuo repository Artifact Registry, come specificato in una sezione precedente
- PROJECT_ID: l'ID del tuo account Google Cloud progetto
Il comando potrebbe essere eseguito per diversi minuti.
(Facoltativo) Esegui il contenitore localmente
Prima di eseguire il push dell'immagine del contenitore in Artifact Registry per utilizzarla con Previsione di AI Platform, puoi eseguirla come contenitore nel tuo ambiente locale per verificare che il server funzioni come previsto:
Per eseguire l'immagine container come container in locale, esegui questo comando della tua 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 tuo repository Artifact Registry, come specificato in una sezione precedente
- PROJECT_ID: l'ID del tuo progetto Google Cloud
Questo comando esegue un container in , eseguendo la mappatura della porta
8080
del container alla porta8080
del ambiente locale. L'immagine principale, da cui hai dedotto l'immagine del contenitore, configura TorchServe per utilizzare la porta8080
.Per inviare al server del container un controllo, esegui questo comando nella shell:
curl localhost:8080/ping
In caso di esito positivo, il server restituisce la seguente risposta:
{ "status": "Healthy" }
Per inviare al server del contenitore una richiesta di previsione, esegui i seguenti 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
Questa richiesta utilizza una delle immagini di test incluse nell'esempio TorchServe.
In caso di esito positivo, il server restituisce la previsione seguente:
{"predictions": [3]}
Per arrestare il container, esegui questo comando nella shell:
docker stop local_mnist
esegui il push dell'immagine container in Artifact Registry
Configurare Docker per accedere ad Artifact Registry. Poi esegui il push dell'immagine container del repository Artifact Registry.
per concedere alla tua installazione Docker locale l'autorizzazione per eseguire il push a Artifact Registry nella regione scelta, esegui questo comando 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 tua 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 tuo 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 del modello su AI Platform Prediction per eseguire la previsione. La versione del modello esegue 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 saperne di più sulle diverse configurazioni, consulta Deployment dei modelli.
crea un modello
Per creare una risorsa del modello, esegui questo comando 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 Repository Artifact Registry in una sezione precedente.
Crea una versione del modello
Per creare una risorsa di versione del modello, esegui il seguente 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 Artifact Registry il repository e il modello di AI Platform Prediction nelle sezioni precedenti
- PROJECT_ID: l'ID del tuo account Google Cloud progetto
I flag relativi al container in questo comando:
--image
: l'URI dell'immagine container.--ports
: la porta che il server HTTP del container rimane in ascolto delle richieste attiva. L'immagine principale, da che hai derivato dall'immagine container, configura TorchServe in modo che utilizzi8080
.--health-route
: il percorso su cui il server HTTP del container rimane in ascolto. controlli di integrità. TorchServe rimane sempre in ascolto dei controlli di integrità sul/ping
del tuo percorso di apprendimento.--predict-route
: il percorso su cui il server HTTP del container rimane in ascolto. richieste di previsione. TorchServe rimane sempre in ascolto delle richieste di previsione sul/predictions/MODEL
del tuo percorso di apprendimento.MODEL è il nome del modello specificato quando hai avviato TorchServe. In questo caso, il nome è
mnist
, che hai impostato in questo Docker di una sezione precedente:CMD ["torchserve", \ "--start", \ "--ts-config=/home/model-server/config.properties", \ "--models", \ "mnist=mnist.mar"]
Ottenere una previsione
I file di esempio TorchServe che hai scaricato in una sezione precedente includono
prova
immagini. La configurazione TorchServe del container prevede di ricevere
richieste di previsione in formato JSON, con l'immagine come stringa con codifica Base64
nel campo data.b64
di ogni istanza.
Ad esempio, per classificare test_data/3.png
, esegui questi comandi nel tuo
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 AI Platform Prediction modella una sezione precedente
- PROJECT_ID: l'ID del tuo account Google Cloud progetto
In caso di esito positivo, la versione del modello restituisce la previsione seguente:
{"predictions": [3]}
esegui la pulizia
Per evitare di incorrere in ulteriori previsioni di AI Platform addebiti e Artifact Registry addebiti, elimina le risorse Google Cloud che hai creato durante questo tutorial:
Per eliminare la versione del modello, esegui il seguente 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 una 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 una 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 la tua immagine container, da zero o derivanti da un'immagine container di terze parti esistente: leggi Container personalizzato requisiti.
Scopri di più sull'utilizzo di un container personalizzato per previsione, inclusa la compatibilità con altre funzionalità e opzioni di configurazione di AI Platform Prediction che puoi per il container durante il deployment.