Usar a aceleração de GPU para o AKS Edge Essentials (versão prévia)
Importante
A aceleração de GPU para o AKS Edge Essentials está atualmente em VERSÃO PRELIMINAR. Consulte os termos de uso complementares para o Microsoft Azure Previews para termos legais que se aplicam aos recursos do Azure que estão em versão beta, versão prévia ou ainda não lançados em disponibilidade geral.
As GPUs são uma opção popular para computação de inteligência artificial, pois oferecem recursos de processamento paralelo e muitas vezes podem executar inferência baseada em visão mais rapidamente do que as CPUs. Para dar melhor suporte a aplicativos de inteligência artificial e aprendizado de máquina, o AKS Edge Essentials pode expor uma GPU ao módulo Linux da máquina virtual.
O AKS Edge Essentials dá suporte à GPU-Paravirtualização (GPU-PV) como a tecnologia de passagem de GPU. Em outras palavras, a GPU é compartilhada entre a máquina virtual Linux e o host.
Importante
Esses recursos incluem componentes desenvolvidos e de propriedade da NVIDIA Corporation ou de seus licenciadores. Ao usar os recursos de aceleração de GPU, você aceita e concorda com os termos do Contrato de Licença de Usuário Final da NVIDIA.
Pré-requisitos
A aceleração de GPU do AKS Edge Essentials atualmente dá suporte a um conjunto específico de hardware de GPU. Além disso, o uso desse recurso requer versões específicas do Windows.
As GPUs suportadas e as versões necessárias do Windows são as seguintes:
GPUs com suporte | Tipo de passagem de GPU | Versões do Windows com suporte |
---|---|---|
NVIDIA GeForce, Quadro, RTX | GPU-PV | Windows 10/11 (Pro, Enterprise, IoT Enterprise) |
Importante
O suporte a GPU-PV pode ser limitado a determinadas gerações de processadores ou arquiteturas de GPU, conforme determinado pelo fornecedor da GPU. Para obter mais informações, consulte a documentação do NVIDIA CUDA para WSL.
Os usuários do Windows 10 devem usar a atualização de novembro de 2021 build 19044.1620 ou posterior. Após a instalação, você pode verificar o de versão do build executando winver
no prompt de comando.
Não há suporte para a passagem de GPU com a virtualização aninhada, como quando você executa o AKS Edge Essentials em uma máquina virtual do Windows.
Configuração e instalação do sistema
As seções a seguir contêm informações de configuração e instalação.
- Para GPUs NVIDIA GeForce/Quadro/RTX, baixe e instale o driver habilitado para NVIDIA CUDA para o WSL (Subsistema do Windows para Linux) a ser usado com os fluxos de trabalho existentes de ML do CUDA. Originalmente desenvolvido para WSL, o CUDA para drivers WSL também é usado para AKS Edge Essentials.
- Os usuários do Windows 10 também devem instalar o WSL porque algumas das bibliotecas são compartilhadas entre o WSL e o AKS Edge Essentials.
- Instale ou atualize o AKS Edge Essentials para a versão de maio de 2024 ou posterior. Para obter mais informações, consulte Atualizar os clusters do AKS Edge Essentials. O GPUS-PV é compatível com as distribuições k8s e k3s do Kubernetes.
Habilitar GPU-PV em sua implantação do AKS Edge Essentials
Etapa 1: parâmetros de configuração de máquina única
Você pode gerar os parâmetros necessários para criar um único cluster de computador e adicionar os parâmetros de configuração GPU-PV necessários usando os comandos a seguir.
Este script se concentra apenas na configuração GPU-PV; você também deve fazer outras atualizações gerais necessárias de acordo com sua própria implantação do AKS Edge Essentials:
$jsonObj = New-AksEdgeConfig -DeploymentType SingleMachineCluster
$jsonObj.User.AcceptGpuWarning = $true
$machine = $jsonObj.Machines[0]
$machine.LinuxNode.GpuPassthrough.Name = "NVIDIA GeForce GTX 1070"
$machine.LinuxNode.GpuPassthrough.Type = "ParaVirtualization"
$machine.LinuxNode.GpuPassthrough.Count = 1
Os principais parâmetros para habilitar o GPU-PV são:
User.AcceptGpuWarning
: defina esse parâmetro comotrue
para aceitar automaticamente a mensagem de confirmação ao habilitar o GPU-PV no AKS Edge Essentials.LinuxNode.GpuPassthrough.Name
: descreve o modelo de GPU implantado neste computador, com os drivers adequados instalados.LinuxNode.GpuPassthrough.Type
: Descreve o tipo de passagem de GPU. Atualmente, há suporte apenas paraParaVirtualization
.LinuxNode.GpuPassthrough.Count
: Descreve quantas GPUs estão instaladas nesta máquina.
Etapa 2: criar um único cluster de computador
Agora você pode executar o
New-AksEdgeDeployment
cmdlet para implantar um cluster do AKS Edge de computador único com um único nó do painel de controle do Linux. Você pode usar o objeto JSON gerado na etapa 1 e passá-lo como uma string:New-AksEdgeDeployment -JsonConfigString (New-AksEdgeConfig | ConvertTo-Json -Depth 4)
Após a implantação bem-sucedida, verifique se o GPU-PV está habilitado executando
nvidia-smi
:
Etapa 3: implantar a classe de tempo de execução da Nvidia
Crie um arquivo YAML chamado nvidia-runtimeclass.yaml com o seguinte conteúdo:
apiVersion: node.k8s.io/v1 kind: RuntimeClass metadata: name: nvidia handler: nvidia
Implante o
runtimeclass
:kubectl apply –f nvidia-runtimeclass.yaml
Etapa 4: instalar o plug-in do dispositivo Nvidia GPU
Baixe nvidia-deviceplugin.yaml deste local do GitHub.
Atualize o local das imagens de contêiner no arquivo nvidia-deviceplugin.yaml para o novo valor, da seguinte maneira:
containers: - image: registry.gitlab.com/nvidia/kubernetes/device-plugin/staging/k8s-device-plugin:6a31a868
Instale o Nvidia GPU DevicePlugin:
kubectl apply –f nvidia-deviceplugin.yaml
Verifique se o plug-in está em execução e se a GPU NVIDIA é detectada verificando os logs do pod deviceplugin usando os
kubectl get pods -A
comandos ekubectl logs $podname -n kube-system
:
Introdução a uma carga de trabalho de amostra
Prepare um arquivo YAML de carga de trabalho chamado gpu-workload.yaml:
apiVersion: v1 kind: Pod metadata: name: gpu-pod spec: restartPolicy: Never containers: - name: cuda-container image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda10.2 resources: limits: nvidia.com/gpu: 1 # requesting 1 GPU tolerations: - key: nvidia.com/gpu operator: Exists effect: NoSchedule
Execute a carga de trabalho de exemplo:
kubectl apply -f .\gpu-workload.yaml
Verifique se a carga de trabalho foi executada com êxito: