Administra cargas de trabajo de GPU

En esta página, se describe cómo habilitar y administrar cargas de trabajo de la unidad de procesamiento de gráficos (GPU) en Google Distributed Cloud. Para aprovechar esta funcionalidad, debes tener una configuración de hardware de Distributed Cloud que contenga GPUs. La compatibilidad con la GPU está inhabilitada de forma predeterminada. Debes habilitar de forma explícita la compatibilidad con GPU en tu clúster de Distributed Cloud.

Para planificar y solicitar una configuración de este tipo, elige la configuración 2 en los siguientes documentos:

Si tu rack de Distributed Cloud incluye GPUs, puedes configurar tus cargas de trabajo de Distributed Cloud para que usen recursos de GPU.

Las cargas de trabajo de Distributed Cloud pueden ejecutarse en contenedores y en máquinas virtuales:

  • Cargas de trabajo de GPU que se ejecutan en contenedores. Cuando habilitas la compatibilidad con GPU, todos los recursos de GPU de tu clúster de Distributed Cloud se asignan inicialmente a las cargas de trabajo que se ejecutan en contenedores. El controlador de GPU para ejecutar cargas de trabajo en contenedores basadas en GPU se incluye en Distributed Cloud. Dentro de cada contenedor, las bibliotecas de GPU se activan en /opt/nvidia.

  • Cargas de trabajo de GPU que se ejecutan en máquinas virtuales Para ejecutar una carga de trabajo basada en GPU en una máquina virtual, debes asignar recursos de GPU en el nodo de Distributed Cloud de destino a las máquinas virtuales, como se describe más adelante en esta página. Si lo haces, se omitirá el controlador de GPU integrado y se pasarán las GPUs directamente a las máquinas virtuales. Debes instalar manualmente un controlador de GPU compatible en el sistema operativo invitado de cada máquina virtual. También debes proteger todas las licencias necesarias para ejecutar controladores de GPU especializados en tus máquinas virtuales.

Para confirmar que hay GPUs en un nodo de Distributed Cloud, verifica que el nodo tenga la etiqueta vm.cluster.gke.io.gpu=true. Si la etiqueta no está presente en el nodo, significa que no hay GPUs instaladas en la máquina física de Distributed Cloud correspondiente.

Habilita la compatibilidad con la GPU

Para habilitar la compatibilidad con GPU para tus cargas de trabajo, debes crear o modificar el recurso personalizado VMRuntime que contiene el parámetro enableGPU con su valor establecido en true y, luego, aplicarlo a tu clúster de Distributed Cloud. Por ejemplo:

apiVersion: vm.cluster.gke.io/v1
kind: VMRuntime
metadata:
  name: vmruntime
spec:
  # Enable GPU support
  enableGPU: true

Según el tipo de clúster en el que quieras habilitar VM Runtime en el subsistema de máquina virtual de GDC, realiza una de las siguientes acciones:

  • En el caso de los clústeres del plano de control de Cloud en los que aún no habilitaste el subsistema de máquina virtual del entorno de ejecución de VM en GDC, debes crear el recurso VMRuntime de forma manual.
  • En el caso de los clústeres del plano de control de Cloud en los que ya habilitaste el subsistema de máquina virtual del entorno de ejecución de VM en GDC, debes editar el recurso VMRuntime existente.
  • En el caso de los clústeres con plano de control local, debes editar el recurso VMRuntime existente.

Este mismo recurso VMRuntime también configura la compatibilidad del entorno de ejecución de VM en GDC en tu clúster con el parámetro enable. Asegúrate de configurar los dos parámetros según las necesidades de tu carga de trabajo. No es necesario que habilites la compatibilidad con VM Runtime en GDC para habilitar la compatibilidad con GPU en tu clúster de Distributed Cloud.

En la siguiente tabla, se describen los parámetros de configuración disponibles.

Valor enable Valor enableGPU Configuración resultante
false false Las cargas de trabajo solo se ejecutan en contenedores y no pueden usar recursos de GPU.
false true Las cargas de trabajo solo se ejecutan en contenedores y pueden usar recursos de GPU.
true true

Las cargas de trabajo se pueden ejecutar en máquinas virtuales y en contenedores.

Ambos tipos de cargas de trabajo pueden usar recursos de GPU.

true false

Las cargas de trabajo se pueden ejecutar en máquinas virtuales y en contenedores.

Ninguno de los dos tipos de cargas de trabajo puede usar recursos de GPU.

Verifica que se haya habilitado la compatibilidad con la GPU

Para verificar que se haya habilitado la compatibilidad con GPU en tu clúster, usa el siguiente comando:

kubectl get pods --namespace vm-system

El comando muestra un resultado similar al siguiente ejemplo:

NAME                                         READY   STATUS     RESTARTS  AGE
...
gpu-controller-controller-manager-vbv4w      2/2     Running    0         31h
kubevirt-gpu-dp-daemonset-gxj7g              1/1     Running    0         31h
nvidia-gpu-dp-daemonset-bq2vj                1/1     Running    0         31h
...

En el resultado, puedes verificar que los Pods del controlador de GPU se hayan implementado y se estén ejecutando en el espacio de nombres vm-system.

Asigna recursos de GPU

