Configurar e usar GPUs NVIDIA

O aspecto traga seu próprio nó do Google Distributed Cloud (somente software) em bare metal permite aproveitar seu hardware avançado, incluindo máquinas com GPUs, para ter o melhor desempenho e flexibilidade para seus clusters.

Este documento descreve como instalar e usar o operador de GPU NVIDIA para configurar clusters bare metal criados com o Google Distributed Cloud para uso com GPUs NVIDIA.

O operador de GPU NVIDIA usa o Operator Framework para gerenciar os componentes de software NVIDIA necessários para provisionar e gerenciar dispositivos de GPU. Recomendamos que você use o operador de GPU NVIDIA para a seguinte flexibilidade e vantagens:

  • Escolha do tipo de GPU: o software do Google Distributed Cloud é compatível com uma ampla variedade de tipos de GPU com suporte do operador de GPU NVIDIA mais recente.

  • Escolha do sistema operacional com suporte: os nós de worker do cluster podem usar qualquer sistema operacional (SO) com suporte com GPUs NVIDIA, e você tem a opção de usar drivers de GPU pré-instalados ou instalação dinâmica de drivers com o operador de GPU NVIDIA.

  • Escolha de modelos de implantação: é possível usar GPUs NVIDIA em qualquer tipo de cluster com nós de worker: clusters de usuários, clusters independentes ou clusters híbridos.

Esta página é destinada a administradores de TI e operadores responsáveis por gerenciar o ciclo de vida de infraestruturas de tecnologia. Para saber mais sobre papéis comuns e tarefas de exemplo referenciados no Google Cloud conteúdo, consulte Funções e tarefas comuns do usuário do GKE.

Antes de começar

Antes de realizar as etapas nas seções a seguir, verifique se você tem os seguintes requisitos:

  • Cluster operacional: verifique se você tem um cluster bare metal funcional criado com o Google Distributed Cloud.

  • GPUs NVIDIA: verifique se as GPUs NVIDIA estão instaladas nos nós de worker do cluster. A seção a seguir para instalar o operador de GPU NVIDIA inclui etapas para verificar se as GPUs estão instaladas corretamente e reconhecidas pelo sistema operacional.

  • Versão do driver NVIDIA compatível: a versão do driver NVIDIA que você usa precisa ser compatível com a GPU, o sistema operacional e a versão do CUDA que seus aplicativos usam. Você tem as seguintes opções de instalação do driver NVIDIA:

    • Use o operador de GPU NVIDIA para instalar a versão adequada do driver de GPU NVIDIA, conforme descrito nas seções a seguir.

    • Use o driver NVIDIA pré-instalado na imagem do sistema operacional.

    • Use as instruções no Guia de início rápido da instalação do driver NVIDIA para instalar manualmente o driver NVIDIA.

  • Helm versão 3.0.0 ou mais recente: instale a interface de linha de comando do Helm para gerenciamento de pacotes na estação de trabalho de administrador. Você usa o Helm para instalar o operador de GPU NVIDIA. É possível executar os comandos a seguir para fazer o download e instalar a ferramenta de linha de comando do 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
    

Instalar e verificar o operador de GPU NVIDIA

