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:
- Acesso à versão 1.12.0 do Google Distributed Cloud (
anthosBareMetalVersion: 1.12.0
) ou a um cluster superior. Pode usar qualquer tipo de cluster capaz de executar cargas de trabalho. Se necessário, experimente o Google Distributed Cloud no Compute Engine ou consulte a vista geral da criação de clusters. - A ferramenta de cliente
virtctl
instalada como um plug-in para okubectl
. Se necessário, instale a ferramenta de cliente virtctl.
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:
- Ligue-se ao nó do Google Distributed Cloud que quer configurar para suporte de GPU.
Obtenha a versão do kernel do seu nó:
KERNEL_VERSION="$(uname -r)"
Atualize o nó do Ubuntu e instale os cabeçalhos do kernel adequados:
sudo apt update && \ apt install -y linux-headers-${KERNEL_VERSION}
Instale o pacote
build-essential
para poder compilar os controladores da Nvidia num passo seguinte:sudo apt install -y build-essential
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_64
470.82.01
:wget https://us.download.nvidia.com/tesla/470.82.01/NVIDIA-Linux-x86_64-470.82.01.run
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
Carregue o módulo de kernel da NVIDIA:
sudo modprobe nvidia
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.
Edite o recurso personalizado
VMRuntime
:kubectl edit vmruntime vmruntime
Adicione a propriedade
enableGPU: true
ao manifestoVMRuntime
:apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: name: vmruntime spec: enabled: true enableGPU: true ...
Guarde e feche o recurso personalizado
VMRuntime
no editor.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 apresentadoRunning
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
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).
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.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.
Guarde e feche o recurso personalizado
GPUAllocation
no editor.Verifique se as GPUs comunicam o respetivo estado
ALLOCATED
comotrue
: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ó.
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 [...]
Crie um manifesto
VirtualMachine
, comomy-gpu-vm.yaml
, no editor da sua escolha:nano my-gpu-vm.yaml
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, comoNVIDIA_A100_SXM4_40GB
.
- Este nome do GPU é apresentado no resultado do comando
A VM liga-se
eth0
à redepod-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.Guarde e feche o manifesto da VM no editor.
Crie a VM com
kubectl
:kubectl apply -f my-gpu-vm.yaml
Quando a VM estiver em execução, ligue-se à VM e verifique se o hardware da GPU está disponível.