De forma predeterminada, cuando habilitas la compatibilidad con GPU en tu clúster de Distributed Cloud, todos los recursos de GPU de cada nodo del clúster se asignan a cargas de trabajo en contenedores. Para personalizar la asignación de recursos de GPU en cada nodo, completa los pasos de esta sección.

Configura la asignación de recursos de GPU

  1. Para asignar recursos de GPU en un nodo de Distributed Cloud, usa el siguiente comando para editar el recurso personalizado GPUAllocation en el nodo de destino:

    kubectl edit gpuallocation NODE_NAME --namespace vm-system

    Reemplaza NODE_NAME por el nombre del nodo de Distributed Cloud de destino.

    En el siguiente ejemplo, el resultado del comando muestra la asignación de recursos de GPU predeterminada de fábrica. De forma predeterminada, todos los recursos de GPU se asignan a cargas de trabajo alojadas en contenedores (pod), y no se asignan recursos de GPU a cargas de trabajo de máquina virtual (vm):

    ...
    spec:
      pod:   2  # Number of GPUs allocated for container workloads
      vm:    0  # Number of GPUs allocated for VM workloads
    
  2. Establece las asignaciones de recursos de GPU de la siguiente manera:

    • Para asignar un recurso de GPU a cargas de trabajo en contenedores, aumenta el valor del campo pod y disminuye el valor del campo vm en la misma cantidad.
    • Para asignar un recurso de GPU a las cargas de trabajo de la máquina virtual, aumenta el valor del campo vm y disminuye el valor del campo pod en la misma cantidad.

    La cantidad total de recursos de GPU asignados no debe exceder la cantidad de GPU instaladas en la máquina física de Distributed Cloud en la que se ejecuta el nodo. De lo contrario, el nodo rechazará la asignación no válida.

    En el siguiente ejemplo, se reasignaron dos recursos de GPU de cargas de trabajo en contenedores (pod) a cargas de trabajo de máquina virtual (vm):

    ...
    spec:
      pod:   0  # Number of GPUs allocated for container workloads
      vm:    2  # Number of GPUs allocated for VM workloads
    

    Cuando termines, aplica el recurso GPUAllocation modificado a tu clúster y espera a que su estado cambie a AllocationFulfilled.

Verifica la asignación de recursos de GPU

  • Para verificar la asignación de recursos de GPU, usa el siguiente comando:

    kubectl describe gpuallocations NODE_NAME --namespace vm-system

    Reemplaza NODE_NAME por el nombre del nodo de Distributed Cloud de destino.

    El comando muestra un resultado similar al siguiente ejemplo:

     Name:         mynode1
     ...
     spec:
       node:  mynode1
       pod:   2  # Number of GPUs allocated for container workloads
       vm:    0  # Number of GPUs allocated for VM workloads
     Status:
       Allocated:  true
       Conditions:
         Last Transition Time:  2022-09-23T03:14:10Z
         Message:
         Observed Generation:   1
         Reason:                AllocationFulfilled
         Status:                True
         Type:                  AllocationStatus
         Last Transition Time:  2022-09-23T03:14:16Z
         Message:
         Observed Generation:   1
         Reason:                DeviceStateUpdated
         Status:                True
         Type:                  DeviceStateUpdated
       Consumption:
         pod:         0/2   # Number of GPUs currently consumed by container workloads
         vm:          0/0   # Number of GPUs currently consumed by VM workloads
       Device Model:  Tesla T4
     Events:          <none>
    

Configura un contenedor para que use recursos de GPU

Para configurar un contenedor que se ejecuta en Distributed Cloud para usar recursos de GPU, configura su especificación como se muestra en el siguiente ejemplo y, luego, aplícala a tu clúster:

  apiVersion: v1
  kind: Pod
  metadata:
    name: my-gpu-pod
  spec:
    containers:
    - name: my-gpu-container
      image: CUDA_TOOLKIT_IMAGE
      command: ["/bin/bash", "-c", "--"]
      args: ["while true; do sleep 600; done;"]
      env:
      resources:
        requests:
        nvidia.com/gpu-pod-TESLA_T4: 2
        limits:
        nvidia.com/gpu-pod-TESLA_T4: 2
    nodeSelector:
      kubernetes.io/hostname: NODE_NAME

Reemplaza lo siguiente:

  • CUDA_TOOLKIT_IMAGE: Es la ruta de acceso completa y el nombre de la imagen del kit de herramientas de NVIDIA CUDA. La versión del kit de herramientas de CUDA debe coincidir con la versión del controlador NVIDIA que se ejecuta en tu clúster de Distributed Cloud. Para determinar la versión de tu controlador NVIDIA, consulta las notas de la versión de Distributed Cloud. Para encontrar la versión del kit de herramientas de CUDA que coincida, consulta Compatibilidad con CUDA.
  • NODE_NAME: Es el nombre del nodo de Distributed Cloud de destino.

Configura una máquina virtual para usar recursos de GPU

Para configurar una máquina virtual que se ejecuta en Distributed Cloud para que use recursos de GPU, configura su especificación de recursos VirtualMachine como se muestra en el siguiente ejemplo y, luego, aplícala a tu clúster:

apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachine
...
spec:
  ...
  gpu:
    model: nvidia.com/gpu-vm-TESLA_T4
    quantity: 2

¿Qué sigue?