Questo tutorial mostra come utilizzare un contenuto personalizzato contenuto personalizzato per eseguire il deployment di un modello di machine learning (ML) PyTorch che genera previsioni online.
In questo tutorial esegui il deployment di un contenitore che esegue lo strumento TorchServe di PyTorch per fornire le previsioni di un modello di riconoscimento di 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
- 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 anziché Cloud Shell, esegui la seguente 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 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 del contenitore ed eseguirne il push su Artifact Registry.
Scaricare gli artefatti del modello
Gli elementi del modello sono file creati dall'addestramento ML che puoi utilizzare per fornire le previsioni. Contengono, come minimo, la struttura e i pesi del tuo modello di ML addestrato. Il formato degli elementi del modello dipende dal framework ML utilizzato per l'addestramento .
Per questo tutorial, anziché eseguire l'addestramento da zero, scarica gli elementi del modello di esempio forniti da TorchServe.
Per clonare il repository TorchServe e passare alla directory con gli elementi del modello, esegui i seguenti 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 incorporare nell'immagine del contenitore:
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 del contenitore 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 vuoi che Artifact Registry immagazzina l'immagine del contenitore. In un secondo momento, dovrai creare una risorsa modello di AI Platform Prediction su un endpoint regionale corrispondente a questa regione, quindi scegli una regione in cui AI Platform Prediction ha un endpoint regionale, ad esempio us-central1
.
Al termine dell'operazione, questo comando stampa 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, invece di utilizzare questo Dockerfile per installare tutte le dipendenze di TorchServe, puoi velocizzare il processo di compilazione ricavando l'immagine container da una delle immagini TorchServe che il team di TorchServe ha caricato su Docker Hub.
Nella directory con gli elementi 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'immagine TorchServe esistente.L'istruzione
COPY
copia gli artefatti del modello e l'handler di previsione dalla tua directory locale nella directory/home/model-server/
dell'immagine container.La prima istruzione
RUN
modifica il file di configurazione dell'immagine principale per supportare il formato di input preferito di AI Platform Prediction per le previsioni.Nello specifico, questa istruzione configura TorchServe in modo che aspetti un envelope service JSON 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 eseguire l'utenteroot
per modificare il file di configurazione e poi continuare a utilizzare l'utenteroot
per le istruzioni seguenti.model-server
La seconda istruzione
RUN
utilizza l'archiviatore di modelli Torch, già installato nell'immagine del contenitore, per creare un'archivio dei modelli dai file che hai copiato nell'immagine. Salva questo archiviazione del modello nella directory/home/model-server/model-store/
con il nome filemnist.mar
.Se vuoi modificare l'immagine del contenitore, ad esempio per eseguire la preelaborazione o la post-elaborazione personalizzata nel gestore delle 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 principale e attiva 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
, perché lo scriptENTRYPOINT
dell'immagine principale esegue il comando passato inCMD
e aggiunge anche una logica aggiuntiva per impedire l'uscita di Docker.
Per creare l'immagine container in base al nuovo Dockerfile e taggarla con un nome compatibile con il repository Artifact Registry, esegui il seguente 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
L'esecuzione del comando potrebbe richiedere diversi minuti.
(Facoltativo) Esegui il contenitore localmente
Prima di eseguire il push dell'immagine del contenitore in Artifact Registry per utilizzarla con AI Platform Prediction, 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 il seguente 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à distinta, mappando la porta
8080
del container alla porta8080
dell'ambiente locale. L'immagine principale, da cui hai dedotto l'immagine container, configura TorchServe per utilizzare la porta8080
.Per inviare al server del contenitore un controllo di stato, esegui il seguente 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 seguente previsione:
{"predictions": [3]}
Per interrompere il contenitore, esegui il seguente comando nella shell:
docker stop local_mnist
Esegui il push dell'immagine del contenitore 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 in Artifact Registry nella regione scelta, esegui il seguente 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 dell'immagine container appena creata in Artifact Registry, esegui il seguente 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 del modello su AI Platform Prediction per eseguire la previsione. La versione del modello esegue l'immagine container come contenitore per fornire le previsioni.
Questo tutorial fornisce opzioni di configurazione specifiche da utilizzare quando crei il modello e la relativa versione. Per scoprire di più sulle diverse opzioni di configurazione, consulta Eseguire il deployment dei modelli.
crea un modello
Per creare una risorsa modello, esegui il seguente 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 il repository Artifact Registry in una sezione precedente.
Creare 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 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 eseguono le seguenti operazioni:
--image
: l'URI dell'immagine del contenitore.--ports
: la porta su cui il server HTTP del contenitore ascolta le richieste. L'immagine principale da cui hai dedotto l'immagine container configura TorchServe per utilizzare la porta8080
.--health-route
: il percorso su cui il server HTTP del contenitore ascolta i controlli di salute. TorchServe è sempre in ascolto per i controlli di integrità nel/ping
percorso.--predict-route
: il percorso in cui il server HTTP del contenitore ascolta le richieste di previsione. TorchServe è sempre in ascolto per le richieste di previsione sul/predictions/MODEL
percorso.MODEL è il nome del modello specificato quando hai avviato TorchServe. In questo caso, il nome è
mnist
, che hai impostato in questa istruzione 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 di TorchServe che hai scaricato in una sezione precedente includono
immagini
di test. La configurazione di TorchServe del contenitore si aspetta di ricevere richieste di previsione in formato JSON, con l'immagine come stringa codificata Base64 nel campo data.b64
di ogni istanza.
Ad esempio, per classificare test_data/3.png
, 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 "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 in 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]}
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 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 in una sezione precedente.
Per eliminare il modello, esegui il seguente 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 in una sezione precedente.
Per eliminare il repository Artifact Registry e l'immagine del contenitore al suo interno, esegui il seguente 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 ricavarla da un'immagine container di terze parti esistente, leggi i 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.