GPU

En esta página, se muestra cómo usar los aceleradores de hardware de la unidad de procesamiento de gráficos (GPU) de NVIDIA® en los nodos de los clústeres de Google Kubernetes Engine.

Descripción general

Con GKE, puedes crear grupos de nodos equipados con GPU NVIDIA Tesla® K80, P100, P4, V100 y T4. Las GPU brindan potencia de procesamiento para impulsar tareas de aprendizaje profundo, como reconocimiento de imágenes, procesamiento de lenguaje natural y otras tareas con grandes requisitos de procesamiento, como la transcodificación de videos y el procesamiento de imágenes.

También puedes usar las GPU con VM interrumpibles si tus cargas de trabajo pueden tolerar interrupciones frecuentes en los nodos. Usar las VM interrumpibles reduce el precio de la ejecución de GPU. Para obtener más información, consulta las GPU en instancias interrumpibles.

Requisitos

Las GPU en GKE tienen los requisitos siguientes:

Versión de Kubernetes
Para los grupos de nodos que usan la imagen de nodo de Container-Optimized OS, los nodos de GPU están disponibles en GKE versión 1.9 o posterior. Para los grupos de nodos que usan la imagen de nodo de Ubuntu, los nodos de GPU están disponibles en GKE versión 1.11.3 o superior.
Cuota de GPU

Debes tener la cuota de GPU de Compute Engine en la zona que deseas antes de que puedas crear nodos de GPU. A fin de asegurarte de que cuentas con suficiente cuota de GPU para tu proyecto, consulta Cuotas en Google Cloud Console.

Si necesitas una cuota de GPU adicional, debes solicitar una cuota de GPU en Cloud Console. Si tienes una cuenta de facturación establecida, tu proyecto debería recibir de forma automática la cuota después de enviar la solicitud de esta.

Controladores de GPU de NVIDIA

Debes instalar de forma manual los controladores de GPU de NVIDIA en tus nodos. En esta página, se explica cómo instalar los controladores.

Limitaciones

Antes de usar las GPU en GKE, ten en cuenta las limitaciones siguientes:

  • No puedes agregar las GPU a grupos de nodos existentes.
  • Los nodos de GPU no se pueden migrar en vivo durante los eventos de mantenimiento.

Disponibilidad

Las GPU están disponibles en regiones y zonas específicas. Cuando solicites cuota de GPU, debes tener en cuenta las regiones en las que quieres ejecutar tus clústeres.

Para obtener una lista completa de las regiones y zonas aplicables, consulta GPU en Compute Engine.

También puedes ver las GPU disponibles en tu zona con la herramienta de línea de comandos de gcloud.

gcloud

Para obtener una lista de todos los tipos de aceleradores de GPU compatibles de cada zona, ejecuta el comando siguiente:

gcloud compute accelerator-types list

Precios

Para obtener información sobre los precios de GPU, consulta la tabla de precios en la página GPU de GCP.

Cuota de GPU

Tu cuota de GPU es la cantidad total de GPU que puedes ejecutar en tu proyecto de GCP. Para crear clústeres con GPU, tu proyecto debe contar con una cuota de GPU suficiente.

Como mínimo, tu cuota de GPU debe ser equivalente a la cantidad total de GPU que quieres ejecutar en tu clúster. Si habilitas el ajuste de escala automático del clúster, debes solicitar una cuota de GPU que sea, al menos, equivalente a la cantidad máxima de nodos de tu clúster multiplicado por la cantidad de GPU por nodo.

Por ejemplo, si creas un clúster con tres nodos que ejecutan dos GPU por nodo, tu proyecto necesita, al menos, seis cuotas de GPU.

Solicita la cuota de GPU

La cuota de GPU se solicita con Cloud Console.

Console

