Per iniziare: pubblicazione di previsioni PyTorch con un container personalizzato

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

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the AI Platform Training & Prediction and Artifact Registry API APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the AI Platform Training & Prediction and Artifact Registry API APIs.

    Enable the APIs

  8. In the Google Cloud console, activate Cloud Shell.

    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:

  1. Install the Google Cloud CLI.
  2. To initialize the gcloud CLI, run the following command:

    gcloud init
  3. 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 addestrata
  • mnist_cnn.pt: contiene un state_dict con i pesi delle funzionalità e altri output dell'addestramento
  • mnist_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.

  1. 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'utentemodel-server (creato nell'immagine principale) non ha. Le istruzioni indicano a Docker di eseguirsi come utente root per modificare di configurazione del deployment e continuare a utilizzare l'utente model-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 file mnist.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 denominato mnist. Questo carica il file mnist.mar creato dall'istruzione RUN.

      Questa istruzione sostituisce l'elemento CMD dell'immagine principale istruzioni per l'uso. È importante sostituire l'istruzione CMD non l'istruzione ENTRYPOINT, perché gli attributi ENTRYPOINT dell'immagine principale script esegue il comando passato in CMD e aggiunge anche per impedire la chiusura di Docker.

  2. 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:

  1. 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 porta 8080 del ambiente locale. L'immagine principale, da cui hai dedotto l'immagine del contenitore, configura TorchServe per utilizzare la porta8080.

  2. 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"
    }
    
  3. 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]}
    
  4. 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.

  1. 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.

  2. 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:

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:

  1. 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.

  2. 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.

  3. 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