Administra cargas de trabajo de GPU

En esta página, se describe cómo administrar las cargas de trabajo de la unidad de procesamiento de gráficos (GPU) en Google Distributed Cloud conectado. Para aprovechar esta funcionalidad, debes tener una configuración de hardware conectado de Distributed Cloud que contenga GPUs. Los servidores de Distributed Cloud no admiten cargas de trabajo de GPU.

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

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

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

  • Cargas de trabajo de GPU que se ejecutan en contenedores. Inicialmente, todos los recursos de GPU en tu clúster conectado a Distributed Cloud se asignan a 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 conectado. 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 conectado 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 conectado 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 conectada a Distributed Cloud correspondiente.

Asigna recursos de GPU

De forma predeterminada, todos los recursos de GPU en cada nodo del clúster se asignan a cargas de trabajo alojadas 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 conectado 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 conectada a 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 conectado 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 Connected 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 de NVIDIA que se ejecuta en tu clúster conectado 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 conectado 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 Connected para usar 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?