Completa los pasos siguientes:

  1. Dirígete al menú Cuotas de Cloud Identity and Access Management (Cloud IAM) en Cloud Console.

    Ir al menú Cuotas

  2. En el menú desplegable Metrics (Métricas), haz clic en None (Ninguna) y, a continuación, escribe “gpus” en el campo de búsqueda.

  3. Desde los resultados de la búsqueda, selecciona las GPU que deseas:

    Captura de pantalla del menú desplegable Métricas, donde se muestran las métricas de las GPU seleccionadas.

  4. Cierra el menú desplegable Métricas.

Envía la solicitud de la cuota

Console

Completa los pasos siguientes:

  1. En la lista de cuotas de GPU, selecciona las cuotas para las regiones que desees, como us-central1.
  2. Haz clic en Editar cuotas. Se abrirá un formulario de solicitud del lado derecho de Cloud Console.
  3. Completa el campo Nuevo límite de cuota para cada solicitud de cuotas.
  4. Completa el campo Descripción de la solicitud con los detalles sobre tu solicitud.
  5. Haz clic en Listo.
  6. Haz clic en Enviar solicitud.

Ejecuta GPU

En las secciones siguientes, se explica cómo ejecutar GPU en los clústeres de GKE.

Crea un grupo de nodos de GPU de ajuste de escala automático

A fin de aprovechar al máximo y de la manera más rentable las GPU en GKE y para beneficiarte del ajuste de escala automático del clúster, recomendamos que crees grupos de nodos de GPU por separado en tus clústeres.

Cuando agregas un grupo de nodos de GPU a un clúster existente que ya ejecuta un grupo de nodos sin GPU, GKE ejecuta taints de forma automática en los nodos de GPU con el siguiente taint de nodo:

  • Clave: nvidia.com/gpu
  • Efecto: NoSchedule

Además, GKE aplica de forma automática las tolerancias correspondientes a los pods que solicitan GPU mediante la ejecución del controlador de admisión ExtendedResourceToleration.

Esto provoca que, en los nodos de GPU, se programen solo los pods que solicitan GPU, lo que permite que el ajuste de escala automático sea más eficaz: tus nodos de GPU pueden escalar con rapidez si no hay suficientes pods que soliciten GPU.

Puedes crear un grupo de nodos de GPU en un clúster existente con Cloud Console o la herramienta de línea de comandos de gcloud.

gcloud

Para crear un grupo de nodos con GPU, ejecuta el comando siguiente:

gcloud container node-pools create [POOL_NAME] \
--accelerator type=[GPU_TYPE],count=[AMOUNT] --zone [COMPUTE_ZONE] \
--cluster [CLUSTER_NAME] [--num-nodes 3 --min-nodes 0 --max-nodes 5 \
--enable-autoscaling]

En el ejemplo anterior, se ilustra lo siguiente:

  • [POOL_NAME] es el nombre que eliges para el grupo de nodos.
  • [GPU_TYPE] es el tipo de GPU, ya sea nvidia-tesla-k80, nvidia-tesla-p100, nvidia-tesla-p4, nvidia-tesla-v100 o nvidia-tesla-t4.
  • [AMOUNT] es la cantidad de GPU que se conectarán a los nodos en el grupo de nodos.
  • [COMPUTE_ZONE] es la zona de procesamiento en la que se crea el grupo de nodos, como us-central1-c. El clúster ya debe estar en ejecución en la zona especificada.
  • [CLUSTER_NAME] es el nombre del clúster en el que se creará el grupo de nodos.
  • --num-nodes especifica la cantidad inicial de nodos que se crearán.
  • --min-nodes especifica la cantidad mínima de nodos que se deben ejecutar en un momento determinado.
  • --max-nodes especifica la cantidad máxima de nodos que se pueden ejecutar.
  • --enable-autoscaling permite que el grupo de nodos se escale de forma automática cuando la carga de trabajo exige cambios.

Por ejemplo, con el siguiente comando, se crea un grupo de nodos con ajuste de escala automático, p100, con dos GPU P100, en el clúster p100-cluster:

