Descripción general de los contenedores personalizados

Un contenedor personalizado es una imagen de Docker que creas para ejecutar tu aplicación de entrenamiento. Cuando ejecutas tu trabajo de entrenamiento de aprendizaje automático (AA) en un contenedor personalizado, puedes usar frameworks de AA, dependencias, bibliotecas y objetos binarios que no sean de AA, que de otra manera no sean compatibles con Vertex AI.

Cómo funciona el entrenamiento con contenedores

Tu aplicación de entrenamiento, implementada en el marco de trabajo de AA que hayas elegido, es el núcleo del proceso de entrenamiento.

  1. Crea una aplicación que entrene a tu modelo, con el marco de trabajo de AA que elijas.

  2. Decide si usarás un contenedor personalizado. Es posible que haya un contenedor compilado previamente que ya sea compatible con tus dependencias. De lo contrario, debes compilar un contenedor personalizado para tu trabajo de entrenamiento. En el contenedor personalizado, instala previamente la aplicación de entrenamiento y todas sus dependencias en una imagen que se use para ejecutar el trabajo de entrenamiento.

  3. Almacena los datos de entrenamiento y verificación en una fuente a la que pueda acceder Vertex AI. Para simplificar la autenticación y reducir la latencia, almacena tus datos en Cloud Storage, Bigtable o algún otro servicio de almacenamiento de Google Cloud en el mismo proyecto y región de Google Cloud que usas para Vertex AI. Obtén más información sobre las formas en que Vertex AI puede cargar tus datos.

  4. Cuando tu aplicación esté lista para ejecutarse, debes compilar tu imagen de Docker y enviarla a Artifact Registry o Docker Hub. Asegúrate de que Vertex AI pueda acceder a tu registro.

  5. Envía tu trabajo de entrenamiento personalizado creando un trabajo personalizado o creando una canalización de entrenamiento personalizada.

  6. Vertex AI configura recursos para tu trabajo. Asigna una o más máquinas virtuales (llamadas instancias de entrenamiento) en función de la configuración del trabajo. Para configurar una instancia de entrenamiento, usa el contenedor personalizado que especificas como parte del objeto WorkerPoolSpec cuando envías tu trabajo de entrenamiento.

  7. Vertex AI ejecuta la imagen de Docker y pasa cualquier argumento de la línea de comandos que especifiques cuando crees el trabajo de entrenamiento.

  8. Cuando tu trabajo de entrenamiento es correcto o encuentra un error irrecuperable, Vertex AI detiene todos los procesos de trabajo y limpia los recursos.

Ventajas de los contenedores personalizados

Los contenedores personalizados te permiten especificar y también instalar previamente todas las dependencias que necesitas para tu aplicación.

  • Menor tiempo de inicio. Si usas un contenedor personalizado con tus dependencias instaladas previamente, puedes ahorrar el tiempo que tu aplicación de entrenamiento tardaría en instalar las dependencias al momento del inicio.
  • Usa el framework de AA que prefieras. Si no puedes encontrar un contenedor compilado previamente de Vertex AI con el marco de trabajo de AA que deseas usar, puedes compilar un contenedor personalizado con el marco de trabajo que elijas y usarlo para ejecutar trabajos en Vertex AI. Por ejemplo, puedes usar un contenedor del cliente para entrenar con PyTorch.
  • Compatibilidad extendida con el entrenamiento distribuido. Con los contenedores personalizados, puedes realizar un entrenamiento distribuido con cualquier marco de trabajo de AA.
  • Utiliza la versión más reciente. También puedes usar la última versión de compilación o menor de un marco de trabajo de AA. Por ejemplo, puedes compilar un contenedor personalizado para entrenar con tf-nightly.

Ajuste de hiperparámetros con contenedores personalizados

Para realizar el ajuste de hiperparámetros en Vertex AI, especifica las métricas del objetivo, junto con la posibilidad de minimizar o maximizar cada métrica. Por ejemplo, es posible que desees maximizar la exactitud del modelo o minimizar la pérdida del modelo. También puedes enumerar los hiperparámetros que deseas ajustar, junto con el rango de valores aceptables para cada hiperparámetro. Vertex AI realiza varias pruebas de tu aplicación de entrenamiento y realiza un seguimiento y un ajuste de los hiperparámetros después de cada prueba. Cuando se completa el trabajo de ajuste de hiperparámetros, Vertex AI informa los valores de la configuración más efectiva de los hiperparámetros y un resumen de cada prueba.

Para realizar ajustes de hiperparámetros con contenedores personalizados, debes hacer lo siguiente:

  • En tu Dockerfile, instala cloudml-hypertune.
  • En tu código de entrenamiento:
    • Usa cloudml-hypertune a fin de informar los resultados de cada prueba. Para ello, llama a su función auxiliar, report_hyperparameter_tuning_metric.
    • Agrega argumentos de la línea de comandos para cada hiperparámetro y controla el análisis de argumentos con un analizador de argumentos como argparse.

Consulta cómo configurar un trabajo de ajuste de hiperparámetros que usa contenedores personalizados o bien obtén más información sobre cómo funciona el ajuste de hiperparámetros en Vertex AI.

GPU en contenedores personalizados

Para el entrenamiento con GPU, tu contenedor personalizado debe cumplir con algunos requisitos especiales. Debes compilar una imagen de Docker diferente de la que usarías para entrenar con CPU.

  • Instala previamente el kit de herramientas CUDA y cuDNN en tu imagen de Docker. La forma recomendada de compilar un contenedor personalizado compatible con GPU es usar la imagen nvidia/cuda como la imagen base para el contenedor personalizado. La imagen del contenedor nvidia/cuda tiene versiones coincidentes del kit de herramientas CUDA y cuDNN preinstaladas, y te ayuda a configurar las variables de entorno relacionadas de manera correcta.
  • Instala la aplicación de entrenamiento, junto con el marco de trabajo de AA necesario y otras dependencias, en la imagen de Docker.

Consulta un ejemplo de Dockerfile para el entrenamiento con GPU.

¿Qué sigue?