Implementa cargas de trabajo de GPU en Autopilot


En esta página, se muestra cómo solicitar GPU para acelerar tareas en las cargas de trabajo de Autopilot de Google Kubernetes Engine (GKE). En esta página, también se describe cómo Autopilot ejecuta las GPU, cómo cambia el modelo de precios según la versión de GKE, cómo configurar las solicitudes y los límites de recursos de los Pods y cómo supervisar las cargas de trabajo de GPU.

Esta página está dirigida a los administradores y operadores de plataformas y a los especialistas en IA y datos que quieren solicitar GPU para cargas de trabajo que ejecutan tareas como el entrenamiento o la inferencia del aprendizaje automático (AA). Para obtener más información sobre los roles, las responsabilidades y las tareas de ejemplo comunes a los que hacemos referencia en el contenido de Trusted Cloud , consulta Roles de usuario y tareas comunes de GKE Enterprise.

Antes de continuar, asegúrate de conocer los siguientes conceptos:

Selecciona aceleradores en los Pods

Autopilot usa la clase de procesamiento especializada Accelerator para ejecutar Pods de GPU. Con esta clase de procesamiento, GKE coloca Pods en nodos de GPU, lo que les proporciona acceso a capacidades avanzadas en la máquina virtual (VM). Para usar esta clase en una carga de trabajo de GPU, sigue uno de los pasos a continuación según la versión de GKE:

  • Versión 1.29.4-gke.1427000 y posteriores: Solicita GPU en el manifiesto de la carga de trabajo. También puedes aprovechar las capacidades de uso compartido de GPU, como el uso compartido de tiempo. GKE no modifica los manifiestos de la carga de trabajo para agregar un selector de nodos ni una anotación para la clase Accelerator.
  • Versión 1.29 hasta la 1.29.4-gke.142700, sin incluirla: Especifica el selector de nodos cloud.google.com/compute-class: Accelerator en el manifiesto del Pod y solicita GPU. Si especificas este selector de nodos, también puedes aprovechar las capacidades de uso compartido de GPU, como el uso compartido de tiempo.
  • Versión 1.28.9-gke.1069000 hasta la 1.29, sin incluirla: Especifica el selector de nodos cloud.google.com/compute-class: Accelerator en el manifiesto del Pod junto con los selectores de GPU. Si especificas este selector de nodos, también puedes aprovechar las capacidades de uso compartido de GPU, como el uso compartido de tiempo.

La clase de procesamiento Accelerator no es compatible con las versiones anteriores a la 1.28.9-gke.1069000. En su lugar, GKE trata a los Pods de GPU de esas versiones de manera similar a otros Pods de Autopilot, y se te factura por las solicitudes de recursos. Para obtener detalles, consulta Precios.

Compatibilidad de los aceleradores con las capacidades de GKE

En la siguiente tabla, se muestran las capacidades compatibles de GKE para cada método de selección de aceleradores en GKE Autopilot:

Se seleccionó la clase de procesamiento Accelerator Compatibilidad con las capacidades de GKE

Precios

En la siguiente tabla, se describe cómo el modelo de facturación que usa GKE depende de la versión de GKE de tu clúster. Para obtener una descripción de los modelos de facturación de GKE Autopilot, consulta Precios de Autopilot.

Versión de GKE Precios
Versión 1.29.4-gke.1427000 y posteriores

Modelo de facturación basado en nodos. Todos los Pods de GPU usan la clase de procesamiento Accelerator. Se te factura por el hardware de Compute Engine que ejecuta tus cargas de trabajo de GPU, además de un recargo de Autopilot por la administración y escalabilidad de los nodos. Para obtener más información, consulta Precios del modo Autopilot.

Desde la versión 1.29 hasta la 1.29.4-gke.1427000, sin incluirla

El modelo de facturación depende de los selectores de nodos que especifiques, de la siguiente manera:

  • cloud.google.com/compute-class: Accelerator: Usa el modelo de facturación basado en nodos y la clase de procesamiento Accelerator.
  • Si no hay selector de clase de procesamiento, usa el modelo de facturación basado en Pods.

