Usare l'accelerazione GPU per AKS Edge Essentials (anteprima)

Importante

L'accelerazione GPU per AKS Edge Essentials è attualmente in ANTEPRIMA. Consultare le Condizioni per l'utilizzo supplementari per le anteprime di Microsoft Azure per le condizioni legali applicabili alle funzionalità di Azure in versione beta, in anteprima o non ancora rilasciate nella disponibilità al pubblico.

Le GPU sono una scelta comune per i calcoli di intelligenza artificiale, perché offrono funzionalità di elaborazione parallele e spesso possono eseguire inferenze basate su visione più velocemente rispetto alle CPU. Per supportare meglio l'intelligenza artificiale e le applicazioni di Machine Learning, AKS Edge Essentials può esporre una GPU al modulo Linux della macchina virtuale.

Azure Kubernetes Edge Essentials supporta gpu-paravirtualization (GPU-PV) come tecnologia pass-through GPU. In altre parole, la GPU viene condivisa tra la macchina virtuale Linux e l'host.

Importante

Queste funzionalità includono componenti sviluppati e di proprietà di NVIDIA Corporation o dei suoi licenze. Usando le funzionalità di accelerazione GPU, si accettano e si accettano le condizioni del contratto di licenza per l'utente finale NVIDIA.

Prerequisiti

L'accelerazione GPU di Azure Kubernetes Edge Essentials supporta attualmente un set specifico di hardware GPU. Inoltre, l'uso di questa funzionalità richiede versioni specifiche di Windows.

Le GPU supportate e le versioni di Windows necessarie sono le seguenti:

GPU supportate Tipo pass-through GPU Versioni supportate di Windows
NVIDIA GeForce, Quadro, RTX GPU-PV Windows 10/11 (Pro, Enterprise, IoT Enterprise)

Importante

Il supporto GPU-PV potrebbe essere limitato a determinate generazioni di processori o architetture GPU, come determinato dal fornitore della GPU. Per altre informazioni, vedere la documentazione di NVIDIA CUDA per WSL.

Gli utenti di Windows 10 devono usare l'aggiornamento di novembre 2021 build 19044.1620 o versione successiva. Dopo l'installazione, è possibile verificare la versione di compilazione eseguendo winver nel prompt dei comandi.

Il pass-through GPU non è supportato con la virtualizzazione annidata, ad esempio quando si esegue AKS Edge Essentials in una macchina virtuale Windows.

Configurazione e installazione di sistema

Le sezioni seguenti contengono informazioni sull'installazione e sull'installazione.

Abilitare GPU-PV nella distribuzione di Azure Kubernetes Edge Essentials

Passaggio 1: parametri di configurazione di un singolo computer

È possibile generare i parametri necessari per creare un singolo cluster di computer e aggiungere i parametri di configurazione GPU-PV necessari usando i comandi seguenti.

Questo script è incentrato solo sulla configurazione GPU-PV; è anche necessario apportare altri aggiornamenti generali necessari in base alla distribuzione di Azure Kubernetes 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

I parametri chiave per abilitare GPU-PV sono:

  • User.AcceptGpuWarning: impostare questo parametro su true per accettare automaticamente il messaggio di conferma quando si abilita GPU-PV in AKS Edge Essentials.
  • LinuxNode.GpuPassthrough.Name: descrive il modello GPU distribuito in questo computer, con i driver appropriati installati.
  • LinuxNode.GpuPassthrough.Type: descrive il tipo pass-through gpu. Attualmente è supportato solo ParaVirtualization .
  • LinuxNode.GpuPassthrough.Count: descrive il numero di GPU installate in questo computer.

Passaggio 2: Creare un singolo cluster di computer

  1. È ora possibile eseguire il New-AksEdgeDeployment cmdlet per distribuire un cluster edge del servizio Azure Kubernetes con un singolo nodo del piano di controllo Linux. È possibile usare l'oggetto JSON generato nel passaggio 1 e passarlo come stringa:

    New-AksEdgeDeployment -JsonConfigString (New-AksEdgeConfig | ConvertTo-Json -Depth 4)
    
  2. Dopo aver completato la distribuzione, verificare che GPU-PV sia abilitato eseguendo nvidia-smi:

    Screenshot che mostra l'output smi NVIDIA.

Passaggio 3: Distribuire la classe di runtime Nvidia

  1. Creare un file YAML denominato nvidia-runtimeclass.yaml con il contenuto seguente:

    apiVersion: node.k8s.io/v1
    kind: RuntimeClass
    metadata:
      name: nvidia
    handler: nvidia
    
  2. Distribuire :runtimeclass

    kubectl apply –f nvidia-runtimeclass.yaml
    

Passaggio 4: Installare il plug-in del dispositivo Nvidia GPU

  1. Scaricare nvidia-deviceplugin.yaml da questo percorso GitHub.

  2. Aggiornare il percorso delle immagini del contenitore nel file nvidia-deviceplugin.yaml al nuovo valore, come indicato di seguito:

    containers:
    - image: registry.gitlab.com/nvidia/kubernetes/device-plugin/staging/k8s-device-plugin:6a31a868
    
  3. Installare Nvidia GPU DevicePlugin:

    kubectl apply –f nvidia-deviceplugin.yaml
    
  4. Verificare che il plug-in sia in esecuzione e che la GPU NVIDIA venga rilevata controllando i log del pod deviceplugin usando i kubectl get pods -A comandi e kubectl logs $podname -n kube-system :

    Screenshot che mostra l'output del comando kubectl logs.

Introduzione a un carico di lavoro di esempio

  1. Preparare un file YAML del carico di lavoro denominato 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. Eseguire il carico di lavoro di esempio:

    kubectl apply -f .\gpu-workload.yaml
    
  3. Verificare che il carico di lavoro sia stato eseguito correttamente:

    Screenshot che mostra che il carico di lavoro è stato eseguito correttamente.

Passaggi successivi

Panoramica di AKS Edge Essentials