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 nos clusters.

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

O operador de GPU NVIDIA usa o Operator Framework para gerenciar os componentes de software NVIDIA necessários para provisionar e gerenciar dispositivos GPU. Recomendamos o uso do operador de GPU NVIDIA para as seguintes vantagens e flexibilidade:

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

  • Escolha do sistema operacional compatível: os nós de trabalho do cluster podem usar qualquer sistema operacional (SO) compatível 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 trabalho: clusters de usuário, independentes ou híbridos.

Esta página é destinada a administradores de TI e operadores que gerenciam o ciclo de vida da infraestrutura de tecnologia subjacente. Para saber mais sobre papéis comuns e tarefas de exemplo referenciados no conteúdo do Google Cloud , consulte Funções e tarefas de usuário comuns do GKE Enterprise.

Antes de começar

Antes de realizar as etapas nas seções a seguir, verifique se você atende aos requisitos abaixo:

  • 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 trabalho 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 usada precisa ser compatível com a GPU, o sistema operacional e a versão do CUDA usada pelos aplicativos. Você tem as seguintes opções de instalação de drivers da NVIDIA:

    • Use o Operador de GPU NVIDIA para instalar a versão adequada do driver da 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 para instalação de drivers 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 do administrador. Use o Helm para instalar o Operador de GPU NVIDIA. É possível executar os seguintes comandos para fazer o download e instalar a ferramenta de linha de comando 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 as GPUs:

  1. Para dispositivos de GPU conectados por interconexão de componentes periféricos (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 do 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
      
    • Use a flag --set para transmitir um conjunto de pares de chave-valor delimitado por vírgulas para especificar opções de configuração:

      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 conferir 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 da GPU NVIDIA nos seus 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 trabalho 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 esse problema, instale os drivers de GPU nos nós manualmente e execute 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 driver.enabled=false
      

    Para cenários de implantação comuns e exemplos de comandos, consulte Cenários de implantação comuns 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 executando corretamente, a contagem de GPU vai aparecer corretamente no campo Allocatable do recurso de 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 job de GPU de exemplo, 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 para conferir a 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 de contêineres aplicadas pelo operador poderão ser substituídas durante as atualizações ou upgrades do cluster ou do pool de nós.

  • As versões com suporte do Google Distributed Cloud instalam a versão 1.6 do containerd LTS, que não ativa a interface de dispositivo de contêiner (CDI). Se você seguir as instruções em Suporte para a interface do dispositivo do contêiner na documentação da NVIDIA, o ambiente de execução nvidia-cdi poderá não funcionar. O cluster ainda vai funcionar como esperado, mas alguns recursos do 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 sete dias. Esse job substitui as configurações de contêineres, incluindo as adicionadas pelo Operador de GPU NVIDIA.

Práticas recomendadas

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

  • Faça backup do arquivo de configuração do containerd, /etc/containerd/config.toml, antes de atualizar o cluster ou os pools de nós. Esse arquivo contém a configuração do ambiente de execução nvidia. Restaure o arquivo config.toml depois que o upgrade ou a atualização for concluído 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 de balanceador de carga (loadBalancer.nodePoolSpec).

Receber suporte

Se precisar de mais ajuda relacionada ao uso de GPUs com a 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 do hardware ou, se aplicável, o Suporte da NVIDIA diretamente.

Agradecemos seu feedback.