gcloud container node-pools create p100 \
--accelerator type=nvidia-tesla-p100,count=2 \
--zone us-central1-c --cluster p100-cluster \
--num-nodes 3 --min-nodes 0 --max-nodes 5 --enable-autoscaling

Console

  1. Visita el menú de Google Kubernetes Engine en Cloud Console.

    Ir al menú Google Kubernetes Engine

  2. Selecciona el clúster que desees.

  3. Haz clic en Editar.

  4. Desde Grupos de nodos, haz clic en Agregar grupo de nodos.

  5. De manera opcional, desde el menú desplegable Ajuste de escala automático, selecciona Activar.

  6. Configura tu grupo de nodos como desees. A continuación, en Tipo de máquina, haz clic en Personalizar.

  7. En el menú desplegable Cantidad de GPU, selecciona la cantidad de GPU que deseas que se ejecuten por nodo.

  8. En el menú desplegable Tipo de GPU, selecciona el tipo de GPU que deseas.

  9. Para confirmar la advertencia, selecciona la casilla de verificación Entiendo las limitaciones.

  10. Haz clic en Guardar.

Crea un clúster zonal nuevo con GPU

Crea un clúster zonal que ejecute GPU mediante Cloud Console o la herramienta de línea de comandos de gcloud.

gcloud

Para crear un clúster zonal con GPU en ejecución en su grupo de nodos predeterminado, ejecuta el comando siguiente:

gcloud container clusters create [CLUSTER_NAME] \
--accelerator type=[GPU_TYPE],count=[AMOUNT] \
--zone [COMPUTE_ZONE]

En el ejemplo anterior, se ilustra lo siguiente:

  • [CLUSTER_NAME] es el nombre que eliges para el clúster.
  • [GPU_TYPE] es el tipo de GPU, ya sea nvidia-tesla-k80, nvidia-tesla-p100, nvidia-tesla-p4, nvidia-tesla-v100 o nvidia-tesla-t4.
  • [AMOUNT] es la cantidad de GPU que se ejecutarán en el grupo de nodos predeterminado.
  • [COMPUTE_ZONE] es la zona de procesamiento del clúster, como us-central1-c.

Por ejemplo, con el siguiente comando, se crea un clúster, p100, con tres nodos (el valor predeterminado cuando se omite --num-nodes) y dos GPU P100 por nodo:

gcloud container clusters create p100 \
--accelerator type=nvidia-tesla-p100,count=2 \
--zone us-central1-c

Console

  1. Visita el menú de Google Kubernetes Engine en Cloud Console.

    Ir al menú Google Kubernetes Engine

  2. Haz clic en Crear clúster.

  3. Elige la plantilla de clústeres de procesamiento acelerado con GPU.

  4. Configura tu clúster como desees. Luego, personaliza el grupo de nodos de GPU o agrega los grupos de nodos de GPU adicionales.

  5. Para confirmar la advertencia, selecciona Entiendo las limitaciones.

  6. Haz clic en Crear.

Crea un clúster regional nuevo con GPU

De forma predeterminada, los clústeres regionales crean nodos en tres zonas de una región. Sin embargo, ninguna región de GCP tiene GPU en las tres zonas. Cuando creas clústeres regionales con GPU, debes especificar de forma manual las zonas en que las GPU están disponibles. Para saber qué zonas cuentan con GPU, consulta Disponibilidad.

Puedes crear un clúster de GPU regional con la herramienta de línea de comandos de gcloud.

gcloud

Para crear un clúster regional con GPU, ejecuta el comando siguiente:

gcloud container clusters create [CLUSTER_NAME] \
--accelerator type=[GPU_TYPE],count=[AMOUNT] \
--region [REGION] --node-locations [ZONE],[ZONE]

