Crear una imagen de contenedor personalizada para el entrenamiento

Usar una imagen de contenedor personalizada ofrece la mayor flexibilidad para entrenar modelos en Vertex AI. Para saber cómo se diferencia el uso de una imagen de contenedor personalizada del uso de una aplicación de entrenamiento de Python con un contenedor prediseñado, consulta los requisitos del código de entrenamiento.

En esta guía se explican los siguientes pasos:

  1. Para crear un contenedor personalizado, sigue estos pasos:
    1. Escribir un Dockerfile que configure tu contenedor para que funcione con Vertex AI e incluya las dependencias necesarias para tu aplicación de entrenamiento.
    2. Crear y ejecutar tu contenedor Docker de forma local.
  2. Enviar la imagen de contenedor a Artifact Registry.

Antes de empezar

Para configurar un repositorio de la API de Artifact Registry y Docker en tu entorno de desarrollo, sigue la guía de inicio rápido de Artifact Registry para Docker. En concreto, asegúrate de completar los siguientes pasos de la guía de inicio rápido:

  • Antes de empezar
  • Elige un shell
  • Crear un repositorio de Docker
  • Configurar la autenticación

Crear una imagen de contenedor personalizada

Recomendamos dos posibles flujos de trabajo para crear una imagen de contenedor personalizada:

  • Escribe el código de entrenamiento. A continuación, usa el comando local-run de la CLI de gcloud para crear y probar unaimagen de contenedor personalizada basada en tu código de entrenamiento sin tener que escribir un Dockerfile.

    Este flujo de trabajo puede ser más sencillo si no estás familiarizado con Docker. Si sigues este flujo de trabajo, puedes saltarte el resto de esta sección.

  • Escribe el código de entrenamiento. A continuación, escribe un Dockerfile y crea una imagen de contenedor basada en él. Por último, prueba el contenedor de forma local.

    Este flujo de trabajo ofrece más flexibilidad, ya que puedes personalizar la imagen de contenedor tanto como quieras.

En el resto de esta sección se describe un ejemplo del segundo flujo de trabajo.

Código de entrenamiento

Puedes escribir código de entrenamiento usando cualquier dependencia en cualquier lenguaje de programación. Asegúrate de que tu código cumpla los requisitos del código de entrenamiento. Si tienes previsto usar la optimización de hiperparámetros, las GPUs o el entrenamiento distribuido, lee las secciones correspondientes de ese documento, ya que describen consideraciones específicas para usar las funciones con contenedores personalizados.

Crear un Dockerfile

Crea un Dockerfile para especificar todas las instrucciones necesarias para crear tu imagen de contenedor.

En esta sección se explica cómo crear un ejemplo genérico de un Dockerfile para usarlo en el entrenamiento personalizado. Para obtener más información sobre cómo crear una imagen de contenedor, consulta la guía de inicio rápido de Docker.

Para usarlo con Vertex AI, tu archivo Dockerfile debe incluir comandos que cubran las siguientes tareas:

  • Elige una imagen base
  • Instalar dependencias adicionales
  • Copia tu código de entrenamiento en la imagen
  • Configurar el punto de entrada para que Vertex AI invoque tu código de entrenamiento

Tu Dockerfile puede incluir lógica adicional, en función de tus necesidades. Para obtener más información sobre cada instrucción específica, consulta la referencia de Dockerfile.

Comando de Dockerfile Descripción Ejemplo(s)
FROM image:tag Especifica una imagen básica y su etiqueta.

Ejemplo de imágenes base con etiquetas:

  • pytorch/pytorch:latest
  • tensorflow/tensorflow:nightly
  • python:2.7.15-jessie
  • nvidia/cuda:9.0-cudnn7-runtime
WORKDIR /path/to/directory Especifica el directorio de la imagen en el que se ejecutan las instrucciones posteriores. /root
RUN pip install pkg1 pkg2 pkg3 Instala paquetes adicionales con pip.

