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 para usar las GPU y la sección de este documento sobre el ajuste del código de entrenamiento para usar las GPU, a fin de asegurarte de que tu 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 experimentando con máquinas habilitadas para GPU, puedes configurar el nivel de escala en BASIC_GPU
para obtener una sola instancia de trabajador con una GPU.
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 paramasterConfig
,workerConfig
,parameterServerConfig
oevaluatorConfig
, según las instancias de máquinas virtuales (VM) que desees acelerar. Puedes usar los siguientes tipos de GPU:NVIDIA_TESLA_A100
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:
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.
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 trabajadorn1-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 la siguiente limitación adicional sobre los recursos de GPU para AI Platform Training que aplican a casos particulares:
- 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.
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 el trabajador principal y cualquier otro tipo de tarea (trabajador, servidor de parámetros o evaluador) que desees acelerar a fin de 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 la tarea:
standard_gpu
: Una sola GPUcomplex_model_m_gpu
: Cuatro GPUscomplex_model_l_gpu
: Ocho GPUsstandard_p100
: una sola GPU de NVIDIA Tesla P100complex_model_m_p100
: cuatro GPU de NVIDIA Tesla P100standard_v100
: una sola GPU de NVIDIA Tesla V100large_model_v100
: una sola GPU de NVIDIA Tesla V100complex_model_m_v100
: cuatro GPU de NVIDIA Tesla V100complex_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
.
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 archivosconfig.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 GPUs masterType: complex_model_m_gpu # Configure 9 workers, each with 4 GPUs workerCount: 9 workerType: complex_model_m_gpu # Configure 3 parameter servers with no GPUs parameterServerCount: 3 parameterServerType: large_model
Usa el comando de
gcloud
para enviar el trabajo, incluido un argumento de--config
que apunte a tu archivoconfig.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 degcloud
y el inicio de losUSER_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 GPUs, usa la API de tf.distribute.Strategy
en el código de entrenamiento:
- Para entrenar en una sola VM con varias GPU, recomendamos usar
MirroredStrategy
, que tiene una compatibilidad total con Keras en TensorFlow 2.1 y versiones posteriores. - Si deseas entrenar en varias VM con GPU, consulta las recomendaciones para el entrenamiento distribuido.
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?
- Lee una descripción general sobre cómo funciona el entrenamiento.
- Comprende los límites sobre el uso simultáneo de GPU.
- Lee sobre el uso de las GPU con TensorFlow.
- Lee una comparación de rendimiento y costo de las GPU más recientes, como NVIDIA Tesla T4.