Configura y usa las GPU de NVIDIA

El modelo trae tu propio nodo en el software de Distributed Cloud solo para Bare Metal te permite ejecutar cargas de trabajo aceleradas por GPU en tu propio hardware. Para preparar tus clústeres de equipos físicos para las GPU de NVIDIA, instala el operador de GPU de NVIDIA y, luego, verifica que las GPU se reconozcan y funcionen.

Descripción general del operador de GPU de NVIDIA

El operador de GPU de NVIDIA usa el framework de operadores para administrar los componentes de software de NVIDIA necesarios para aprovisionar y administrar dispositivos de GPU. Te recomendamos que uses el operador de GPU de NVIDIA por las siguientes ventajas y flexibilidad:

  • Elección del tipo de GPU: El software de Distributed Cloud solo es compatible con una amplia gama de tipos de GPU compatibles con el operador de GPU de NVIDIA más reciente.

  • Elección del sistema operativo compatible: Los nodos trabajadores del clúster pueden usar cualquier sistema operativo (SO) compatible con las GPU de NVIDIA, y tienes la opción de usar controladores de GPU preinstalados o la instalación dinámica de controladores con el operador de GPU de NVIDIA.

  • Elección de modelos de implementación: Puedes usar las GPU de NVIDIA en cualquier tipo de clúster con nodos trabajadores: clústeres de usuario, independientes o híbridos.

Antes de comenzar

Antes de realizar los pasos de las siguientes secciones, asegúrate de tener listos los siguientes requisitos:

  • Clúster operativo: Asegúrate de tener un clúster de equipos físicos funcional creado con Google Distributed Cloud.

  • GPU de NVIDIA: Asegúrate de que las GPU de NVIDIA estén instaladas en los nodos trabajadores del clúster. La siguiente sección para instalar el operador de GPU de NVIDIA incluye pasos para verificar que las GPU estén instaladas correctamente y que tu sistema operativo las reconozca.

  • Versión compatible del controlador de NVIDIA: La versión del controlador de NVIDIA que uses debe ser compatible con tu GPU, tu sistema operativo y la versión de CUDA que usan tus aplicaciones. Tienes las siguientes opciones de instalación del controlador de NVIDIA:

    • Usa el operador de GPU de NVIDIA para instalar la versión correcta del controlador de GPU de NVIDIA, como se describe en las siguientes secciones.

    • Usa el controlador de NVIDIA preinstalado en la imagen del sistema operativo.

    • Sigue las instrucciones de la Guía de inicio rápido para la instalación de controladores de NVIDIA para instalar el controlador de NVIDIA de forma manual.

  • Helm versión 3.0.0 o posterior: Instala la interfaz de línea de comandos de Helm para la administración de paquetes en tu estación de trabajo de administrador. Usa Helm para instalar el operador de GPU de NVIDIA. Puedes ejecutar los siguientes comandos para descargar e instalar la herramienta de línea de comandos de Helm:

    curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 \
      && chmod 700 get_helm.sh \
      && ./get_helm.sh
    

Instala y verifica el operador de GPU de NVIDIA