Solo puedes usar funciones como GPU de instancias múltiples o uso compartido de tiempo si especificas de forma explícita el selector de nodos cloud.google.com/compute-class: Accelerator.

Para obtener más detalles, consulta la sección “Pods que tienen requisitos de hardware específicos” en Precios de Kubernetes Engine.

Desde la versión 1.28.6-gke.1095000 hasta la versión 1.29, sin incluirla

Modelo de facturación basado en nodos, independientemente de si especificas la clase de procesamiento Accelerator en los manifiestos del Pod.

Solo puedes usar funciones como GPU de instancias múltiples o uso compartido de tiempo si especificas de forma explícita el selector de nodos cloud.google.com/compute-class: Accelerator.

Para obtener más detalles, consulta la sección “Pods que tienen requisitos de hardware específicos” en Precios de Kubernetes Engine.

Versiones anteriores a la 1.28.6-gke.1095000

Modelo de facturación basado en Pods. Se te facturará en función de las solicitudes de recursos de Pods de GPU. Para obtener más detalles, consulta la sección “Pods que tienen requisitos de hardware específicos” en Precios de Kubernetes Engine.

Ten en cuenta las siguientes consideraciones sobre los precios de las GPU de Autopilot:

  • Todos los nodos de GPU A100 (80 GB) usan SSD locales para los discos de arranque de nodos en tamaños fijos según la cantidad de GPU. Se te facturará por separado por las SSD locales conectadas. Este precio no se aplica a las GPU A100 (40 GB).

  • Los precios de GKE Sandbox son los mismos que los precios predeterminados de Autopilot. Para obtener más información sobre cómo ejecutar tus cargas de trabajo de Accelerator en una zona de pruebas, consulta GKE Sandbox y Empieza a usar GKE Sandbox.

Antes de empezar

Antes de empezar, asegúrate de hacer lo siguiente:

  • Habilita la API de Google Kubernetes Engine.
  • Habilita la API de Google Kubernetes Engine.
  • Si quieres usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta gcloud components update para obtener la versión más reciente.
  • Asegúrate de tener un clúster de GKE Autopilot que ejecute una de las siguientes versiones:

    • Clase de procesamiento Accelerator: Cualquier versión del parche 1.28 a partir de la 1.28.6-gke.1095000
      • GPU NVIDIA B200 (180 GB): versión 1.32.2-gke.1422000 o posterior
      • GPU NVIDIA H200 (141 GB): versión 1.31.4-gke.1183000 o posterior
      • GPU NVIDIA H100 Mega (80 GB): versión 1.28.9-gke.1250000 o posterior y versión 1.29.4-gke.1542000 o posterior
      • GPU NVIDIA H100 (80 GB): versión 1.28.6-gke.1369000 o posteriores y versión 1.29.1-gke.1575000 o posteriores
      • Varios Pods de GPU por VM: versión 1.29.2-gke.1355000 o posteriores
    • Si no se selecciona ninguna clase de procesamiento:

      • GPU NVIDIA L4: versión 1.28.3-gke.1203000 o posterior
      • GPU NVIDIA A100 (80 GB): versión 1.27 o posterior
  • Asegúrate de tener suficientes cuotas de GPU disponibles en el proyecto. Debes tener suficiente cuota de GPU de Compute Engine para los modelos de GPU que quieras crear en cada región. Si necesitas cuota de GPU adicional, solicita un aumento de cuota.

