Configure e use GPUs NVIDIA

O aspeto traga o seu próprio nó da Google Distributed Cloud (apenas software) em bare metal permite-lhe tirar partido do seu hardware avançado, incluindo máquinas com GPUs, para obter o melhor desempenho e flexibilidade para os seus 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 utilização com GPUs da NVIDIA.

O operador de GPU da NVIDIA usa a estrutura do operador para gerir os componentes de software da NVIDIA necessários para aprovisionar e gerir dispositivos de GPU. Recomendamos que use o operador de GPU da NVIDIA para a seguinte flexibilidade e vantagens:

  • Escolha do tipo de GPU: o software Google Distributed Cloud apenas é compatível com uma vasta gama de tipos de GPU suportados pelo mais recente operador de GPU da NVIDIA.

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

  • Escolha de modelos de implementação: pode usar GPUs NVIDIA em qualquer tipo de cluster com nós de trabalho: clusters de utilizadores, clusters autónomos ou clusters híbridos.

Esta página destina-se a administradores de TI e operadores que gerem o ciclo de vida da infraestrutura tecnológica subjacente. Para saber mais sobre as funções comuns e exemplos de tarefas a que fazemos referência no conteúdo, consulte o artigo Funções e tarefas comuns do utilizador do GKE. Google Cloud

Antes de começar

Antes de realizar os passos nas secções seguintes, certifique-se de que tem os seguintes requisitos disponíveis:

  • Cluster operacional: certifique-se de que tem um cluster bare metal funcional criado com o Google Distributed Cloud.

  • GPUs NVIDIA: certifique-se de que as GPUs NVIDIA estão instaladas nos nós de trabalho do cluster. A secção seguinte para instalar o operador de GPU da NVIDIA inclui passos para verificar se as GPUs estão instaladas corretamente e são reconhecidas pelo seu sistema operativo.

  • Versão do controlador da NVIDIA compatível: a versão do controlador da NVIDIA que usa tem de ser compatível com a sua GPU, o seu sistema operativo e a versão do CUDA que as suas aplicações usam. Tem as seguintes opções de instalação do controlador da NVIDIA:

    • Use o operador de GPU da NVIDIA para instalar a versão adequada do controlador de GPU da NVIDIA, conforme descrito nas secções seguintes.

    • Use o controlador da NVIDIA pré-instalado na imagem do sistema operativo.

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

  • Helm versão 3.0.0 ou posterior: instale a interface de linha de comandos do Helm para a gestão de pacotes na sua estação de trabalho de administrador. Usa o Helm para instalar o NVIDIA GPU Operator. Pode executar os seguintes comandos para transferir e instalar a ferramenta de linha de comandos 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
    

Instale e valide o operador de GPU da NVIDIA

Os passos seguintes explicam a instalação do operador de GPU da NVIDIA no cluster bare metal e ajudam a confirmar que está a funcionar com as suas GPUs:

  1. Para dispositivos de GPU ligados através de interconexão expressa de componentes periféricos (PCIe), execute o seguinte comando para obter uma lista de barramentos PCI do sistema com "NVIDIA" no respetivo nome:

    sudo lspci | grep NVIDIA
    

    O resultado é semelhante ao seguinte:

    25:00.0 3D controller: NVIDIA Corporation Device 20b5 (rev a1)
    
  2. Pode usar a interface de gestão do sistema da NVIDIA (nvidia-smi) no nó especificado para obter informações mais detalhadas sobre os dispositivos GPU:

    nvidia-smi
    

    O resultado é semelhante ao seguinte:

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

    Quando instala o operador de GPU da NVIDIA, existem três variações de comandos básicos:

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

      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 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 OPTION_1_NAME=OPTION_1_VALUE,OPTION_2_NAME=OPTION_2_VALUE
      

      Para ver uma lista detalhada das opções de configuração, consulte o artigo Opções comuns de personalização de gráficos na documentação da NVIDIA. Para informações sobre a logística de utilização da flag --set, consulte O formato e as limitações de --set na documentação do Helm.

    • Desative a instalação de controladores se já tiver instalado o controlador da GPU NVIDIA nos seus nós:

      Por predefinição, o operador de GPU da NVIDIA implementa o controlador de GPU mais recente ou especificado em todos os nós de trabalho da GPU no cluster. Isto requer que todos os nós de trabalho com GPUs executem a mesma versão do sistema operativo para usar o contentor do controlador de GPU da NVIDIA. Para contornar esta situação, pode instalar manualmente os controladores da GPU nos nós e executar o comando helm install com --set driver.enabled=false para impedir que o operador de GPU da NVIDIA implemente controladores.

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

    Para ver cenários de implementação comuns e comandos de exemplo, consulte o artigo Cenários de implementação comuns na documentação da NVIDIA.

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

    Depois de o operador de GPU da NVIDIA ser instalado com um controlador de GPU e um plug-in de dispositivo em funcionamento correto, deve 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 do nó com a GPU que está a testar.

    O resultado é semelhante ao seguinte:

    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 a funcionar, execute a seguinte tarefa 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 ficheiro kubeconfig do cluster.

  7. Verifique os registos da saída da tarefa de exemplo:

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

    O resultado é semelhante ao seguinte:

    +---------------------------------------------------------------------------------------+
    | 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 seguintes limitações aplicam-se quando usa o operador de GPU da NVIDIA com clusters criados com o Google Distributed Cloud:

  • Se instalar uma versão recente do operador de GPU da NVIDIA, as configurações do containerd aplicadas pelo operador podem ser substituídas durante as atualizações ou as atualizações de clusters ou de conjuntos de nós.

  • As versões suportadas da instalação do Google Distributed Cloud contêm a versão LTS 1.6 do containerd, que não ativa a interface de dispositivo de contentor (CDI). Se seguir as instruções em Suporte para a interface do dispositivo de contentor na documentação da NVIDIA, o tempo de execução nvidia-cdi pode não funcionar. O cluster deve continuar a funcionar como esperado, mas algumas capacidades de CDI podem não estar disponíveis.

  • Os conjuntos de nós do equilibrador de carga executam automaticamente uma tarefa de atualização a cada 7 dias. Esta tarefa substitui as configurações do containerd, incluindo as adicionadas pelo operador de GPU da NVIDIA.

Práticas recomendadas

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

  • Faça uma cópia de segurança do ficheiro de configuração do containerd, /etc/containerd/config.toml, antes de atualizar o cluster ou os conjuntos de nós. Este ficheiro contém a configuração de tempo de execução nvidia. Restaure o ficheiro config.toml após a atualização ser concluída com êxito e reinicie o containerd para que as alterações de configuração entrem em vigor.

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

Obter apoio técnico

Se precisar de assistência adicional relacionada com a utilização de GPUs com o Google Distributed Cloud, contacte o apoio ao cliente do Google Cloud.

Para problemas relacionados com a configuração ou a utilização de hardware de GPU no seu sistema operativo, consulte o fornecedor de hardware ou, se aplicável, contacte diretamente o apoio técnico da NVIDIA.

Agradecemos o seu feedback.