En los siguientes pasos, se te guiará por la instalación del operador de GPU de NVIDIA en tu clúster de equipos físicos y se te ayudará a confirmar que funciona con tus GPU:

  1. Para los dispositivos de GPU conectados a través de la interconexión de componentes periféricos (PCIe), ejecuta el siguiente comando para obtener una lista de los buses PCI del sistema con "NVIDIA" en su nombre:

    sudo lspci | grep NVIDIA
    

    El resultado es similar a lo siguiente:

    25:00.0 3D controller: NVIDIA Corporation Device 20b5 (rev a1)
    
  2. Puedes usar la herramienta de línea de comandos de la interfaz de administración del sistema de NVIDIA (nvidia-smi) en un nodo determinado para obtener información más detallada sobre los dispositivos de GPU:

    nvidia-smi
    

    El resultado es similar a lo siguiente:

    +---------------------------------------------------------------------------------------+
    | NVIDIA-SMI 535.183.01             Driver Version: 535.183.1    CUDA Veersion 12.2     |
    |-----------------------------------------+----------------------+----------------------|
    | GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
    |                                         |                      |               MIG M. |
    |=========================================+======================+======================|
    |   0  NVIDIA A100 80GB PCIe          Off | 00000000:25:00.0 Off |                    0 |
    | N/A   30C    P0              44W / 300W |      0MiB / 81920MiB |      0%      Default |
    |                                         |                      |             Disabled |
    +-----------------------------------------+----------------------+----------------------+
    
    +---------------------------------------------------------------------------------------+
    | Processes:                                                                            |
    |  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
    |        ID   ID                                                             Usage      |
    |=======================================================================================|
    |  No running processes found                                                           |
    +---------------------------------------------------------------------------------------+
    
  3. Agrega el repositorio de Helm para NVIDIA en la estación de trabajo de administrador:

    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \
        && helm repo update
    
  4. Instala el operador de GPU de NVIDIA.

    Cuando instalas el operador de GPU de NVIDIA, hay tres variantes básicas del comando:

    • Instala el operador de GPU de NVIDIA con la configuración predeterminada:

      helm install --wait --generate-name \
          -n gpu-operator --create-namespace \
          nvidia/gpu-operator \
          --set cdi.enabled=true \
          --set cdi.default=true
      
    • Usa la marca --set para pasar un conjunto de pares clave-valor delimitados por comas y especificar las opciones de configuración:

      helm install --wait --generate-name \
          -n gpu-operator --create-namespace \
          nvidia/gpu-operator \
          --set cdi.enabled=true \
          --set cdi.default=true \
          --set OPTION_1_NAME=OPTION_1_VALUE,OPTION_2_NAME=OPTION_2_VALUE
      

      Para obtener una lista detallada de las opciones de configuración, consulta Opciones comunes de personalización de gráficos en la documentación de NVIDIA. Para obtener información sobre la logística del uso de la marca --set, consulta El formato y las limitaciones de --set en la documentación de Helm.

    • Inhabilita la instalación del controlador si ya instalaste el controlador de GPU de NVIDIA en tus nodos:

      De forma predeterminada, el operador de GPU de NVIDIA implementa el controlador de GPU más reciente o especificado en todos los nodos trabajadores de GPU del clúster. Esto requiere que todos los nodos trabajadores con GPU ejecuten la misma versión del sistema operativo para usar el contenedor del controlador de GPU de NVIDIA. Para solucionar este problema, puedes instalar los controladores de GPU en los nodos de forma manual y ejecutar el comando helm install con --set driver.enabled=false para evitar que el operador de GPU de NVIDIA implemente controladores.

      helm install --wait --generate-name \
          -n gpu-operator --create-namespace \
          nvidia/gpu-operator \
          --set cdi.enabled=true \
          --set cdi.default=true \
          --set driver.enabled=false
      

    Para ver situaciones de implementación comunes y comandos de ejemplo, consulta Situaciones de implementación comunes en la documentación de NVIDIA.

  5. Verifica la exportación de recursos de GPU:

    Después de instalar el operador de GPU de NVIDIA con un controlador de GPU y un complemento de dispositivo que se ejecuten correctamente, deberías ver que el recuento de GPU se configuró de forma correcta en el campo Allocatable del recurso del nodo.

    kubectl describe node GPU_NODE_NAME | grep Allocatable -A7
    

    Reemplaza GPU_NODE_NAME por el nombre de la máquina de nodo con la GPU que estás probando.

    El resultado es similar a lo siguiente:

    Allocatable:
      cpu:                127130m
      ephemeral-storage:  858356868519
      hugepages-1Gi:      0
      hugepages-2Mi:      0
      memory:             509648288Ki
      nvidia.com/gpu:     1
      pods:               250
    
  6. Para verificar que las GPU funcionen, ejecuta el siguiente trabajo de GPU de ejemplo, que ejecuta el comando nvidia-smi:

    export NODE_NAME=GPU_NODE_NAME
    
    cat <<EOF | kubectl create --kubeconfig=CLUSTER_KUBECONFIG -f -
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: test-job-gpu
    spec:
      template:
        spec:
          runtimeClassName: nvidia
          containers:
          - name: nvidia-test
            image: nvidia/cuda:12.0.0-base-ubuntu22.04
            command: ["nvidia-smi"]
            resources:
              limits:
                nvidia.com/gpu: 1
          nodeSelector:
            kubernetes.io/hostname: ${NODE_NAME}
          restartPolicy: Never
    EOF
    

    Reemplaza CLUSTER_KUBECONFIG por la ruta de acceso del archivo kubeconfig del clúster.

  7. Verifica los registros para ver el resultado del trabajo de muestra:

    kubectl logs job/test-job-gpu --kubeconfig=CLUSTER_KUBECONFIG
    

    El resultado es similar a lo siguiente:

    +---------------------------------------------------------------------------------------+
    | NVIDIA-SMI 535.183.01             Driver Version: 535.183.1    CUDA Veersion 12.2     |
    |-----------------------------------------+----------------------+----------------------|
    | GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
    |                                         |                      |               MIG M. |
    |=========================================+======================+======================|
    |   0  NVIDIA A100 80GB PCIe          Off | 00000000:25:00.0 Off |                    0 |
    | N/A   30C    P0              44W / 300W |      0MiB / 81920MiB |      0%      Default |
    |                                         |                      |             Disabled |
    +-----------------------------------------+----------------------+----------------------+
    
    +---------------------------------------------------------------------------------------+
    | Processes:                                                                            |
    |  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
    |        ID   ID                                                             Usage      |
    |=======================================================================================|
    |  No running processes found                                                           |
    +---------------------------------------------------------------------------------------+
    

