Utiliza las GPU para modelos de entrenamiento en la nube

Las unidades de procesamiento de gráficos (GPU) pueden acelerar de manera significativa el proceso de entrenamiento para muchos modelos de aprendizaje profundo. Los modelos de entrenamiento para tareas como la clasificación de imágenes, el análisis de videos y el procesamiento de lenguaje natural implican la multiplicación de matrices de procesamiento intensivo y otras operaciones que pueden aprovechar la arquitectura masivamente paralela de una GPU.

Entrenar un modelo de aprendizaje profundo que implica tareas de procesamiento intensivo en conjuntos de datos extremadamente grandes puede demorar varios días en ejecutarse en un solo procesador. Sin embargo, si diseñas tu programa para descargar esas tareas a una GPU o más, puedes reducir el tiempo de entrenamiento a horas en lugar de días.

Antes de comenzar

AI Platform Training te permite ejecutar la aplicación de entrenamiento de TensorFlow en una máquina habilitada para GPU. Lee la guía de TensorFlow sobre el uso de GPU y la sección de este documento sobre el ajuste del código de entrenamiento para usar GPU, a fin de asegurarte de que la aplicación use las GPU disponibles.

También puedes usar las GPU con frameworks de aprendizaje automático que no sean de TensorFlow, si usas un contenedor personalizado para el entrenamiento.

Algunos modelos no se benefician de ejecutarse en GPU. Recomendamos GPU para modelos grandes y complejos que tienen muchas operaciones matemáticas. Incluso en ese caso, deberías probar el beneficio de la asistencia de GPU. Para ello, ejecuta una pequeña muestra de tus datos a través del entrenamiento.

Solicita máquinas habilitadas para GPU

Si quieres usar GPU en la nube, configura el trabajo de entrenamiento a fin de acceder a máquinas habilitadas para GPU de una de las siguientes maneras:

  • Usa el nivel de escala BASIC_GPU.
  • Usa los tipos de máquina de Compute Engine y conecta las GPU.
  • Usa los tipos de máquinas heredadas compatibles con GPU.

Máquina básica habilitada para GPU

Si estás aprendiendo a usar AI Platform Training o si experimentas con máquinas habilitadas para GPU, puedes configurar el nivel de escala en BASIC_GPU a fin de obtener una sola instancia de trabajador con una sola GPU NVIDIA Tesla K80.

Tipos de máquinas de Compute Engine con GPU conectadas

Si configuras el trabajo de entrenamiento con los tipos de máquinas de Compute Engine, puedes conectar una cantidad personalizada de GPU para acelerar tu trabajo:

  • Establece el nivel de escala en CUSTOM.
  • Configura el trabajador principal y cualquier otro tipo de tarea (trabajador, servidor de parámetros o evaluador) que forme parte del trabajo para usar tipos de máquinas válidos de Compute Engine.
  • Agrega un campo acceleratorConfig con el tipo y la cantidad de GPU que quieras para masterConfig, workerConfig, parameterServerConfig o evaluatorConfig, según las instancias de máquinas virtuales (VM) que desees acelerar. Puedes usar los siguientes tipos de GPU:
    • NVIDIA_TESLA_A100
    • NVIDIA_TESLA_K80
    • NVIDIA_TESLA_P4
    • NVIDIA_TESLA_P100
    • NVIDIA_TESLA_T4
    • NVIDIA_TESLA_V100

