Creare un'immagine container personalizzata per l'addestramento

L'utilizzo di un'immagine container personalizzata offre la massima flessibilità per l'addestramento su Vertex AI. Per scoprire in che modo l'utilizzo di un'immagine container personalizzata differisce dall'utilizzo di un'applicazione di addestramento Python con un container predefinito, leggi i Requisiti del codice di addestramento.

La guida illustra i seguenti passaggi:

  1. Creazione di un container personalizzato:
    1. Scrivi un Dockerfile che configuri il container per il funzionamento con Vertex AI e includa le dipendenze necessarie per l'applicazione di addestramento.
    2. Creazione ed esecuzione del container Docker in locale.
  2. Esegui il push dell'immagine del contenitore in Artifact Registry.

Prima di iniziare

Per configurare un repository dell'API Artifact Registry e Docker nel tuo 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 autenticazione

Creare un'immagine del contenitore personalizzata

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

  • Scrivi il codice di addestramento. Quindi, utilizza il comando local-run della CLI gcloud per creare e testare un'immagine container personalizzata in base al tuo codice di addestramento senza scrivere 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 codice di addestramento. Poi scrivi un Dockerfile e crea un'immagine container sulla base di questi dati. Infine, testa il container in locale.

    Questo flusso di lavoro offre maggiore flessibilità perché è possibile l'immagine container come preferisci.

Il resto di questa sezione illustra un esempio di questo secondo flusso di lavoro.

Codice di addestramento

Puoi scrivere codice di addestramento utilizzando qualsiasi dipendenza in qualsiasi linguaggio di programmazione. Assicurati che il 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, che descrivono considerazioni specifiche per l'utilizzo delle funzionalità con i contenitori personalizzati.

Crea un Dockerfile

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

Questa sezione illustra la creazione di un esempio generico di Dockerfile da utilizzare per e addestramento personalizzato. Per scoprire di più sulla creazione di un'immagine contenitore, consulta la guida rapida della documentazione di Docker.

Per l'utilizzo con Vertex AI, il file Dockerfile deve includere comandi che coprono le seguenti attività:

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

Il Dockerfile può includere logica aggiuntiva, a seconda delle esigenze. Per ulteriori informazioni su ogni istruzione specifica, consulta il riferimento 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 le istruzioni successive vengono eseguite correttamente. /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/training-app.py dest/training-app.py Copia il codice per l'applicazione di addestramento nell'immagine. A seconda della struttura dell'applicazione di addestramento, probabilmente include più file.

Esempi di nomi di file nell'applicazione di addestramento:

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

La logica del Dockerfile può variare in base alle tue esigenze, ma in generale è simile a questa:

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

# Installs additional packages
RUN pip install pkg1 pkg2 pkg3

# Downloads training data
RUN curl https://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) Modifica il file Dockerfile per le VM TPU

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

Crea l'immagine container

Crea l'URI 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 che 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 del contenitore dell'immagine.

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

Esegui il container in locale (facoltativo)

Verifica l'immagine container eseguendola come container in locale. È probabile che tu voglia di eseguire il codice di addestramento su un set di dati più piccolo o per un numero rispetto a quelle che prevedi di eseguire su Vertex AI. Ad esempio, se lo script del punto di ingresso nell'immagine container accetta un flag --epochs per controllare quante epoche per cui viene eseguito, puoi eseguire questo 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 contenitore in Artifact Registry.

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

docker push ${IMAGE_URI}

Autorizzazioni 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 una un job di addestramento personalizzato che utilizza nell'immagine container.

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

Artifact Registry

Scopri come concedere all'agente di servizio Vertex AI l'accesso ad Artifact Registry. consulta la documentazione di Artifact Registry su come concedere specifico per il repository autorizzazioni.

Passaggi successivi