Crea un'immagine container personalizzata per l'addestramento

Un'immagine container personalizzata offre la massima flessibilità per l'addestramento su Vertex AI. Per scoprire come l'utilizzo di un'immagine container personalizzata differisce dall'utilizzo di un'applicazione di addestramento Python con un container predefinito, consulta Requisiti del codice di addestramento.

La guida illustra i seguenti passaggi:

  1. Creazione di un container personalizzato:
    1. Scrivere un Dockerfile che configuri il container in modo che funzioni con Vertex AI e includa le dipendenze necessarie per l'applicazione di addestramento.
    2. Creare ed eseguire il container Docker in locale.
  2. Push dell'immagine container ad Artifact Registry.

Prima di iniziare

Per configurare un repository API Artifact Registry e impostare Docker nel tuo ambiente di sviluppo, segui la guida rapida di Artifact Registry per Docker. In particolare, assicurati di completare i seguenti passaggi della guida rapida:

  • Prima di iniziare
  • Scegli una shell
  • Crea un repository Docker
  • Configura l'autenticazione

Crea un'immagine container personalizzata

Consigliamo due possibili flussi di lavoro per la creazione di un'immagine container personalizzata:

  • Scrivi il tuo codice di addestramento. Quindi, utilizza il comando local-run dell'interfaccia a riga di comando gcloud per creare e testare un'immagine container personalizzata in base al codice di addestramento senza scrivere personalmente un Dockerfile.

    Questo flusso di lavoro può essere più semplice se non hai familiarità con Docker. Se segui questo flusso di lavoro, puoi saltare il resto di questa sezione.

  • Scrivi il tuo codice di addestramento. Poi, scrivi un Dockerfile e crea un'immagine container basata su questo. Infine, testa il container localmente.

    Questo flusso di lavoro offre maggiore flessibilità, poiché puoi personalizzare l'immagine del container come preferisci.

Il resto di questa sezione illustra un esempio di flusso di lavoro relativo a quest'ultimo.

Codice di addestramento

Puoi scrivere il codice di addestramento utilizzando qualsiasi dipendenza in qualsiasi linguaggio di programmazione. Assicurati che il tuo codice soddisfi i requisiti del codice di addestramento. Se prevedi di utilizzare l'ottimizzazione degli iperparametri, le GPU o l'addestramento distribuito, assicurati di leggere le sezioni corrispondenti del documento. Queste sezioni descrivono considerazioni specifiche per l'utilizzo delle funzionalità con container personalizzati.

Crea un Dockerfile

Crea un Dockerfile per specificare tutte le istruzioni necessarie per creare l'immagine container.

Questa sezione illustra la creazione di un esempio generico di Dockerfile da utilizzare per l'addestramento personalizzato. Per ulteriori informazioni sulla creazione di un'immagine container, consulta la guida rapida della documentazione di Docker.

Per l'uso con Vertex AI, il Dockerfile deve includere comandi per le attività seguenti:

  • Scegli un'immagine di base
  • Installa dipendenze aggiuntive
  • Copia il codice di addestramento nell'immagine
  • Configura il punto di ingresso per Vertex AI per richiamare il tuo codice di addestramento

Il Dockerfile può includere logica aggiuntiva, a seconda delle tue esigenze. Per ulteriori informazioni su ciascuna istruzione specifica, consulta la documentazione di riferimento sui Dockerfile.

Comando Dockerfile Descrizione Esempi
FROM image:tag Specifica un'immagine di base e il relativo tag.

Esempi di immagini di base con tag:

  • pytorch/pytorch:latest
  • tensorflow/tensorflow:nightly
  • python:2.7.15-jessie
  • nvidia/cuda:9.0-cudnn7-runtime
WORKDIR /path/to/directory Specifica la directory sull'immagine in cui vengono eseguite le istruzioni successive. /root
RUN pip install pkg1 pkg2 pkg3 Installa pacchetti aggiuntivi utilizzando pip.

Nota: se l'immagine di base non ha pip, devi includere un comando per installarlo prima di installare altri pacchetti.

Pacchetti di esempio:

  • google-cloud-storage
  • cloudml-hypertune
  • pandas
COPY src/foo.py dest/foo.py Copia il codice dell'applicazione di addestramento nell'immagine. A seconda di come è strutturata l'applicazione di addestramento, è probabile che vengano inclusi più file.