Limitaciones

  • Las GPU de tiempo compartido y las GPU de instancias múltiples están disponibles con Autopilot en la versión de GKE 1.29.3-gke.1093000 y posteriores.
  • La disponibilidad de GPU depende de la región Trusted Cloud by S3NS de tu clúster en modo Autopilot y de tu cuota de GPU. Para encontrar un modelo de GPU por región o zona, consulta Disponibilidad de regiones y zonas de GPU.
  • Para las GPU NVIDIA A100 (80 GB), se te cobra un precio fijo por las SSD locales conectadas a los nodos, sin importar si los Pods usan esa capacidad.
  • En las versiones de GKE anteriores a la 1.29.2-gke.1355000, si solicitas de forma explícita un nodo de GPU específico existente para el 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.
  • Para la versión de GKE 1.29.2-gke.1355000 o posteriores, si quieres que varios Pods de GPU quepan en un solo nodo, la suma de las solicitudes de GPU para esos Pods debe ser menor o igual que la cantidad de recursos de GPU conectados a ese nodo. Por ejemplo, un nodo con un gke-accelerator-count de 4 podría alojar hasta cuatro Pods que soliciten una GPU cada uno.

Colocar varios Pods en un solo nodo de GPU es útil en situaciones como las que se indican a continuación:

  • Tienes reservas de capacidad para tipos de máquinas Accelerator grandes y ejecutas cargas de trabajo de una sola GPU, por lo que implementar un Pod por nodo desperdiciaría las otras GPU de esa máquina.
  • Tienes cargas de trabajo de GPU que deben ejecutarse en el mismo host.

En estas situaciones, te recomendamos que uses todas las GPU en el nodo. Para ello, asegúrate de que la suma de las solicitudes de recursos de GPU de los Pods en el nodo sea igual que la cantidad de GPU conectadas al nodo.

Solicita GPU en contenedores

Para solicitar recursos de GPU en contenedores, agrega los siguientes campos a la especificación del Pod. Según los requisitos de tu carga de trabajo, puedes omitir el selector cloud.google.com/gke-accelerator-count.

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  # Optional: Use GKE Sandbox
  # runtimeClassName: gvisor
  nodeSelector:
    cloud.google.com/gke-accelerator: GPU_TYPE
    cloud.google.com/gke-accelerator-count: "GPU_COUNT"
  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 la GPU. Los valores permitidos son los siguientes:
    • nvidia-b200: NVIDIA B200 (180 GB)
    • nvidia-h200-141gb: NVIDIA H200 (141 GB)
    • nvidia-h100-mega-80gb: NVIDIA H100 Mega (80 GB)
    • nvidia-h100-80gb: NVIDIA H100 (80 GB)
    • nvidia-a100-80gb: NVIDIA A100 (80 GB)
    • nvidia-tesla-a100: NVIDIA A100 (40 GB)
    • nvidia-l4: NVIDIA L4
    • nvidia-tesla-t4: NVIDIA T4
  • GPU_COUNT: es la cantidad total de GPU disponibles para conectar al nodo. Debe ser mayor o igual que GPU_QUANTITY y una cantidad de GPU compatible para el tipo de GPU que elegiste. Si omites este nodeSelector, Autopilot coloca un Pod en cada nodo de GPU.
  • GPU_QUANTITY: es la cantidad de GPU que se asignarán al contenedor. Debe ser menor o igual que GPU_COUNT y una cantidad de GPU compatible para el tipo de GPU que elegiste.
  • Parámetro opcional runtimeClassname: gvisor: es el parámetro de configuración que permite ejecutar este Pod en GKE Sandbox. Para usarlo, quita el comentario de esta línea. Para obtener más información, consulta GKE Sandbox.

Para obtener detalles sobre cómo se te factura por el uso de Accelerator en el modo Autopilot, consulta la sección Precios.

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

Cuando implementes este manifiesto, Autopilot instalará automáticamente los controladores NVIDIA predeterminados para la versión de GKE del nodo. En la versión 1.29.2-gke.1108000 y posteriores, puedes agregar el siguiente selector de nodos al manifiesto para instalar la versión más reciente del controlador para esa versión de GKE:

spec:
  nodeSelector:
    cloud.google.com/gke-gpu-driver-version: "DRIVER_VERSION"

Reemplaza DRIVER_VERSION por uno de los siguientes valores:

  • default: es el controlador estable y predeterminado para la versión de GKE del nodo. Si omites el nodeSelector en el manifiesto, esta será la opción predeterminada.
  • latest: es la versión más reciente del controlador disponible para la versión de GKE del nodo.

