Crea trabajos de entrenamiento personalizados

Los trabajos de entrenamiento personalizados (recursos de CustomJob en la API de Vertex AI) son la forma básica de ejecutar tu código de entrenamiento personalizado de aprendizaje automático (AA) en Vertex AI.

Antes de enviar un trabajo

Antes de crear un CustomJob en Vertex AI, debes crear una aplicación de entrenamiento de Python o una imagen de contenedor personalizada para definir el código de entrenamiento y las dependencias que deseas ejecutar en Vertex AI.

Te recomendamos que uses el empaquetado automático de la CLI Google Cloud, que se describe en una sección posterior de esta guía, para crear una imagen del contenedor de Docker desde el código en tu máquina local. Envía esta imagen de contenedor a Container Registry y crea un CustomJob, todo con un solo comando.

De lo contrario, debes crear manualmente una aplicación de entrenamiento de Python o una imagen de contenedor personalizada.

Si no estás seguro de cuál de estas opciones elegir, consulta los requisitos del código de entrenamiento para obtener más información.

Qué incluye un trabajo personalizado

Cuando creas un trabajo personalizado, especificas la configuración que necesita Vertex AI para ejecutar tu código de entrenamiento, incluido lo siguiente:

En los grupos de trabajadores, puedes especificar la siguiente configuración:

También puedes configurar trabajos personalizados para que se ejecuten en un recurso persistente en lugar de crear nuevos recursos de procesamiento durante el inicio del trabajo. Para obtener más información sobre los recursos persistentes, consulta Crea y usa recursos persistentes.

Configura el entrenamiento distribuido

A fin de configurar un CustomJob para el entrenamiento distribuido, especifica varios grupos de trabajadores.

En la mayoría de los ejemplos de esta página, se muestran trabajos de entrenamiento de una sola réplica con un grupo de trabajadores. A fin de modificarlos para el entrenamiento distribuido, sigue estos pasos:

  • Usa tu primer grupo de trabajadores para configurar la réplica principal y establece el recuento de réplicas en 1.
  • Agrega más grupos de trabajadores para configurar réplicas de trabajadores, réplicas del servidor de parámetros o réplicas de evaluadores, si tu framework de aprendizaje automático admite estas tareas adicionales del clúster para el entrenamiento distribuido.

Obtén más información sobre cómo usar el entrenamiento distribuido.

Crea una CustomJob

Para crear un CustomJob, sigue las instrucciones en una de las siguientes pestañas, según la herramienta que desees usar. Si usas la CLI de gcloud, puedes usar un solo comando para empaquetar de forma automática el código de entrenamiento en tu máquina local en una imagen de contenedor de Docker, enviarla a Container Registry y crear un CustomJob. Otras opciones suponen que ya creaste una aplicación de entrenamiento de Python o una imagen de contenedor personalizada.

gcloud

En los siguientes ejemplos, se usa el comando gcloud ai custom-jobs create.

Si el código de entrenamiento está en tu computadora local, te recomendamos que sigas la sección Con empaquetado automático. De forma alternativa, si ya creaste una aplicación de entrenamiento de Python o una imagen de contenedor personalizada, ve directamente a la sección Sin empaquetado automático.

Con empaquetado automático

Si tienes código de entrenamiento en tu computadora local, puedes usar un único comando para realizar las siguientes acciones:

  • Compilar una imagen de Docker personalizada basada en tu código
  • Envía la imagen a Container Registry.
  • Iniciar una CustomJob basada en la imagen

El resultado es similar a crear un CustomJob mediante cualquier otro contenedor personalizado. Puedes usar esta versión del comando si es conveniente para tu flujo de trabajo.

Antes de comenzar

Debido a que esta versión del comando compila y envía una imagen de Docker, debes realizar la siguiente configuración en tu computadora local:

  1. Instala Docker Engine

  2. Si usas Linux, configura Docker para que puedas ejecutarlo sin sudo.

  3. Habilita la API de Container Registry.

    Habilita la API

  4. Configura la autenticación para Docker a fin de enviar las imágenes de Docker a Container Registry:

    gcloud auth configure-docker
    

Compila y envía la imagen de Docker y crea un CustomJob

Con el siguiente comando, se compila una imagen de Docker basada en una imagen de contenedor de entrenamiento compilada previamente y el código de Python local envía la imagen a Container Registry y crea un CustomJob.

gcloud ai custom-jobs create \
  --region=LOCATION \
  --display-name=JOB_NAME \
  --worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=EXECUTOR_IMAGE_URI,local-package-path=WORKING_DIRECTORY,script=SCRIPT_PATH

