Implementa cargas de trabajo de GPU en Autopilot

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

En esta página, se muestra cómo solicitar aceleradores de hardware (GPU) en tus cargas de trabajo de Autopilot de Google Kubernetes Engine (GKE).

Precios

Para obtener información sobre los precios del hardware de GPU que está disponible en Autopilot, consulta la página Precios de GKE. Puedes solicitar GPU en Pods puntuales.

Las GPU en Pods de Autopilot normales son aptas para los descuentos por compromiso de uso (CUD).

Antes de comenzar

Antes de comenzar, asegúrate de haber realizado las siguientes tareas:

  • Habilita la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa la CLI de gcloud.

Limitaciones

  • No puedes usar GPU de uso compartido ni GPU de varias instancias con Autopilot.
  • La disponibilidad de GPU depende de la región de Google Cloud del clúster de Autopilot y de la cuota de GPU.
  • Si solicitas de forma explícita un nodo de GPU específico para tu Pod, el Pod debe consumir todos los recursos de GPU del nodo. Por ejemplo, si el nodo existente tiene 8 GPU y los contenedores del pod solicitan un total de 4 GPU, Autopilot rechaza el Pod.

Solicita GPU en tus contenedores

Si deseas solicitar recursos de GPU para tus contenedores, agrega los siguientes campos a la especificación de tu Pod:

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  nodeSelector:
    cloud.google.com/gke-accelerator: GPU_TYPE
  containers:
  - name: my-gpu-container
    image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
    command: ["/bin/bash", "-c", "--"]
    args: ["while true; do sleep 600; done;"]
    resources:
      limits:
        nvidia.com/gpu: GPU_QUANTITY

Reemplaza lo siguiente:

  • GPU_TYPE: Es el tipo de hardware de GPU. Los valores permitidos son los siguientes:
    • nvidia-tesla-t4
    • nvidia-tesla-a100
  • GPU_QUANTITY: Es la cantidad de GPU que se asignarán al contenedor. Debe ser una cantidad de GPU compatible para el tipo de GPU que seleccionaste.

Debes especificar el tipo y la cantidad de GPU en la especificación del Pod. Si omites cualquiera de estos valores, Autopilot rechaza tu Pod.

Solicitudes de CPU y memoria para Pods de GPU de Autopilot

Cuando definas tus Pods de GPU, también debes solicitar recursos de CPU y memoria para que tus contenedores funcionen como se espera. Autopilot aplica mínimos y valores predeterminados de CPU y memoria según el tipo y la cantidad de GPU. Para obtener más información, consulta Solicitudes de recursos en Autopilot.

La especificación de tu Pod debería ser similar al siguiente ejemplo, que solicita cuatro GPU T4:

apiVersion: v1
kind: Pod
metadata:
  name: t4-pod
spec:
  nodeSelector:
    cloud.google.com/gke-accelerator: "nvidia-tesla-t4"
  containers:
  - name: t4-container-1
    image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
    command: ["/bin/bash", "-c", "--"]
    args: ["while true; do sleep 600; done;"]
    resources:
      limits:
        nvidia.com/gpu: 3
      requests:
        cpu: "54"
        memory: "54Gi"
  - name: t4-container-2
    image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
    command: ["/bin/bash", "-c", "--"]
    args: ["while true; do sleep 600; done;"]
    resources:
      limits:
        nvidia.com/gpu: 1
      requests:
        cpu: "18"
        memory: "18Gi"

Verifica la asignación de la GPU

Para verificar que una carga de trabajo de GPU implementada tenga las GPU solicitadas, ejecuta el siguiente comando:

kubectl describe node NODE_NAME

Reemplaza NODE_NAME por el nombre del nodo en el que se programó el pod.

El resultado es similar a este:


apiVersion: v1
kind: Node
metadata:
...
  labels:
    ...
    cloud.google.com/gke-accelerator: nvidia-tesla-t4
    cloud.google.com/gke-accelerator-count: "1"
    cloud.google.com/machine-family: custom-48
    ...
...

Cómo funciona la asignación de GPU en Autopilot

Después de solicitar un tipo de GPU y una cantidad para los contenedores en un Pod y, luego, implementar el Pod, ocurre lo siguiente:

  1. Si no existe un nodo de GPU asignable, Autopilot aprovisiona un nodo de GPU nuevo para programar el Pod. Autopilot instala los controladores de NVIDIA automáticamente para facilitar el hardware.
  2. Autopilot agrega taints de nodos al nodo de la GPU y las tolerancias correspondientes al Pod. Esto evita que GKE programe otros Pods en el nodo de GPU.

Autopilot coloca exactamente un Pod de GPU en cada nodo de GPU, así como cualquier carga de trabajo administrada por GKE que se ejecute en todos los nodos y cualquier DaemonSets que configures para tolerar todos los taints de nodos.

Ejecuta DaemonSets en cada nodo

Se recomienda que ejecutes DaemonSets en cada nodo, incluso con nodos con taints aplicados. Por ejemplo, algunos agentes de registro y supervisión deben ejecutarse en cada nodo del clúster. Puedes configurar esos DaemonSets para ignorar los taints de nodo a fin de que GKE coloque esas cargas de trabajo en cada nodo.

Para ejecutar DaemonSets en cada nodo de tu clúster, incluidos los nodos de GPU, agrega la siguiente tolerancia a tu especificación:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: logging-agent
spec:
  tolerations:
  - key: ""
    operator: "Exists"
    effect: ""
  containers:
  - name: logging-agent-v1
    image: IMAGE_PATH

Para ejecutar DaemonSets en nodos de GPU específicos en tu clúster, agrega lo siguiente a tu especificación:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: logging-agent
spec:
  nodeSelector:
    cloud.google.com/gke-accelerator: "GPU_TYPE"
  tolerations:
  - key: ""
    operator: "Exists"
    effect: ""
  containers:
  - name: logging-agent-v1
    image: IMAGE_PATH

Reemplaza GPU_TYPE por el tipo de GPU en los nodos de destino. Puede ser nvidia-tesla-t4 o nvidia-tesla-a100.

Casos de uso de GPU en Autopilot

Puedes asignar GPU a contenedores en Pods de Autopilot para facilitar cargas de trabajo como las siguientes:

  • Inferencia de aprendizaje automático (AA)
  • Entrenamiento del AA
  • Renderización

Cantidades de GPU compatibles

Cuando solicitas GPU en tu especificación de Pod, debes usar las siguientes cantidades según el tipo de GPU:

Cantidades de GPU
NVIDIA T4
nvidia-tesla-t4
1, 2, 4
NVIDIA A100
nvidia-tesla-a100
1, 2, 4, 8, 16

Si solicitas una cantidad de GPU que no es compatible con ese tipo, Autopilot rechaza tu Pod.

Supervisa los nodos de GPU

Si tu clúster de GKE tiene habilitadas las métricas del sistema, las siguientes métricas están disponibles en Cloud Monitoring para supervisar el rendimiento de tu carga 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.

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 tu carga de trabajo desde el panel de Cargas de trabajo en la consola de Google Cloud.

Para ver el uso de GPU de tu carga de trabajo, realiza los pasos siguientes:

  1. Ve a la página Cargas de trabajo en la consola de Google Cloud.

    Ir a Cargas de trabajo
  2. Selecciona una carga de trabajo.

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.

¿Qué sigue?