Solicita CPU y memoria para los Pods de GPU en Autopilot

Cuando definas los Pods de GPU, también debes solicitar recursos de CPU y memoria para que los contenedores funcionen como se espera. Autopilot aplica valores mínimos, máximos y predeterminados específicos de CPU y memoria según el tipo y la cantidad de GPU. Si ejecutas varios Pods de GPU en un solo nodo, especifica la CPU y la memoria. De lo contrario, se usará la capacidad total del nodo de forma predeterminada. Para obtener más detalles, consulta Solicitudes de recursos en Autopilot.

La especificación del Pod debería ser similar al siguiente ejemplo, en el que se solicita cuatro GPU T4:

apiVersion: v1
kind: Pod
metadata:
  name: t4-pod
spec:
  # Optional: Use GKE Sandbox
  # runtimeClassName: gvisor
  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
        cpu: "54"
        memory: "54Gi"
      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
        cpu: "18"
        memory: "18Gi"
      requests:
        cpu: "18"
        memory: "18Gi"
  • Parámetro opcional runtimeClassname: gvisor: es el parámetro de configuración que permite ejecutar este Pod en GKE Sandbox. Para usarlo, quita el comentario de esta línea. Para obtener más información, consulta GKE Sandbox.

Este manifiesto especifica limits para los recursos de CPU y memoria. Si omites limits para la CPU o la memoria en la versión de GKE 1.29.2-gke.1060000 y posteriores, GKE otorgará a los Pods la clase Burstable QoS y les permitirá que generen aumentos de actividad en los recursos sin usar a partir de la suma de solicitudes de recursos en el nodo. Para obtener más información, consulta Configura los aumentos de actividad de Pods en GKE.

Solicita almacenamiento efímero para Pods de GPU en Autopilot

También puedes solicitar almacenamiento efímero en Pods que necesiten almacenamiento de corta duración. El almacenamiento efímero máximo disponible y el tipo de hardware de almacenamiento que se usa dependen del tipo y la cantidad de GPU que solicita el Pod. Puedes usar la SSD local para el almacenamiento efímero si usas GPU NVIDIA L4 y la clase de procesamiento Accelerator, y si ejecutas la versión del parche de GKE 1.28.6-gke.1369000 y posteriores o 1.29.1- gke.1575000 y posteriores.

Si quieres usar una SSD local para el almacenamiento efímero, agrega el nodeSelector cloud.google.com/gke-ephemeral-storage-local-ssd: "true" al manifiesto de la carga de trabajo. Consulta el manifiesto de ejemplo en Usa el almacenamiento efímero respaldado por SSD local con clústeres en modo Autopilot. Las GPU NVIDIA H100 (80 GB) y NVIDIA A100 (80 GB) siempre usan SSD locales para el almacenamiento efímero, y no puedes especificar este selector de nodos para esas GPU.

Verifica la asignación de las GPU implementadas

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


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
    ...
...

Verifica la versión del controlador de la GPU

En los clústeres en modo Autopilot, GKE instala automáticamente los controladores de dispositivos NVIDIA en todos los nodos de GPU. Para encontrar la versión del controlador que GKE instaló en el clúster, ejecuta el siguiente comando:

kubectl logs --selector=k8s-app=nvidia-gpu-device-plugin \
    --container="nvidia-gpu-device-plugin" \
    --tail=-1 \
    --namespace=kube-system | grep Driver

El resultado es similar al siguiente:

I1206 18:37:08.251742    5851 metrics.go:144] nvml initialized successfully. Driver version: 535.104.12

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

Después de solicitar un tipo de GPU y una cantidad para los contenedores de un Pod e implementar este Pod, sucede lo siguiente:

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

Autopilot se 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 DaemonSet que configures para tolerar todos los taints de nodo.

Ejecuta DaemonSets en cada nodo

Te recomendamos que ejecutes DaemonSets en cada nodo incluso si hay 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 y que GKE coloque esas cargas de trabajo en cada nodo.

