Ejecuta GPU

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

Descripción general

Con GKE, puedes creargrupos de nodos equipados con GPU NVIDIA Tesla® K80, P100, P4, V100, T4 y A100(Beta). 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 gran demanda 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 siguientes requisitos:

  • Versión de Kubernetes: Para los grupos de nodos que usan la imagen de nodo [Container-Optimized OS], los nodos de GPU están disponibles en la versión 1.9 de GKE o superior. 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 Cuota de GPU de Compute Engine en la zona deseada antes de poder 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 los controladores de GPU de NVIDIA de forma manual en tus nodos. Más adelante en esta página, explicamos cómo instalar los controladores.

  • GPU A100: Las GPU A100 solo son compatibles con los tipos de máquinas A2 y requieren la versión 1.18.6-gke.3504 de GKE o alguna posterior.

Limitaciones

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

  • 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.
  • Las GPU solo son compatibles con los tipos de máquinas N1 de uso general.

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 mediante la herramienta de línea de comandos de gcloud. Para obtener una lista de todos los tipos de aceleradores de GPU compatibles en cada zona, ejecuta el siguiente comando:

gcloud compute accelerator-types list

Precios

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

Cuota de GPU

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

Tu cuota de GPU debe ser, al menos, 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

Para solicitar una cuota de GPU, usa Cloud Console. Para obtener más información sobre cómo solicitar cuotas, consulta Solicita cuota adicional en la documentación de Compute Engine.

Para buscar la cuota de GPU, realiza los siguientes pasos en Cloud Console:

  1. Dirígete al menú Cuotas de administración de identidades y accesos (IAM) en Cloud Console.

    Ir al menú Cuotas

  2. En el menú desplegable Métricas, haz clic en Ninguna y, luego, ingresa "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 cuota

Para enviar una solicitud de cuota, completa los siguientes pasos en Cloud Console:

  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

Para aprovechar al máximo la ventaja más rentable de las GPU en GKE y a fin de beneficiarse del ajuste de escala automático del clúster, recomendamos crear 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 siguiente comando:

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
  --machine-type a2-highgpu-1g]

Reemplaza lo siguiente:

  • POOL_NAME: Es el nombre que eliges para el grupo de nodos.
  • GPU_TYPE: Es el tipo de GPU, que puede ser nvidia-tesla-k80nvidia-tesla-p100nvidia-tesla-p4nvidia-tesla-v100, nvidia-tesla-t4 o nvidia-tesla-a100.
  • AMOUNT: Es la cantidad de GPU que se deben adjuntar a los nodos del grupo de nodos.
  • COMPUTE_ZONE: Es la zona de procesamiento en la que se debe crear 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 debe crear el grupo de nodos.

Las opciones adicionales son las siguientes:

  • --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.
  • --machine-type especifica el tipo de máquina para los nodos. Es obligatorio para las GPU nvidia-tesla-a100, que solo pueden ejecutarse en tipos de máquinas a2.

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

Para crear un grupo de nodos con GPU, sigue estos pasos:

  1. Ve al menú de Google Kubernetes Engine en Cloud Console.

    Ir al menú Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.

  3. Haz clic en Agregar grupo de nodos.

  4. De forma opcional, en la página Detalles del grupo de nodos, selecciona la casilla de verificación Habilitar ajuste de escala automático.

  5. Configura tu grupo de nodos como desees.

  6. Desde el panel de navegación, selecciona Nodos.

  7. En Familia de máquinas, haz clic en GPU.

  8. Selecciona un Tipo de GPU y una Cantidad de GPU que se ejecutará en cada nodo.

  9. Lee la advertencia y selecciona Comprendo las limitaciones.

  10. Configura la máquina como desees.

  11. Haga clic en Crear.

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 siguiente comando:

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

Reemplaza lo siguiente:

  • CLUSTER_NAME: el nombre que eliges para el clúster
  • GPU_TYPE: Es el tipo de GPU, que puede ser nvidia-tesla-k80nvidia-tesla-p100nvidia-tesla-p4nvidia-tesla-v100, nvidia-tesla-t4 o nvidia-tesla-a100.
  • AMOUNT: Es la cantidad de GPU que se deben ejecutar 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. Ve a la plantilla de clúster Procesamiento acelerado por GPU.

    Ir a la plantilla de procesamiento acelerado de GPU

  2. Configura tu clúster como desees. Personaliza el grupo de nodos de GPU o agrega grupos de nodos de GPU adicionales.

  3. Lee la advertencia y selecciona Comprendo las limitaciones.

  4. Haga 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 Google Cloud tiene GPU en las tres zonas. Cuando creas un clúster regional con GPU, debes especificar zonas mediante el comando --node-locations. También puedes usar este comando después de crear tu clúster. Para saber qué zonas cuentan con GPU, consulta Disponibilidad.

Debes crear un clúster de GPU regional con la herramienta de línea de comandos de gcloud o Cloud Console.

gcloud

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

gcloud container clusters create CLUSTER_NAME \
  --accelerator type=GPU_TYPE,count=AMOUNT \
  --region COMPUTE_REGION \
  --node-locations COMPUTE_ZONE,COMPUTE_ZONE

Reemplaza lo siguiente:

  • CLUSTER_NAME: el nombre que eliges para el clúster
  • GPU_TYPE: Es el tipo de GPU: nvidia-tesla-k80, nvidia-tesla-p100, nvidia-tesla-p4, nvidia-tesla-v100, nvidia-tesla-t4 o nvidia-tesla-a100.
  • AMOUNT: Es la cantidad de GPU que se deben ejecutar por nodo.
  • COMPUTE_REGION: Es la región del clúster, como us-central1.
  • COMPUTE_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. Ve a la plantilla de clúster Procesamiento acelerado por GPU.

    Ir a la plantilla de procesamiento acelerado de GPU

  2. En Tipo de ubicación, selecciona Regional.

  3. En la lista desplegable Región, selecciona la región deseada.

  4. Configura tu clúster como desees. Personaliza el grupo de nodos de GPU o agrega grupos de nodos de GPU adicionales.

  5. Lee la advertencia y selecciona Comprendo las limitaciones.

  6. Haga 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 puedes aplicar para instalar los controladores.

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

COS

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/cos/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.18.6-gke.3504 y versiones posteriores 450.51.06
1.14.x y superiores 418.67

Ubuntu

Ten en cuenta que la compatibilidad de 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 consumir las 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.com/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", "-c", "--"]
    args: ["while true; do sleep 600; done;"]
    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, nvidia-tesla-t4 o nvidia-tesla-a100.

Puedes especificar tipos de GPU determinados si agregas este selector de nodo a la especificación de 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", "-c", "--"]
    args: ["while true; do sleep 600; done;"]
    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 or nvidia-tesla-a100

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 [Cloud 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 Cloud Monitoring.

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.

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