Reemplaza lo siguiente:

  • LOCATION: es la región en la que se ejecutará el contenedor o el paquete de Python.

  • JOB_NAME: Obligatorio. Es un nombre visible para CustomJob.

  • MACHINE_TYPE: El tipo de máquina. Consulta los tipos de máquinas disponibles para el entrenamiento.

  • REPLICA_COUNT: La cantidad de réplicas de trabajadores que se deben usar. En la mayoría de los casos, configura esto como 1 para tu primer grupo de trabajadores.

  • EXECUTOR_IMAGE_URI: Es el URI de la imagen de contenedor que ejecuta el código proporcionado. Consulta los contenedores compilados previamente disponibles para el entrenamiento.

    Esta imagen actúa como la imagen base para la imagen de Docker nueva que compilas con este comando.

  • WORKING_DIRECTORY: Un directorio en tu sistema de archivos local que contiene la secuencia de comandos del punto de entrada que ejecuta el código de entrenamiento (consulta el siguiente elemento de la lista)

    Puedes usar el directorio superior de la secuencia de comandos o un directorio de nivel superior. Te recomendamos usar un directorio de nivel superior para especificar un nombre de módulo de Python completamente calificado (consulta el siguiente elemento de la lista). También puedes usar un directorio de nivel superior si contiene un archivo requirements.txt o setup.py. Para obtener más información, consulta Instala dependencias.

    Ten en cuenta que incluso si especificas un directorio de nivel superior, este comando solo copia el directorio superior de la secuencia de comandos del punto de entrada en la imagen de Docker.

  • SCRIPT_PATH: La ruta de acceso (en relación con WORKING_DIRECTORY en el sistema de archivos local) a la secuencia de comandos que es el punto de entrada del código de entrenamiento Puede ser una secuencia de comandos de Python (que termina en .py) o una de Bash.

    Por ejemplo, si deseas ejecutar /hello-world/trainer/task.py y WORKING_DIRECTORY es /hello-world, usa trainer/task.py para este valor.

    Usa python-module en lugar de script

    De manera opcional, puedes reemplazar script=SCRIPT_PATH por python-module=PYTHON_MODULE a fin de especificar el nombre de un módulo de Python en WORKING_DIRECTORY para que se ejecute como el punto de entrada del entrenamiento. Por ejemplo, en lugar de script=trainer/task.py, puedes especificar python-module=trainer.task.

    En este caso, el contenedor resultante de Docker carga el código como un módulo en lugar de como una secuencia de comandos. Es probable que desees usar esta opción si la secuencia de comandos del punto de entrada importa otros módulos de Python en WORKING_DIRECTORY.

Instale dependencias

Cuando usas el empaquetado automático, puedes instalar dependencias de Python en tu contenedor de la misma forma en que están disponibles cuando usas el comando local-run de la CLI de gcloud. Para obtener información sobre las diversas formas de instalar dependencias de Python, lee la sección Instala dependencias de la guía para el comando local-run.

La sintaxis para especificar dependencias difiere un poco cuando usas el empaquetado automático en comparación con el uso del comando local-run. En lugar de usar marcas de línea de comandos para especificar dependencias, debes usar las opciones del valor de la marca --worker-pool-spec. Además, los valores dentro de estas opciones deben estar separados por punto y coma en lugar de comas. Específicamente, la sintaxis

  • En lugar de la marca --local-package-path del comando local-run, usa la opción local-package-path en el valor de la marca --worker-pool-spec. Si el directorio de trabajo que especificas con esta opción contiene un archivo requirements.txt o setup.py, el empaquetado automático instala dependencias basadas en este archivo.

    En el ejemplo anterior, se demuestra esta sintaxis.

  • En lugar de la marca --requirements, usa la opción requirements en el valor de la marca --worker-pool-spec (opcional). En lugar de separar las dependencias de PyPI con las comas, usa punto y coma.

  • En lugar de la marca --extra-packages, usa la opción extra-packages en el valor de la marca --worker-pool-spec (opcional). En lugar de separar las dependencias locales con comas, usa punto y coma.

  • En lugar de la marca --extra-dirs, usa la opción extra-dirs en el valor de la marca --worker-pool-spec (opcional). En lugar de separar las rutas de directorio con comas, usa punto y coma.

En el siguiente ejemplo, se muestra cómo instalar dependencias mediante todas las técnicas opcionales. (Puedes especificar cualquier subconjunto de ellas). A fin de demostrar la sintaxis de punto y coma, en el ejemplo se especifican dos valores para cada opción. A fin de reducir la longitud del ejemplo, otras opciones de --worker-pool-spec se reemplazan por [...].

gcloud ai custom-jobs create \
  --region=LOCATION \
  --display-name=JOB_NAME \
  --worker-pool-spec=[...],requirements=PYPI_DEP_1;PYPI_DEP_2,extra-packages=LOCAL_DEP_1;LOCAL_DEP_2,extra-dirs=EXTRA_DIR_1;EXTRA_DIR_2

Si quieres obtener información sobre los valores apropiados para estos marcadores de posición, consulta “Instala dependencias” en la guía para el comando de local-run.