Para ejecutar DaemonSets en cada nodo del clúster, incluidos los nodos de GPU, agrega la siguiente tolerancia a la 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

Reemplaza IMAGE_PATH por la ruta de acceso a la imagen del contenedor.

Para ejecutar DaemonSets en nodos de GPU específicos del clúster, agrega lo siguiente a la 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 una de las siguientes opciones:

  • nvidia-b200: NVIDIA B200 (180 GB)
  • nvidia-h200-141gb: NVIDIA H200 (141 GB)
  • nvidia-h100-mega-80gb: NVIDIA H100 Mega (80 GB)
  • nvidia-h100-80gb: NVIDIA H100 (80 GB)
  • nvidia-a100-80gb: NVIDIA A100 (80 GB)
  • nvidia-tesla-a100: NVIDIA A100 (40 GB)
  • nvidia-l4: NVIDIA L4
  • nvidia-tesla-t4: NVIDIA T4

Casos de uso de GPU en Autopilot

Puedes asignar GPU a contenedores en Pods de Autopilot para facilitar ciertas cargas de trabajo, como las que se indican a continuación:

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

Cantidad admitida de GPU

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

Cantidad de GPU
NVIDIA L4
nvidia-l4
1, 2, 4, 8
NVIDIA T4
nvidia-tesla-t4
1, 2, 4
NVIDIA A100 (40 GB)
nvidia-tesla-a100
1, 2, 4, 8, 16
NVIDIA A100 (80 GB)
nvidia-a100-80gb
1, 2, 4, 8
NVIDIA H100 (80 GB)
nvidia-h100-80gb
1, 2, 4, 8
NVIDIA H100 Mega (80 GB)
nvidia-h100-mega-80gb
8
NVIDIA H200 (141 GB)
nvidia-h200-141gb
8
NVIDIA B200 (180 GB)
nvidia-b200
8

Supervisa el rendimiento de las cargas de trabajo del nodo de GPU

Si el clúster de GKE tiene habilitadas las métricas del sistema, las siguientes métricas estarán disponibles en Cloud Monitoring para supervisar el rendimiento de las cargas de trabajo de GPU:

  • Ciclo de trabajo (container/accelerator/duty_cycle): es el porcentaje de tiempo del ú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): es la cantidad de memoria del acelerador asignada expresada en bytes.
  • Capacidad de memoria (container/accelerator/memory_total): es la memoria total del acelerador expresada en bytes.

Estas métricas se aplican a nivel de contenedor (container/accelerator) y no se recopilan para los contenedores programados en una GPU que emplea el uso compartido de tiempo de GPU o MPS NVIDIA.

Puedes usar paneles predefinidos para supervisar los clústeres con nodos de GPU. Para obtener más información, consulta Visualiza métricas de observabilidad. Para obtener información general sobre la supervisión de los clústeres y sus recursos, consulta Observabilidad para GKE.

Visualiza las métricas de uso de las cargas de trabajo

Puedes ver las métricas de uso de GPU de las cargas de trabajo en el panel Cargas de trabajo de la consola de Trusted Cloud .

Para ver el uso de GPU de las cargas de trabajo, sigue los siguientes pasos:

  1. Accede a la página Cargas de trabajo de la consola de Trusted Cloud .

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

En el panel de las cargas de trabajo, se muestran los gráficos del uso y la capacidad de la memoria de GPU y el ciclo de trabajo de GPU.

Visualiza las métricas del administrador de GPU del centro de datos (DCGM) de NVIDIA

Puedes recopilar y visualizar las métricas del DCGM de NVIDIA con Google Cloud Managed Service para Prometheus. Para los clústeres en modo Autopilot, GKE instala los controladores. Para los clústeres estándar, debes instalar los controladores NVIDIA.

Para obtener instrucciones sobre cómo implementar el paquete del DCGM administrado por GKE, consulta Recopila y visualiza las métricas del administrador de GPU del centro de datos de (DCGM) NVIDIA.

¿Qué sigue?