Limitaciones

Se aplican las siguientes limitaciones cuando usas el operador de GPU de NVIDIA con clústeres creados con Google Distributed Cloud:

  • Si instalas una versión reciente del operador de GPU de NVIDIA, es posible que se reemplacen las configuraciones de containerd que aplica el operador durante las actualizaciones del clúster o del grupo de nodos.

  • Usa la interfaz de dispositivo de contenedor (CDI) para las cargas de trabajo de GPU. En las versiones anteriores de Google Distributed Cloud que usan containerd 1.6, es posible que algunas funciones de CDI no estén disponibles.

  • Los grupos de nodos del balanceador de cargas ejecutan automáticamente un trabajo de actualización cada 7 días. Este trabajo reemplaza las configuraciones de containerd, incluidas las que agregó el operador de GPU de NVIDIA.

Prácticas recomendadas

Para minimizar los conflictos y problemas con tus parámetros de configuración de NVIDIA, te recomendamos que tomes las siguientes precauciones:

  • Crea una copia de seguridad del archivo de configuración de containerd, /etc/containerd/config.toml, antes de actualizar el clúster o los grupos de nodos. Este archivo contiene la configuración del entorno de ejecución de nvidia. Restablece el archivo config.toml después de que la actualización se complete correctamente y reinicia containerd para que se apliquen los cambios de configuración.

  • Para evitar posibles conflictos o problemas con la configuración de containerd, no uses nodos de GPU como nodos de balanceador de cargas (loadBalancer.nodePoolSpec).

Obtener asistencia

Si necesitas asistencia adicional relacionada con el uso de GPU con Google Distributed Cloud, comunícate con la Atención al cliente de Cloud.

Si tienes problemas relacionados con la configuración o el uso del hardware de GPU en tu sistema operativo, comunícate con el proveedor de hardware o, si corresponde, directamente con el equipo de asistencia de NVIDIA.

Apreciamos tus comentarios.