Si quieres crear un acceleratorConfig válido, debes tener en cuenta varias restricciones:

  1. Solo puedes usar una cantidad determinada de GPU en tu configuración. Por ejemplo, puedes conectar 2 o 4 NVIDIA Tesla T4, pero no 3. A fin de averiguar qué recuentos son válidos para cada tipo de GPU, consulta la tabla de compatibilidad que figura a continuación.

  2. Debes asegurarte de que cada una de las configuraciones de tu GPU proporcione suficientes CPU virtuales y memoria para el tipo de máquina al que realizas la conexión. Por ejemplo, si usas n1-standard-32 para tus trabajadores, cada trabajador tendrá 32 CPU virtuales y 120 GB de memoria. Cada NVIDIA Tesla V100 puede proporcionar hasta 12 CPU virtuales y 76 GB de memoria, por lo que debes conectar, al menos, 4 a cada trabajador n1-standard-32 para cumplir con los requisitos. (2 GPU no proporcionan los recursos suficientes y no puedes especificar 3 GPU).

    Revisa la lista de tipos de máquinas para AI Platform Training y la comparación de las GPU para las cargas de trabajo de procesamiento a fin de determinar estas compatibilidades, o bien consulta la tabla de compatibilidad que figura a continuación.

    Ten en cuenta las siguientes limitaciones adicionales sobre los recursos de GPU para AI Platform Training que aplican a casos particulares:

    • Una configuración con 8 GPU NVIDIA Tesla K80 proporciona un máximo de 208 GB de memoria en todas las regiones y zonas.
    • Una configuración con 4 GPU NVIDIA Tesla P100 admite un máximo de 64 CPU virtuales y 208 GB de memoria en todas las regiones y zonas.
  3. Debes enviar tu trabajo de entrenamiento a una región que admita la configuración de tu GPU. Lee acerca de la compatibilidad por región que figura a continuación.

En la siguiente tabla, se brinda una referencia rápida sobre el número de cada tipo de acelerador que puedes conectar a cada tipo de máquina de Compute Engine:

Números válidos de GPU para cada tipo de máquina
Tipo de máquina NVIDIA® A100 NVIDIA Tesla K80 NVIDIA Tesla P4 NVIDIA Tesla P100 NVIDIA Tesla T4 NVIDIA Tesla V100
n1-standard-4 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-standard-8 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-standard-16 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 2, 4, 8
n1-standard-32 4, 8 2, 4 2, 4 2, 4 4, 8
n1-standard-64 4 4 8
n1-standard-96 4 4 8
n1-highmem-2 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highmem-4 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highmem-8 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highmem-16 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 2, 4, 8
n1-highmem-32 4, 8 2, 4 2, 4 2, 4 4, 8
n1-highmem-64 4 4 8
n1-highmem-96 4 4 8
n1-highcpu-16 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 2, 4, 8
n1-highcpu-32 4, 8 2, 4 2, 4 2, 4 4, 8
n1-highcpu-64 8 4 4 4 8
n1-highcpu-96 4 4 8
a2-highgpu-1g 1
a2-highgpu-2g 2
a2-highgpu-4g 4
a2-highgpu-8g 8
a2-megagpu-16g 16

A continuación, se incluye un ejemplo para enviar un trabajo con los tipos de máquinas de Compute Engine con GPU adjuntas.

Tipos de máquina con GPU incluidas

Como alternativa, en lugar de usar un acceleratorConfig, puedes seleccionar un tipo de máquina heredado que tenga las GPU incluidas:

  • Establece el nivel de escala en CUSTOM.
  • Configura tu trabajador principal y cualquier otro tipo de tarea (trabajador, servidor de parámetros o evaluador) que desees acelerar para usar uno de los siguientes tipos de máquinas habilitadas para GPU, según la cantidad de GPU y el tipo de acelerador necesario para tu tarea:
    • standard_gpu: una sola GPU NVIDIA Tesla K80
    • complex_model_m_gpu: cuatro GPU de NVIDIA Tesla K80
    • complex_model_l_gpu: ocho GPU de NVIDIA Tesla K80
    • standard_p100: una sola GPU de NVIDIA Tesla P100
    • complex_model_m_p100: cuatro GPU de NVIDIA Tesla P100
    • standard_v100: una sola GPU de NVIDIA Tesla V100
    • large_model_v100: una sola GPU de NVIDIA Tesla V100
    • complex_model_m_v100: cuatro GPU de NVIDIA Tesla V100
    • complex_model_l_v100: ocho GPU de NVIDIA Tesla V100

A continuación, se muestra un ejemplo a fin de enviar un trabajo con los tipos de máquinas habilitados para GPU con el comando gcloud.

Consulta más información sobre los tipos de máquinas para AI Platform Training.

Regiones que admiten GPU

Debes ejecutar tu trabajo en una región que admita las GPU. Las siguientes regiones actualmente proporcionan acceso a las GPU:

  • us-west1
  • us-west2
  • us-central1
  • us-east1
  • us-east4
  • northamerica-northeast1
  • southamerica-east1
  • europe-west1
  • europe-west2
  • europe-west4
  • asia-south1
  • asia-southeast1
  • asia-east1
  • asia-northeast1
  • asia-northeast3
  • australia-southeast1