As etapas a seguir orientam você na instalação do operador de GPU NVIDIA no cluster bare metal e ajudam a confirmar se ele está funcionando com suas GPUs:

  1. Para dispositivos de GPU conectados por meio de interconexão de componentes periféricos expressa (PCIe), execute o comando a seguir para receber uma lista de barramentos PCI do sistema com "NVIDIA" no nome:

    sudo lspci | grep NVIDIA
    

    O resultado será assim:

    25:00.0 3D controller: NVIDIA Corporation Device 20b5 (rev a1)
    
  2. É possível usar a ferramenta de linha de comando da interface de gerenciamento do sistema NVIDIA (nvidia-smi) em um determinado nó para receber informações mais detalhadas sobre os dispositivos de GPU:

    nvidia-smi
    

    O resultado será assim:

    +---------------------------------------------------------------------------------------+
    | 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. Adicione o repositório do Helm da NVIDIA na estação de trabalho de administrador:

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

    Ao instalar o operador de GPU NVIDIA, há três variações básicas de comando:

    • Instale o operador de GPU NVIDIA com a configuração padrão:

      helm install --wait --generate-name \
          -n gpu-operator --create-namespace \
          nvidia/gpu-operator \
          --set cdi.enabled=true \
          --set cdi.default=true
      
    • Use a flag --set para transmitir um conjunto de pares de chave-valor delimitados por vírgulas para especificar opções de configuração:

      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 uma lista detalhada de opções de configuração, consulte Opções comuns de personalização de gráficos na documentação da NVIDIA. Para informações sobre a logística de uso da flag --set, consulte O formato e as limitações de --set na documentação do Helm.

    • Desative a instalação do driver se você já tiver instalado o driver de GPU NVIDIA nos nós:

      Por padrão, o operador de GPU NVIDIA implanta o driver de GPU mais recente ou especificado em todos os nós de worker de GPU no cluster. Isso exige que todos os nós de worker com GPUs executem a mesma versão do sistema operacional para usar o contêiner do driver de GPU NVIDIA. Para contornar isso, é possível instalar drivers de GPU nos nós manualmente e executar o comando helm install com --set driver.enabled=false para impedir que o operador de GPU NVIDIA implante drivers.

      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 cenários de implantação comuns e comandos de exemplo, consulte Cenários comuns de implantação na documentação da NVIDIA.

  5. Verifique a exportação de recursos da GPU:

    Depois que o operador de GPU NVIDIA for instalado com um driver de GPU e um plug-in de dispositivo em execução corretamente, você verá que a contagem de GPUs está configurada corretamente no campo Allocatable para o recurso do nó.

    kubectl describe node GPU_NODE_NAME | grep Allocatable -A7
    

    Substitua GPU_NODE_NAME pelo nome da máquina de nó com a GPU que você está testando.

    O resultado será assim:

    Allocatable:
      cpu:                127130m
      ephemeral-storage:  858356868519
      hugepages-1Gi:      0
      hugepages-2Mi:      0
      memory:             509648288Ki
      nvidia.com/gpu:     1
      pods:               250
    
  6. Para verificar se as GPUs estão funcionando, execute o seguinte exemplo de job de GPU, que executa o 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
    

    Substitua CLUSTER_KUBECONFIG pelo caminho do arquivo kubeconfig do cluster.

  7. Verifique os registros da saída do job de exemplo:

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

    O resultado será assim:

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

Limitações

As limitações a seguir se aplicam quando você usa o operador de GPU NVIDIA com clusters criados com o Google Distributed Cloud:

  • Se você instalar uma versão recente do operador de GPU NVIDIA, as configurações do containerd aplicadas pelo operador poderão ser substituídas durante atualizações ou upgrades de cluster ou pool de nós.

  • Use a interface de dispositivo de contêiner (CDI, na sigla em inglês) para cargas de trabalho de GPU. Para versões anteriores do Google Distributed Cloud que usam o containerd 1.6, alguns recursos de CDI podem não estar disponíveis.

  • Os pools de nós do balanceador de carga executam automaticamente um job de atualização a cada 7 dias. Esse job substitui as configurações do containerd, incluindo aquelas adicionadas pelo operador de GPU NVIDIA.

Práticas recomendadas

Para minimizar conflitos e problemas com as configurações da NVIDIA, recomendamos que você use as seguintes precauções:

  • Faça backup do arquivo de configuração do containerd, /etc/containerd/config.toml, antes de fazer upgrade ou atualizar o cluster ou os pools de nós. Esse arquivo contém a configuração de ambiente de execução nvidia. Restaure o arquivo config.toml após a conclusão do upgrade ou da atualização e reinicie o containerd para que as mudanças de configuração entrem em vigor.

  • Para evitar possíveis conflitos ou problemas com a configuração do containerd, não use nós de GPU como nós do balanceador de carga (loadBalancer.nodePoolSpec).

Receber suporte

Se você precisar de mais ajuda relacionada ao uso de GPUs com o Google Distributed Cloud, entre em contato com o Cloud Customer Care.

Para problemas relacionados à configuração ou ao uso de hardware de GPU no sistema operacional, consulte o fornecedor de hardware ou, se aplicável, o suporte da NVIDIA diretamente.

Agradecemos seu feedback.