Nota: Si tu imagen base no tiene pip, debes incluir un comando para instalarlo antes de instalar otros paquetes.

Paquetes de ejemplo:

  • google-cloud-storage
  • cloudml-hypertune
  • pandas
COPY src/training-app.py dest/training-app.py Copia el código de tu aplicación de entrenamiento en la imagen. En función de cómo esté estructurada tu aplicación de entrenamiento, es probable que incluya varios archivos.

Ejemplos de nombres de archivos de tu solicitud de entrenamiento:

  • model.py
  • task.py
  • data_utils.py
ENTRYPOINT ["exec", "file"] Configura el punto de entrada para invocar el código de entrenamiento y ejecutarlo. Cuando empieces el entrenamiento personalizado, puedes anular este punto de entrada especificando el campo command en tu ContainerSpec. También puedes especificar el campo args en ContainerSpec para proporcionar argumentos adicionales al punto de entrada (y anular la instrucción CMD de la imagen del contenedor, si tiene alguna). ["python", "task.py"]

La lógica de tu Dockerfile puede variar según tus necesidades, pero en general se parece a esto:

# 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"]

(Opcional) Ajustar el archivo Dockerfile para las VMs de TPU

Si quieres entrenar en Vertex AI con una VM de TPU, debes ajustar tu Dockerfile para instalar versiones creadas específicamente de las bibliotecas tensorflow y libtpu. Consulta más información sobre cómo ajustar tu contenedor para usarlo con una VM de TPU.

Crear la imagen de contenedor

Crea el URI de imagen correcto mediante variables de entorno y, a continuación, compila la imagen 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} ./

En estos comandos, sustituye lo siguiente:

  • REPOSITORY_NAME: el nombre del repositorio de Artifact Registry que has creado en la sección Antes de empezar.
  • IMAGE_NAME: el nombre que elijas para la imagen de tu contenedor.
  • IMAGE_TAG: una etiqueta de tu elección para esta versión de la imagen de tu contenedor.

Consulta más información sobre los requisitos de Artifact Registry para asignar nombres a las imágenes de contenedor.

Ejecutar el contenedor de forma local (opcional)

Verifica la imagen de contenedor ejecutándola como contenedor de forma local. Es probable que quieras ejecutar el código de entrenamiento en un conjunto de datos más pequeño o durante un número de iteraciones inferior al que tienes previsto usar en Vertex AI. Por ejemplo, si la secuencia de comandos del punto de entrada de tu imagen de contenedor acepta una marca --epochs para controlar el número de épocas que se ejecuta, puedes ejecutar el siguiente comando:

docker run ${IMAGE_URI} --epochs 1

Enviar el contenedor a Artifact Registry

Si la ejecución local funciona, puedes enviar el contenedor a Artifact Registry.

Primero, ejecuta gcloud auth configure-docker us-central1-docker.pkg.dev si aún no lo has hecho en tu entorno de desarrollo. A continuación, ejecuta el siguiente comando:

docker push ${IMAGE_URI}

Permisos de Artifact Registry

Si usas una imagen de Artifact Registry del mismo proyecto en el que usas Vertex AI, no es necesario que configures más permisos. Google Cloud Puedes crear inmediatamente una tarea de entrenamiento personalizada que use tu imagen de contenedor.

Sin embargo, si has enviado tu imagen de contenedor a Artifact Registry en un proyecto distinto del proyecto en el que tienes previsto usar Vertex AI, debes conceder al agente de servicio de Vertex AI de tu proyecto de Vertex AI permiso para extraer la imagen del otro proyecto. Google Cloud Consulta más información sobre el agente de servicio de Vertex AI y cómo concederle permisos.

Artifact Registry

Para saber cómo conceder acceso a tu agente de servicio de Vertex AI a tu repositorio de Artifact Registry, consulta la documentación de Artifact Registry sobre cómo conceder permisos específicos de un repositorio.

Siguientes pasos