Ative e use GPUs NVIDIA em VMs com o tempo de execução de VMs no GDC

Este documento mostra como ativar o suporte de GPU ​​NVIDIA® para máquinas virtuais (VMs) executadas com o tempo de execução de VMs no GDC. Aprende a instalar os controladores da NVIDIA nos seus nós do Google Distributed Cloud, a verificar se as GPUs estão disponíveis e a atribuir GPUs a VMs.

Antes de começar

Para preencher este documento, precisa de ter acesso aos seguintes recursos:

Cartões de GPU Nvidia suportados

O Google Distributed Cloud versão 1.13 ou superior suporta as seguintes GPUs NVIDIA:

  • Tesla T4
  • Tesla P4
  • Tesla V100 SXM2 32 GB
  • A100 SXM4 40 GB
  • A100 PCIe 40 GB
  • A100 SXM4 80 GB
  • A100 PCIe 80 GB

Instale controladores NVIDIA nos nós

Antes de as VMs poderem usar as GPUs NVIDIA, tem de configurar os nós do Google Distributed Cloud para suportarem os dispositivos GPU. Para instalar os controladores da NVIDIA nos seus nós, conclua os seguintes passos em cada nó do cluster que inclua uma GPU NVIDIA. Este documento usa uma versão do Ubuntu suportada para os nós:

  1. Ligue-se ao nó do Google Distributed Cloud que quer configurar para suporte de GPU.
  2. Obtenha a versão do kernel do seu nó:

    KERNEL_VERSION="$(uname -r)"
    
  3. Atualize o nó do Ubuntu e instale os cabeçalhos do kernel adequados:

    sudo apt update && \
    apt install -y linux-headers-${KERNEL_VERSION}
    
  4. Instale o pacote build-essential para poder compilar os controladores da Nvidia num passo seguinte:

    sudo apt install -y build-essential
    
  5. Transfira o pacote de controladores da NVIDIA adequado para a sua GPU. Para ver uma lista completa de controladores, consulte Transferências de controladores da NVIDIA.

    O exemplo seguinte transfere o controlador da versão Linux x86_64470.82.01:

    wget https://us.download.nvidia.com/tesla/470.82.01/NVIDIA-Linux-x86_64-470.82.01.run
    
  6. Instale o pacote de controladores da NVIDIA. Use o nome do pacote de controladores da NVIDIA que transferiu no passo anterior:

    sudo sh NVIDIA-Linux-x86_64-470.82.01.run \
      --accept-license \
      --silent \
      --no-nouveau-check
    
  7. Carregue o módulo de kernel da NVIDIA:

    sudo modprobe nvidia
    
  8. Repita os passos desta secção em cada nó no cluster que tenha uma GPU NVIDIA.

Ative o suporte de GPU no tempo de execução de VMs no GDC

Depois de instalar os controladores da NVIDIA nos nós do Google Distributed Cloud, pode ativar o suporte de GPU no VM Runtime no GDC. Em seguida, as VMs podem aceder às GPUs nos nós.

Cada nó é reiniciado como parte do processo seguinte. As suas VMs podem ser afetadas por este processo de reinício. Se for possível e estiver configurado para tal, as VMs migradas são migradas para outros nós. Para mais informações, veja como configurar a política de despejo para VMs durante eventos de manutenção.

Para ativar o suporte de GPU no tempo de execução da VM no GDC, conclua os seguintes passos.

  1. Edite o recurso personalizado VMRuntime:

    kubectl edit vmruntime vmruntime
    
  2. Adicione a propriedade enableGPU: true ao manifesto VMRuntime:

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      enabled: true
      enableGPU: true
    ...
    
  3. Guarde e feche o recurso personalizado VMRuntime no editor.

  4. Verifique o estado dos controladores de GPU no espaço de nomes vm-system:

    kubectl get pods --namespace vm-system  -w
    

    Demora cerca de cinco minutos para que os comandos sejam ativados com êxito. Aguarde até que o ícone STATUS seja apresentado Running para todos os controladores da GPU. O exemplo de saída seguinte mostra o estado desejado:

    NAME                                          READY  STATUS    RESTARTS     AGE
    gpu-controller-controller-manager-gwvcb       2/2    Running   0            10m
    kubevirt-gpu-dp-daemonset-2lfkl               1/1    Running   0            10m
    kubevm-gpu-driver-daemonset-5fwh6             1/1    Running   0            10m
    nvidia-gpu-dp-daemonset-9zq2w                 1/1    Running   0            10m
    nvidia-mig-manager-5g7pz                      1/1    Running   0            10m
    vm-controller-controller-manager-7b6df6979b   2/2    Running   2 (13m ago)  14m
    
  5. Verifique se as GPUs estão disponíveis para utilização quando todos os controladores da GPU comunicam o respetivo estado como Running:

    kubectl get gpuallocations --namespace vm-system
    

    O exemplo de saída seguinte mostra que as GPUs nos nós estão disponíveis para utilização. É apresentado cada nó no cluster com suporte de GPU. Pode atribuí-los a VMs na secção seguinte:

    NAME       ALLOCATED   DEVICEMODEL
    bm-node1   true        Tesla A100 SXM4 40GB
    bm-node2   true        Tesla A100 SXM4 40GB
    