donde:

  • [CLUSTER_NAME] es el nombre que elegiste para el clúster.
  • [GPU_TYPE] es el tipo de GPU: nvidia-tesla-k80, nvidia-tesla-p100, nvidia-tesla-p4, nvidia-tesla-v100 o nvidia-tesla-t4.
  • [AMOUNT] es la cantidad de GPU que se deben ejecutar por nodo.
  • [REGION] es la región del clúster, como us-central1.
  • [ZONE] es una zona de procesamiento dentro de la región, como us-central1-c. Las zonas deben tener los tipos de GPU que especifiques.

Por ejemplo, con el siguiente comando, se crea un clúster, p100, con tres nodos (el valor predeterminado cuando se omite --num-nodes) y dos GPU P100 por nodo, en dos zonas dentro de us-central1:

gcloud container clusters create p100 \
--accelerator type=nvidia-tesla-p100,count=2 \
--region us-central1 \ --node-locations us-central1-a,us-central1-c

Console

  1. Visita el menú de Google Kubernetes Engine en Cloud Console.

    Ir al menú Google Kubernetes Engine

  2. Haz clic en Crear clúster.

  3. Elige la plantilla de clústeres de procesamiento acelerado con GPU.

  4. En Tipo de ubicación, elige Regional. En Región, elige la región deseada.

  5. Configura tu clúster como desees. Luego, personaliza el grupo de nodos de GPU o agrega los grupos de nodos de GPU adicionales.

  6. Para confirmar la advertencia, selecciona Entiendo las limitaciones.

  7. Haz clic en Crear.

Instala los controladores de las GPU de NVIDIA

Después de agregar los nodos de GPU a tu clúster, debes instalar los controladores del dispositivo de NVIDIA en los nodos. Google proporciona un DaemonSet que instala de forma automática los controladores para ti.

Consulta la sección a continuación para obtener las instrucciones de instalación de Container-Optimized OS (COS) y nodos Ubuntu.

COS

Para implementar la instalación de DaemonSet, ejecuta el siguiente comando:

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml

La instalación tarda varios minutos en completarse. Una vez instalado, el complemento del dispositivo de NVIDIA muestra la capacidad de la GPU a través de las API de Kubernetes.

En la siguiente tabla, se muestra la versión de GKE compatible con cada versión del controlador de Nvidia:

Versión de GKE Controlador de Nvidia
1.14.2-gke.3 y posteriores 418.67
1.14.2-gke.2 y anteriores 418.67
1.13.6-gke.6 y posteriores 418.67
1.13.6-gke.5 y anteriores 410.79
1.12.x 410.79
1.11.5 y posteriores 410.79
1.10.5-gke.4 y posteriores 396.46
1.10.2-gke.3 y posteriores 390.46

Ubuntu

Ten en cuenta que la compatibilidad con GPU requiere de la versión v1.11.3 o superior para los nodos de Ubuntu.

Para implementar la instalación de DaemonSet, ejecuta el comando siguiente:

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded.yaml

La instalación tarda varios segundos en completarse. Una vez instalado, el complemento del dispositivo de NVIDIA muestra la capacidad de la GPU a través de las API de Kubernetes.

En la siguiente tabla, se muestra la versión de GKE compatible con cada versión del controlador de Nvidia:

Versión de GKE Controlador de NVIDIA
1.14.6-gke.13 y versiones posteriores 418.74
1.14.6-gke.12 y versiones anteriores 410.104
1.13.9-gke.11 y versiones posteriores 418.74
1.13.9-gke.10 y versiones anteriores 410.104
1.12.6-gke.6 y versiones posteriores 410.104
1.12.6-gke.5 y versiones anteriores 384.111
1.11.8-gke.4 y versiones posteriores 410.104
1.11.8-gke.3 y versiones anteriores 384.111

Configura pods para el consumo de GPU

Usa un límite de recursos a fin de configurar la cantidad de GPU que consumen los pods. Debes especificar un límite de recursos en una especificación de pod con los pares clave-valor siguientes:

  • Clave: nvidia/gpu
  • Valor: cantidad de GPU que se consumirán