Además, algunas de estas regiones solo brindan acceso a determinados tipos de GPU. A fin de comprender a fondo las regiones disponibles para los servicios de AI Platform Training, incluidos el entrenamiento de modelos y la predicción en línea o por lotes, consulta la guía de regiones.

Si tu trabajo de entrenamiento usa varios tipos de GPU, todos deben estar disponible en una misma zona de tu región. Por ejemplo, no puedes ejecutar un trabajo en us-central1 con un trabajador principal que use GPU NVIDIA Tesla T4, servidores de parámetros que usen GPU NVIDIA Tesla K80 ni trabajadores que usen GPU NVIDIA Tesla P100. Si bien todas estas GPU están disponibles para trabajos de entrenamiento en us-central1, ninguna zona de esa región ofrece los tres tipos de GPU. Si quieres obtener más información sobre la disponibilidad de zona de las GPU, consulta la comparación de las GPU para las cargas de trabajo de procesamiento.

Envía el trabajo de entrenamiento

Puedes enviar tu trabajo de entrenamiento con el comando gcloud ai-platform jobs submit training.

  1. Define un archivo config.yaml que describa las opciones de GPU que deseas. La estructura del archivo YAML representa el recurso de trabajo. A continuación, se presentan dos ejemplos de archivos config.yaml.

    En el primer ejemplo, se muestra un archivo de configuración para un trabajo de entrenamiento que usa tipos de máquina de Compute Engine, algunos de los cuales tienen GPU conectadas:

    trainingInput:
      scaleTier: CUSTOM
      # Configure a master worker with 4 T4 GPUs
      masterType: n1-highcpu-16
      masterConfig:
        acceleratorConfig:
          count: 4
          type: NVIDIA_TESLA_T4
      # Configure 9 workers, each with 4 T4 GPUs
      workerCount: 9
      workerType: n1-highcpu-16
      workerConfig:
        acceleratorConfig:
          count: 4
          type: NVIDIA_TESLA_T4
      # Configure 3 parameter servers with no GPUs
      parameterServerCount: 3
      parameterServerType: n1-highmem-8
    

    En el ejemplo siguiente, se muestra un archivo de configuración para un trabajo con una configuración similar a la anterior. Sin embargo, esta configuración usas tipos de máquina heredados que incluyen las GPU, en lugar de conectar las GPU a un acceleratorConfig:

    trainingInput:
      scaleTier: CUSTOM
      # Configure a master worker with 4 K80 GPUs
      masterType: complex_model_m_gpu
      # Configure 9 workers, each with 4 K80 GPUs
      workerCount: 9
      workerType: complex_model_m_gpu
      # Configure 3 parameter servers with no GPUs
      parameterServerCount: 3
      parameterServerType: large_model
    
  2. Usa el comando de gcloud para enviar el trabajo, incluido un argumento de --config que apunte a tu archivo config.yaml. En el siguiente ejemplo, suponemos que ya configuraste las variables de entorno, que se indican con un signo $ seguido de letras mayúsculas, para los valores de algunos argumentos:

    gcloud ai-platform jobs submit training $JOB_NAME \
            --package-path $APP_PACKAGE_PATH \
            --module-name $MAIN_APP_MODULE \
            --job-dir $JOB_DIR \
            --region us-central1 \
            --config config.yaml \
            -- \
            --user_arg_1 value_1 \
             ...
            --user_arg_n value_n
    

Como alternativa, puedes especificar los detalles de la configuración del clúster con marcas de la línea de comandos, en lugar de un archivo de configuración. Obtén más información sobre cómo usar estas marcas.

En el ejemplo siguiente, se muestra cómo enviar un trabajo con la misma configuración que en el primer ejemplo (con los tipos de máquinas de Compute Engine con GPU conectadas), pero lo hace sin usar un archivo config.yaml:

gcloud ai-platform jobs submit training $JOB_NAME \
        --package-path $APP_PACKAGE_PATH \
        --module-name $MAIN_APP_MODULE \
        --job-dir $JOB_DIR \
        --region us-central1 \
        --scale-tier custom \
        --master-machine-type n1-highcpu-16 \
        --master-accelerator count=4,type=nvidia-tesla-t4 \
        --worker-count 9 \
        --worker-machine-type n1-highcpu-16 \
        --worker-accelerator count=4,type=nvidia-tesla-t4 \
        --parameter-server-count 3 \
        --parameter-server-machine-type n1-highmem-8 \
        -- \
        --user_arg_1 value_1 \
         ...
        --user_arg_n value_n

