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:
- Crear un contenedor personalizado:
- 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.
- Compilar y ejecutar tu contenedor de Docker de forma local
- 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:
|
WORKDIR /path/to/directory |
Especifica el directorio en la imagen en la que se ejecutan las instrucciones posteriores. | /root |
|
Instala paquetes adicionales con pip .Nota: Si tu imagen base no tiene |
Paquetes de ejemplo:
|
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:
|
|
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?
- Obtén más información sobre los conceptos implicados en el uso de los contenedores.
- Obtén más información sobre los requisitos de código de entrenamiento adicionales para el entrenamiento personalizado.
- Obtén más información para crear un trabajo de entrenamiento personalizado o una canalización de entrenamiento que use tu contenedor personalizado.