Partilhar via


Use a aceleração de GPU para o AKS Edge Essentials

As GPUs são uma escolha popular para cálculos de inteligência artificial, porque oferecem recursos de processamento paralelo e muitas vezes podem executar inferências baseadas em visão mais rapidamente do que CPUs. Para suportar melhor as aplicações de inteligência artificial e aprendizagem automática, o AKS Edge Essentials pode expor uma GPU ao módulo Linux da máquina virtual.

O AKS Edge Essentials suporta GPU-Paravirtualization (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 licenciantes. Ao usar os recursos de aceleração de GPU, você está aceitando e concordando 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 suporta 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 suportadas Tipo de passagem GPU Versões suportadas do Windows
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 for WSL.

Os usuários do Windows 10 devem usar a compilação de atualização de novembro de 2021 19044.1620 ou posterior. Após a instalação, você pode verificar sua versão de compilação executando winver no prompt de comando.

A passagem de GPU não é suportada com 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 Windows Subsystem for Linux (WSL) para usar com seus fluxos de trabalho CUDA ML existentes. 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 seus clusters do AKS Edge Essentials. A GGP-PV é suportada nas distribuições Kubernetes k8s e k3s.

Habilite GPU-PV em sua implantação do AKS Edge Essentials

Etapa 1: parâmetros de configuração de uma única máquina

Você pode gerar os parâmetros necessários para criar um cluster de máquina única e adicionar os parâmetros de configuração GPU-PV necessários usando os seguintes comandos.

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 GPU-PV são:

  • User.AcceptGpuWarning: Defina este parâmetro para true aceitar automaticamente a mensagem de confirmação quando ativar GPU-PV no AKS Edge Essentials.
  • LinuxNode.GpuPassthrough.Name: Descreve o modelo de GPU implantado nesta máquina, com drivers adequados instalados.
  • LinuxNode.GpuPassthrough.Type: Descreve o tipo de passagem da GPU. Apenas ParaVirtualization é suportado atualmente.
  • LinuxNode.GpuPassthrough.Count: Descreve quantas GPUs estão instaladas nesta máquina.

Etapa 2: criar um cluster de máquina única

  1. Agora você pode executar o New-AksEdgeDeployment cmdlet para implantar um cluster AKS Edge de máquina única com um único nó de plano de controle do Linux. Você pode usar o objeto JSON gerado na etapa 1 e passá-lo como uma cadeia de caracteres:

    New-AksEdgeDeployment -JsonConfigString (New-AksEdgeConfig | ConvertTo-Json -Depth 4)
    
  2. Após a implantação bem-sucedida, verifique se a GPU-PV está habilitada executando nvidia-smi:

    Captura de tela mostrando a saída NVIDIA smi.

Etapa 3: Implantar a classe de tempo de execução da Nvidia

  1. 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
    
  2. Implante o runtimeclass:

    kubectl apply –f nvidia-runtimeclass.yaml
    

Passo 4: Instale o plug-in de dispositivo GPU Nvidia

  1. Baixe nvidia-deviceplugin.yaml deste local do GitHub.

  2. 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
    
  3. Instale o Nvidia GPU DevicePlugin:

    kubectl apply –f nvidia-deviceplugin.yaml
    
  4. Verifique se o plug-in está em execução e se a GPU NVIDIA é detetada verificando os logs do pod deviceplugin usando os kubectl get pods -A comandos e kubectl logs $podname -n kube-system :

    Captura de tela mostrando a saída do comando kubectl logs.

Introdução a uma carga de trabalho de exemplo

  1. 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
    
  2. Execute a carga de trabalho de exemplo:

    kubectl apply -f .\gpu-workload.yaml
    
  3. Verifique se a carga de trabalho foi executada com êxito:

    Captura de tela mostrando que a carga de trabalho foi executada com êxito.

Próximos passos

Visão geral do AKS Edge Essentials