Atribua GPUs para utilização com VMs

Com o suporte de GPU configurado nos nós do cluster bare metal e no tempo de execução de VMs no GDC, atribua as GPUs para utilização com VMs. Por predefinição, as GPUs são atribuídas para utilização com agrupamentos (contentores).

  1. Edite o recurso personalizado GPUAllocation para utilização com VMs. Este passo atribui as GPUs nos nós para utilização com VMs:

    kubectl edit gpuallocation NODE_NAME --namespace vm-system
    

    Substitua NODE_NAME pelo nome do nó a partir do qual quer atribuir GPUs.

  2. Configure quantas GPUs quer atribuir às VMs. Inicialmente, todas as GPUs são atribuídas a pods.

    O número total de GPUs atribuídas a VMs e pods tem de ser igual ao número de GPUs no nó. Por exemplo, pode ter quatro GPUs no seu nó. Se atribuir duas GPUs a VMs, duas GPUs permanecem atribuídas a pods. O manifesto é rejeitado se tentar atribuir duas GPUs a VMs e uma GPU a pods, uma vez que uma GPU fica não atribuída.GPUAllocation

    Atualize o número de GPUs no nó que quer atribuir para utilização com VMs, conforme mostrado no exemplo seguinte:

    apiVersion: gpu.cluster.gke.io/v1
    kind: GPUAllocation
    metadata:
      name: gpu-w2
      namespace: vm-system
    spec:
      node: gpu-w2
      pod: 0
      vm: 4
    

    Neste exemplo, todas as quatro GPUs instaladas no nó estão atribuídas a VMs. Não são atribuídas GPUs aos pods.

  3. Guarde e feche o recurso personalizado GPUAllocation no editor.

  4. Verifique se as GPUs comunicam o respetivo estado ALLOCATED como true:

    kubectl get gpuallocations --namespace vm-system
    

    O exemplo de saída seguinte mostra que as GPUs nos nós estão disponíveis para utilização:

    NAME     ALLOCATED   DEVICEMODEL
    gpu-w1   true        Tesla A100 SXM4 40GB
    gpu-w2   true        Tesla A100 SXM4 40GB
    

Crie uma VM com suporte de GPU

Agora, pode criar uma VM que use a GPU do nó. No recurso personalizado da VM, especifica o nome e a quantidade de GPUs a atribuir a partir do nó.

  1. Obtenha o nome da placa GPU do anfitrião:

    kubectl describe node NODE_NAME
    

    Substitua NODE_NAME pelo nome do anfitrião do qual quer obter o nome da GPU.

    O exemplo de saída seguinte mostra que o nome da GPU atribuível neste nó é NVIDIA_A100_SXM4_40GB:

    Name:               bm-node1
    Roles:              worker
    [...]
    Allocatable:
      cpu:                                         47810m
      [...]
      memory:                                      336929400Ki
      nvidia.com/gpu-vm-NVIDIA_A100_SXM4_40GB:     1
    [...]
    
  2. Crie um manifesto VirtualMachine, como my-gpu-vm.yaml, no editor da sua escolha:

    nano my-gpu-vm.yaml
    
  3. Copie e cole o seguinte manifesto YAML:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      interfaces:
        - name: eth0
          networkName: pod-network
          default: true
      disks:
        - virtualMachineDiskName: VM_NAME-boot-dv
          boot: true
          gpu:
            model: nvidia.com/gpu-vm-GPU_NAME
            quantity: 1
    

    Neste ficheiro YAML, defina as seguintes definições:

    • VM_NAME: o nome da sua VM.
    • GPU_NAME: o nome da GPU do nó a atribuir à VM.
      • Este nome do GPU é apresentado no resultado do comando kubectl describe node de um passo anterior, como NVIDIA_A100_SXM4_40GB.

    A VM liga-se eth0 à rede pod-network predefinida.

    O disco de arranque com o nome VM_NAME-boot-dv já tem de existir. Para mais informações, consulte o artigo Crie e faça a gestão de discos virtuais.

  4. Guarde e feche o manifesto da VM no editor.

  5. Crie a VM com kubectl:

    kubectl apply -f my-gpu-vm.yaml
    
  6. Quando a VM estiver em execução, ligue-se à VM e verifique se o hardware da GPU está disponível.

O que se segue?