Addestramento in un container utilizzando Google Kubernetes Engine

Questa pagina mostra come eseguire un job di addestramento in un'istanza di Deep Learning Containers e come eseguire l'immagine del container su un cluster Google Kubernetes Engine.

Prima di iniziare

Prima di iniziare, assicurati di aver completato i seguenti passaggi.

  1. Completa i passaggi di configurazione descritti nella sezione Prima di iniziare di Introduzione a un container di deep learning locale.

  2. Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud.

    Scopri come attivare la fatturazione

  3. Attiva le API Google Kubernetes Engine, Compute Engine e Artifact Registry.

    Attiva le API

Apri lo strumento a riga di comando

Puoi seguire questa guida utilizzando Cloud Shell o gli strumenti a riga di comando in locale. Cloud Shell include gli strumenti a riga di comando gcloud, docker e kubectl utilizzati in questo tutorial. Se utilizzi Cloud Shell, non è necessario installare questi strumenti a riga di comando sulla tua workstation.

Cloud Shell

Per utilizzare Cloud Shell, completa i seguenti passaggi.

  1. Vai alla console Google Cloud.

  2. Fai clic sul pulsante Attiva Cloud Shell nella parte superiore della finestra della console.

    Console Google Cloud Platform

    All'interno di un nuovo frame nella parte inferiore della console si apre una sessione di Cloud Shell e viene visualizzato un prompt della riga di comando.

    Sessione di Cloud Shell

Riga di comando locale

Per utilizzare la riga di comando locale, completa i seguenti passaggi.

  1. Utilizza la gcloud CLI per installare lo strumento a riga di comando Kubernetes. kubectl viene utilizzato per comunicare con Kubernetes, il sistema di orchestrazione dei cluster di Deep Learning Containers:

    gcloud components install kubectl
    

    Dopo aver completato i passaggi di inizio, hai installato Google Cloud CLI e Docker.

Crea un cluster GKE

Esegui il seguente comando per creare un cluster di due nodi in GKE denominato pytorch-training-cluster:

gcloud container clusters create pytorch-training-cluster \
    --num-nodes=2 \
    --zone=us-west1-b \
    --accelerator="type=nvidia-tesla-p100,count=1" \
    --machine-type="n1-highmem-2" \
    --scopes="gke-default,storage-rw"

Per ulteriori informazioni su queste impostazioni, consulta la documentazione sulla creazione di cluster per l'esecuzione di contenitori.

La creazione del cluster potrebbe richiedere diversi minuti.

In alternativa, anziché creare un cluster, puoi utilizzare un cluster esistente nel tuo progetto Google Cloud. In questo caso, potresti dover eseguire il seguente comando per assicurarti che lo strumento a riga di comando kubectl abbia le credenziali appropriate per accedere al cluster:

gcloud container clusters get-credentials YOUR_EXISTING_CLUSTER

Successivamente, installa i driver GPU NVIDIA.

Crea il Dockerfile

Esistono molti modi per creare un'immagine container. Questi passaggi mostrano come crearne uno per eseguire uno script Python chiamato trainer.py.

Per visualizzare un elenco delle immagini container disponibili:

gcloud container images list \
    --repository="us-docker.pkg.dev/deeplearning-platform-release/gcr.io"

Ti consigliamo di consultare la sezione Scegliere un contenitore per selezionare il contenitore che preferisci.

L'esempio seguente mostra come inserire uno script Python denominato trainer.py in un tipo di contenitore di deep learning PyTorch specifico.

Per creare il file Dockerfile, scrivi i seguenti comandi in un file denominato Dockerfile. Questo passaggio presuppone che tu abbia il codice per addestrare un modello di machine learning in una directory denominata model-training-code e che il modulo Python principale in quella directory sia denominato trainer.py. In questo scenario, il contenitore verrà rimosso al termine del job, pertanto lo script di addestramento deve essere configurato per l'output su Cloud Storage (consulta un esempio di script che genera output su Cloud Storage) o su archiviazione permanente.

FROM us-docker.pkg.dev/deeplearning-platform-release/gcr.io/pytorch-gpu
COPY model-training-code /train
CMD ["python", "/train/trainer.py"]

Crea e carica l'immagine del contenitore

Per compilare e caricare l'immagine del contenitore in Artifact Registry, utilizza i seguenti comandi:

export PROJECT_ID=$(gcloud config list project --format "value(core.project)")
export IMAGE_REPO_NAME=pytorch_custom_container
export IMAGE_TAG=$(date +%Y%m%d_%H%M%S)
export IMAGE_URI=us-docker.pkg.dev/$PROJECT_ID/$IMAGE_REPO_NAME:$IMAGE_TAG

docker build -f Dockerfile -t $IMAGE_URI ./

docker push $IMAGE_URI

Esegui il deployment dell'applicazione

Crea un file denominato pod.yaml con i seguenti contenuti, sostituendo IMAGE_URI con l'URI dell'immagine.

apiVersion: v1
kind: Pod
metadata:
  name: gke-training-pod
spec:
  containers:
  - name: my-custom-container
    image: IMAGE_URI
    resources:
      limits:
        nvidia.com/gpu: 1

Utilizza lo strumento a riga di comando kubectl per eseguire il seguente comando e eseguire il deployment dell'applicazione:

kubectl apply -f ./pod.yaml

Per monitorare lo stato del pod, esegui il seguente comando:

kubectl describe pod gke-training-pod