A continuación, se muestra un ejemplo de una especificación de pod que consume GPU:

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  containers:
  - name: my-gpu-container
    image: nvidia/cuda:10.0-runtime-ubuntu18.04
    command: ["/bin/bash"]
    resources:
      limits:
       nvidia.com/gpu: 2

Consume varios tipos de GPU

Si deseas usar varios tipos de aceleradores de GPU por clúster, debes crear varios grupos de nodos, cada uno con su propio tipo de acelerador. GKE conecta un selector de nodo único a los nodos de GPU para ayudar a colocar las cargas de trabajo de GPU en los nodos con tipos de GPU específicos:

  • Clave: cloud.google.com/gke-accelerator
  • Valor: nvidia-tesla-k80, nvidia-tesla-p100, nvidia-tesla-p4, nvidia-tesla-v100 o nvidia-tesla-t4.

Puedes especificar tipos de GPU determinados si agregas este selector de nodo a la especificación del pod de tu carga de trabajo. Por ejemplo:

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  containers:
  - name: my-gpu-container
    image: nvidia/cuda:10.0-runtime-ubuntu18.04
    command: ["/bin/bash"]
    resources:
      limits:
       nvidia.com/gpu: 2
  nodeSelector:
    cloud.google.com/gke-accelerator: nvidia-tesla-k80 # or nvidia-tesla-p100 or nvidia-tesla-p4 or nvidia-tesla-v100 or nvidia-tesla-t4

Acerca de las bibliotecas CUDA

CUDA® es una plataforma de procesamiento paralela de NVIDIA y un modelo de programación para las GPU. Los controladores del dispositivo NVIDIA que instalas en tu clúster incluyen las bibliotecas CUDA.

Las bibliotecas CUDA y las utilidades de depuración están disponibles dentro del contenedor en /usr/local/nvidia/lib64 y /usr/local/nvidia/bin, respectivamente.

Las aplicaciones CUDA que se ejecutan en los pods que consumen las GPU de NVIDIA necesitan detectar de forma dinámica las bibliotecas CUDA. Esto requiere incluir /usr/local/nvidia/lib64 en la variable de entorno LD_LIBRARY_PATH.

Debes usar las imágenes base de CUDA Docker basadas en Ubuntu para las aplicaciones CUDA en GKE, en las que LD_LIBRARY_PATH ya está establecido de forma correcta. La última versión admitida de CUDA es 10.0 en COS (1.11.5+) y Ubuntu (1.11.8-gke.4+, 1.12.6-gke.6+).

Supervisa los nodos de GPU

GKE expone las métricas siguientes de Stackdriver Monitoring para los contenedores mediante las GPU. Puedes usar estas métricas para supervisar el rendimiento de tus cargas de trabajo de GPU:

  • Ciclo de trabajo (container/accelerator/duty_cycle): Porcentaje de tiempo durante el último período de muestra (10 segundos) durante el cual el acelerador se procesaba de forma activa. Entre 1 y 100.
  • Uso de memoria (container/accelerator/memory_used): cantidad de memoria del acelerador asignada en bytes.
  • Capacidad de memoria (container/accelerator/memory_total): Memoria total del acelerador en bytes.

Estas métricas están disponibles en Stackdriver.

Para obtener más información sobre cómo supervisar tus clústeres y sus recursos, consulta Supervisión.

Visualiza las métricas de uso

Puedes ver las métricas de uso de GPU de tus cargas de trabajo desde el panel de Cargas de trabajo en Cloud Console.

Console

Para ver el uso de GPU de tus cargas de trabajo, realiza los pasos siguientes:

  1. Dirígete al menú Cargas de trabajo en Cloud Console.

    Ir al menú Google Kubernetes Engine

  2. Selecciona la carga de trabajo deseada.

El panel de las cargas de trabajo muestra los gráficos para el uso y la capacidad de la memoria de GPU y el ciclo de trabajo de GPU.

Pasos siguientes