Notas:

  • Si especificas una opción en el archivo de configuración (config.yaml) y como una marca de línea de comandos, el valor en la línea de comandos anula el valor en el archivo de configuración.
  • La marca vacía -- indica el final de las marcas específicas de gcloud y el inicio de los USER_ARGS que quieres pasar a la aplicación.
  • Las marcas específicas de AI Platform Training, como --module-name, --runtime-version y --job-dir, deben aparecer antes de la marca vacía --. El servicio AI Platform Training interpreta estas marcas.
  • Si se especifica la marca --job-dir, debe aparecer antes de la marca vacía --, ya que AI Platform Training usa --job-dir para validar la ruta de acceso.
  • La aplicación también debe controlar la marca --job-dir, si se especifica. Aunque la marca aparezca antes de la -- vacía, --job-dir también se pasa a tu aplicación como una marca de línea de comandos.
  • Puedes definir tantos USER_ARGS como necesites. AI Platform Training pasa --user_first_arg, --user_second_arg, etc. a la aplicación.

Si deseas obtener más detalles sobre las opciones de envío de trabajos, consulta la guía para comenzar un trabajo de entrenamiento.

Ajusta el código de entrenamiento para que use GPU

Si usas Keras o Estimadores para el trabajo de entrenamiento de TensorFlow y deseas entrenar mediante una sola VM con una GPU, no necesitas personalizar el código de la GPU.

Si el clúster de entrenamiento contiene varias GPU, usa la API tf.distribute.Strategy en el código de entrenamiento:

Para personalizar el modo en que TensorFlow asigna operaciones específicas a las GPU, lee la guía de TensorFlow sobre el uso de GPU. En este caso, también podría ser útil aprender cómo AI Platform Training establece la variable de entorno TF_CONFIG en cada VM.

Strings de dispositivos de GPU

La GPU standard_gpu única de una máquina se identifica como "/gpu:0". Las máquinas con varias GPU usan identificadores que comienzan con "/gpu:0", luego "/gpu:1", y así de forma sucesiva. Por ejemplo, las máquinas complex_model_m_gpu tienen cuatro GPU identificadas desde "/gpu:0" hasta "/gpu:3".

Paquetes de Python en máquinas compatibles con GPU

Las máquinas habilitadas para GPU tienen preinstalado tensorflow-gpu, el paquete de Python de TensorFlow compatible con GPU. Consulta la lista de versiones de entorno de ejecución para obtener una lista de todos los paquetes preinstalados.

Eventos de mantenimiento

En ocasiones, las VM habilitadas para GPU que ejecutan trabajos de AI Platform Training están sujetas al mantenimiento del host de Compute Engine. Las VM están configuradas con el fin de reiniciarse de forma automática después de estos eventos de mantenimiento, pero es posible que tengas que hacer algunos trabajos adicionales con el objetivo de garantizar que tu trabajo sea resistente a estos cierres. Configura la aplicación de entrenamiento a fin de guardar puntos de control del modelo con regularidad (por lo general, junto con la ruta de Cloud Storage que especifiques a través del argumento --job-dir en gcloud ai-platform jobs submit training) y para restablecer el punto de control más reciente en el caso de que ya exista uno.

Los Estimadores de TensorFlow implementan esta funcionalidad por ti, siempre que especifiques un model_dir. Los estimadores suelen guardar puntos de control en model_dir y, luego, intentan cargarlos desde el último punto de control para que no tengas que preocuparte por los eventos de mantenimiento en tus trabajadores de GPU.

Si entrenas con Keras, usa la devolución de llamada ModelCheckpoint para guardar el progreso del entrenamiento de forma periódica. Si usas tf.distribute.Strategy con Keras, las VM usan puntos de control para recuperarse de forma automática de los reinicios. De lo contrario, agrega lógica al código de entrenamiento para verificar la existencia de un punto de control reciente y restaurarlo desde el punto de control, si existe.

Para obtener más casos avanzados, lee la guía de TensorFlow sobre puntos de control.

¿Qué sigue?