Configura y usa GPUs de NVIDIA

El aspecto de trae tu propio nodo de Google Distributed Cloud (solo software) en equipos físicos te permite aprovechar tu hardware avanzado, incluidas las máquinas con GPUs, para obtener el mejor rendimiento y flexibilidad para tus clústeres.

En este documento, se describe cómo instalar y usar el operador de GPU de NVIDIA para configurar clústeres de Bare Metal creados con Google Distributed Cloud para usarlos con GPUs 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 flexibilidad y ventajas:

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

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

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

Esta página está destinada a administradores de TI y operadores que administran el ciclo de vida de la infraestructura tecnológica subyacente. Para obtener más información sobre los roles comunes y las tareas de ejemplo a las que hacemos referencia en el contenido de Google Cloud , consulta Tareas y roles comunes de los usuarios de GKE Enterprise.

Antes de comenzar

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

  • Clúster operativo: Asegúrate de tener un clúster de Bare Metal funcional que se haya creado con Google Distributed Cloud.

  • GPUs de NVIDIA: Asegúrate de que las GPUs de NVIDIA estén instaladas en los nodos de trabajo de tu clúster. La siguiente sección para instalar el operador de GPU de NVIDIA incluye pasos para verificar que las GPUs estén instaladas correctamente y que el 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 usen 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.

    • Usa 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

Los siguientes pasos te guiarán por la instalación del operador de GPU de NVIDIA en tu clúster de bare metal y te ayudarán a confirmar que funciona con tus GPUs:

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

    sudo lspci | grep NVIDIA
    

    El resultado es similar a este:

    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 (nvidia-smi) de NVIDIA en un nodo determinado para obtener información más detallada sobre los dispositivos de GPU:

    nvidia-smi
    

    El resultado es similar a este:

    +---------------------------------------------------------------------------------------+
    | 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 del 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 variaciones básicas de comandos:

    • 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
      
    • Usa la marca --set para pasar un conjunto de pares clave-valor separados por comas para especificar opciones de configuración:

      helm install --wait --generate-name \
          -n gpu-operator --create-namespace \
          nvidia/gpu-operator \
          --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 de usar 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 de trabajo de GPU del clúster. Esto requiere que todos los nodos de trabajo con GPUs ejecuten la misma versión del sistema operativo para usar el contenedor del controlador de GPU de NVIDIA. Para evitar esto, 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 los controladores.

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

    Para conocer situaciones de implementación comunes y comandos de muestra, 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 está configurado correctamente 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 del nodo con la GPU que estás probando.

    El resultado es similar a este:

    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 GPUs funcionen, ejecuta el siguiente trabajo de GPU de muestra, 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 de la tarea de muestra:

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

    El resultado es similar a este:

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

  • Las versiones compatibles de Google Distributed Cloud instalan la versión LTS 1.6 de containerd, que no habilita la interfaz de dispositivo de contenedor (CDI). Si sigues las instrucciones de Compatibilidad con la interfaz de dispositivos de contenedores en la documentación de NVIDIA, es posible que el entorno de ejecución de nvidia-cdi no funcione. El clúster debería funcionar como se espera, pero es posible que algunas funciones de CDI no estén disponibles.

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

Prácticas recomendadas

Para minimizar los conflictos y los problemas con tus configuraciones 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. Restaura 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 GPUs con Google Distributed Cloud, comunícate con Atención al cliente de Cloud.

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

Agradecemos tus comentarios.