Crea una imagen de contenedor personalizado para el entrenamiento

El uso de una imagen de contenedor personalizada proporciona la mayor flexibilidad para el entrenamiento en Vertex AI. Para aprender cómo usar una imagen de contenedor personalizado difiere de usar una aplicación de entrenamiento de Python con un contenedor compilado previamente, consulta los Requisitos del código de entrenamiento.

En la guía se explican los siguientes pasos:

  1. Crear un contenedor personalizado:
    1. Escribe un Dockerfile que configure tu contenedor de modo que funcione con Vertex AI y, además, incluya las dependencias necesarias para la aplicación de entrenamiento.
    2. Compilar y ejecutar tu contenedor de Docker de forma local
  2. Envía la imagen del contenedor a Artifact Registry.

Antes de comenzar

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

  • Antes de comenzar
  • Elige una shell
  • Crea un repositorio de Docker
  • Configura la autenticación

Crea una imagen de contenedor personalizada

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

  • Escribe el código de entrenamiento. Luego, usa el comando local-run de la CLI de gcloud para compilar y probar una imagen de contenedor personalizada según el código de entrenamiento sin escribir un Dockerfile.

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

  • Escribe el código de entrenamiento. Luego, escribe un Dockerfile y compila una imagen de contenedor a partir de él. Por último, pruebe el contenedor de forma local.

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

En el resto de esta sección, se muestra un ejemplo del último flujo de trabajo.

Código de capacitación

Puedes escribir código de entrenamiento con cualquier dependencia en cualquier lenguaje de programación. Asegúrate de que tu código cumpla con los requisitos del código de entrenamiento. Si planeas usar ajuste de hiperparámetros, GPU o entrenamiento distribuido, asegúrate de leer las secciones correspondientes de ese documento; En estas secciones, se describen las consideraciones específicas para usar las funciones con contenedores personalizados.

Crea un Dockerfile

Crea un Dockerfile a fin de especificar todas las instrucciones necesarias para compilar la imagen de contenedor.

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

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

  • Elegir una imagen base
  • Instalar dependencias adicionales
  • Copiar tu código de entrenamiento en la imagen
  • Configurar el punto de entrada para Vertex AI a fin de invocar tu código de entrenamiento

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

Comando Dockerfile Descripción Ejemplos
FROM image:tag Especifica una imagen básica y su etiqueta.

Imágenes base de ejemplo 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 en la imagen en la 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 instalarla 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 para tu aplicación de entrenamiento en la imagen. Según cómo esté estructurada tu aplicación de entrenamiento, es probable que esto incluya varios archivos.

Ejemplos de nombres de archivos en tu aplicación de entrenamiento:

  • model.py
  • task.py
  • data_utils.py
ENTRYPOINT ["exec", "file"] Configura el punto de entrada para invocar el código de entrenamiento que se debe ejecutar. Cuando comienzas un entrenamiento personalizado, puedes anular este punto de entrada si especificas 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 lo tiene). ["python", "task.py"]

La lógica en tu Dockerfile puede variar según tus necesidades, pero en general se parece al siguiente ejemplo:

# 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) Cómo ajustar tu Dockerfile para VMs de TPU

Si deseas entrenar en Vertex AI con una VM de TPU, debes ajustar tu Dockerfile para instalar versiones compiladas especialmente de las bibliotecas tensorflow y libtpu. Obtén más información para ajustar tu contenedor para usarlo con una VM de TPU.

Compila la imagen del contenedor

Crea el URI de imagen correcto con las variables de entorno y, a continuación, compila la imagen de 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, reemplaza lo siguiente:

  • REPOSITORY_NAME: El nombre del repositorio de Artifact Registry que creaste en la sección Antes de comenzar
  • IMAGE_NAME: Un nombre que elijas para la imagen de contenedor
  • IMAGE_TAG: Una etiqueta que elijas para esta versión de tu imagen de contenedor.

Obtén más información sobre los requisitos de Artifact Registry para nombrar tu imagen de contenedor.

Ejecuta el contenedor de forma local (opcional)

Verifica la imagen del contenedor mediante su ejecución como un contenedor de forma local. Es posible que desees ejecutar tu código de entrenamiento en un conjunto de datos más pequeño o para una cantidad de iteraciones más corta que la que planeas ejecutar en la IA de Vertex. Por ejemplo, si la secuencia de comandos de punto de entrada de la imagen de tu contenedor acepta una marca --epochs para controlar cuántos ciclos de entrenamiento se ejecutan, puedes ejecutar el siguiente comando:

docker run ${IMAGE_URI} --epochs 1

Envía 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. Luego, ejecuta el comando siguiente:

docker push ${IMAGE_URI}

Permisos de Artifact Registry

Si usas una imagen de Artifact Registry del mismo proyecto de Google Cloud en el que usas Vertex AI, no es necesario configurar permisos. Puedes crear un trabajo de entrenamiento personalizado que use la imagen de contenedor de inmediato.

Sin embargo, si enviaste tu imagen de contenedor a Artifact Registry en un proyecto de Google Cloud diferente del proyecto en el que planeas usar Vertex AI, debes otorgar el agente del servicio de Vertex AI. para que tu proyecto de Vertex IA extraiga la imagen del otro proyecto. Obtén más información sobre el agente de servicios de Vertex AI y cómo otorgarlo.

Artifact Registry

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

¿Qué sigue?