Nomi di esempio di file nella tua applicazione di addestramento:

  • model.py
  • task.py
  • data_utils.py
ENTRYPOINT ["exec", "file"] Configura il punto di ingresso per richiamare il codice di addestramento da eseguire. Quando avvii l'addestramento personalizzato, puoi eseguire l'override di questo punto di ingresso specificando il campo command in ContainerSpec. Puoi anche specificare il campo args in ContainerSpec per fornire argomenti aggiuntivi per il punto di ingresso (e sostituire l'istruzione CMD dell'immagine container, se presente). ["python", "task.py"]

La logica nel Dockerfile può variare in base alle tue esigenze, ma in generale ha il seguente aspetto:

# Specifies base image and tag
FROM image:tag
WORKDIR /root

# Installs additional packages
RUN pip install pkg1 pkg2 pkg3

# Downloads training data
RUN curl http://example-url/path-to-data/data-filename --output /root/data-filename

# Copies the trainer code to the docker image.
COPY your-path-to/model.py /root/model.py
COPY your-path-to/task.py /root/task.py

# Sets up the entry point to invoke the trainer.
ENTRYPOINT ["python", "task.py"]

(Facoltativo) Regola il Dockerfile per le VM TPU

Se vuoi eseguire l'addestramento su Vertex AI utilizzando una VM TPU, devi modificare il Dockerfile per installare versioni appositamente create delle librerie tensorflow e libtpu. Scopri di più sulla modifica del container per l'utilizzo con una VM TPU.

Crea l'immagine container

Crea l'URI dell'immagine corretto utilizzando le variabili di ambiente, quindi crea l'immagine Docker:

export PROJECT_ID=$(gcloud config list project --format "value(core.project)")
export REPO_NAME=REPOSITORY_NAME
export IMAGE_NAME=IMAGE_NAME
export IMAGE_TAG=IMAGE_TAG
export IMAGE_URI=us-central1-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}/${IMAGE_NAME}:${IMAGE_TAG}

docker build -f Dockerfile -t ${IMAGE_URI} ./

In questi comandi, sostituisci quanto segue:

  • REPOSITORY_NAME: il nome del repository Artifact Registry creato nella sezione Prima di iniziare.
  • IMAGE_NAME: un nome a tua scelta per l'immagine container.
  • IMAGE_TAG: un tag a tua scelta per questa versione dell'immagine container.

Scopri di più sui requisiti di Artifact Registry per la denominazione dell'immagine container.

Esegui il container localmente (facoltativo)

Verifica l'immagine container eseguendola come container localmente. È probabile che tu voglia eseguire il codice di addestramento su un set di dati più piccolo o per un numero di iterazioni inferiore rispetto a quello previsto su Vertex AI. Ad esempio, se lo script entrypoint nella tua immagine container accetta un flag --epochs per controllare il numero di epoche per cui viene eseguito, puoi eseguire il seguente comando:

docker run ${IMAGE_URI} --epochs 1

Esegui il push del container in Artifact Registry

Se l'esecuzione locale funziona, puoi eseguire il push del container su Artifact Registry.

Innanzitutto, esegui gcloud auth configure-docker us-central1-docker.pkg.dev se non l'hai già fatto nel tuo ambiente di sviluppo. Quindi esegui questo comando:

docker push ${IMAGE_URI}

Autorizzazioni di Artifact Registry

Se utilizzi un'immagine Artifact Registry dello stesso progetto Google Cloud in cui utilizzi Vertex AI, non è necessario configurare ulteriormente le autorizzazioni. Puoi creare immediatamente un job di addestramento personalizzato che utilizza l'immagine del container.

Tuttavia, se hai eseguito il push dell'immagine container ad Artifact Registry in un altro progetto Google Cloud dal progetto in cui prevedi di utilizzare Vertex AI, devi concedere all'agente di servizio Vertex AI per il tuo progetto Vertex AI l'autorizzazione a eseguire il pull dell'immagine dall'altro progetto. Scopri di più sull'agente di servizio Vertex AI e su come concedergli le autorizzazioni.

Artifact Registry

Per scoprire come concedere all'agente di servizio Vertex AI l'accesso al repository Artifact Registry, leggi la documentazione di Artifact Registry sulla concessione di autorizzazioni specifiche per il repository.

Passaggi successivi