Creare un pool di nodi GPU completamente gestito nel servizio Azure Kubernetes (anteprima)

L'esecuzione di carichi di lavoro GPU NVIDIA in Servizio Azure Kubernetes (AKS) richiede tradizionalmente di installare e gestire il driver GPU NVIDIA, il plug-in del dispositivo Kubernetes e un utilità di esportazione delle metriche GPU in ogni nodo GPU. Questi componenti consentono la pianificazione GPU, l'accesso gpu a livello di contenitore e i dati di telemetria, ma l'installazione manuale o tramite l'operatore GPU NVIDIA comporta un sovraccarico operativo.

Con nodi GPU completamente gestiti (anteprima), AKS installa e gestisce automaticamente per te il driver NVIDIA GPU, il plug-in del dispositivo e l'esportatore di metriche di Data Center GPU Manager (DCGM). La creazione del pool di nodi GPU diventa un singolo passaggio e la capacità GPU si comporta come qualsiasi altro pool di nodi del servizio Azure Kubernetes.

È possibile configurare un pool di nodi GPU gestito tramite due campi in gpuProfile.nvidia:

  • managementMode (Managed o Unmanaged) controlla se AKS installa lo stack GPU gestito completo (driver, plugin del dispositivo e esportatore di metriche DCGM) o solo il driver. Il valore predefinito è Unmanaged.
  • migStrategy (None, Singleo Mixed) imposta la strategia MIG (Multi-Instance GPU) per GLI SKU GPU supportati, ad esempio A100 e H100. Il valore predefinito è None.

In questo articolo viene effettuato il provisioning di un pool di nodi GPU gestito, facoltativamente si abilita MIG, si verifica lo stack ed esegue un carico di lavoro GPU di esempio.

Importante

Le funzionalità di anteprima di AKS sono disponibili su base self-service, su scelta. Le anteprime vengono fornite "così come sono" e "come disponibili" e sono escluse dai contratti di servizio e dalla garanzia limitata. Le anteprime del servizio Azure Kubernetes sono parzialmente coperte dal supporto clienti con la massima diligenza possibile. Di conseguenza, queste funzionalità non sono destinate all'uso in produzione. Per altre informazioni, vedere gli articoli di supporto seguenti:

Prima di iniziare

Componenti GPU gestiti

Un pool di nodi GPU gestito può includere i componenti seguenti in ogni nodo:

Componente Funzionamento Cosa gestisce AKS
Driver GPU NVIDIA Moduli kernel e librerie di spazio utente che consentono al sistema operativo e ai contenitori di comunicare con l'hardware GPU. Selezione della versione del driver, installazione in fase di provisioning del nodo e reinstallazione dopo l'aggiornamento dell'immagine del nodo.
Plug-in del dispositivo NVIDIA Kubernetes Equivalente a DaemonSet che espone le risorse GPU (nvidia.com/gpu, nvidia.com/mig-*) al kubelet in modo che i pod possano richiederle. Distribuzione, configurazione (inclusa la strategia MIG) e ciclo di vita in ogni nodo GPU.
Esportatore di metriche NVIDIA DCGM e DCGM Data Center GPU Manager raccoglie i dati sull'integrità e sull'utilizzo della GPU ed espone le metriche prometheus (ad esempio, DCGM_FI_DEV_GPU_UTIL, DCGM_FI_DEV_GPU_TEMP) sulla porta 19400. Installazione, abilitazione del servizio ed etichetta del nodo kubernetes.azure.com/dcgm-exporter=enabled usata per scorporare le metriche.
Segnali di integrità GPU Segnali NPD che espongono condizioni dei nodi specifiche della GPU, ad esempio UnhealthyNvidiaDevicePlugin e UnhealthyNvidiaDCGMServices. Monitoraggio NPD e report sulle condizioni dei nodi GPU.

Installare i profili

Due gpuProfile campi decidono quali di quei componenti AKS installa:

  • gpuProfile.driver (Install o None): se AKS installa il driver GPU NVIDIA.
  • gpuProfile.nvidia.managementMode (Managed o Unmanaged): se AKS installa anche lo stack GPU destinato a Kubernetes sopra il driver.

Insieme, producono tre profili di installazione:

Installare il profilo Flag dell'interfaccia della riga di comando Che cosa installa e gestisce AKS
Stack gestito completo --enable-managed-gpu=true (o nessuna delle due opzioni) Tutti e quattro i componenti precedenti: driver, plug-in del dispositivo, esportatore metriche DCGM e monitoraggio dell'integrità della GPU in NPD.
Solo il driver (impostazione predefinita) --enable-managed-gpu=false Solo per driver NVIDIA per GPU. Si installano e gestiscono autonomamente il plug-in del dispositivo, l'esportatore metriche e il monitoraggio dell'integrità (ad esempio con l'operatore GPU NVIDIA).
Nessuno (BYO) --enable-managed-gpu=false --gpu-driver None Niente. AKS non installa nessuno dei quattro componenti. Tu possiedi l'intero stack. Vedere Bring your own GPU driver.

Valori predefiniti e sostituzioni

  • Impostazioni predefinite: se non si passa --enable-managed-gpu o --gpu-driver, il servizio Azure Kubernetes applica il profilo Solo driver sul pool di nodi creato con dimensioni della macchina virtuale abilitate per GPU NVIDIA.
  • Override: managementMode: Managed richiede il driver, quindi --gpu-driver None viene ignorato quando --enable-managed-gpu=true e il driver è ancora installato. Per ignorare il driver, impostare sia --enable-managed-gpu=false che --gpu-driver None.
  • Immutabilità: managementMode, migStrategye driver sono tutti fissi in fase di creazione. Per modificare il profilo, creare un nuovo pool di nodi.

Installare l'estensione CLI aks-preview

  1. Installa l'estensione della CLI aks-preview utilizzando il comando az extension add. È necessaria la versione 19.0.0b29 o successiva.

    az extension add --name aks-preview
    
  2. Aggiornare l'estensione per assicurarsi che sia installata la versione più recente usando il comando az extension update.

    az extension update --name aks-preview
    

Registrare il flag di funzionalità ManagedGPUExperiencePreview

Registra il flag di funzionalità ManagedGPUExperiencePreview nella tua sottoscrizione usando il comando az feature register.

az feature register --namespace Microsoft.ContainerService --name ManagedGPUExperiencePreview

Limitazioni

  • Questa funzionalità supporta attualmente solo le dimensioni delle macchine virtuali abilitate per GPU NVIDIA .
  • L'aggiornamento di un pool di nodi a scopo generico per aggiungere una VM di tipo GPU non è supportato su AKS.
  • Pool di nodi Windows non sono supportati con questa caratteristica, perché le metriche GPU non sono supportate. Quando si creano pool di nodi GPU Windows, AKS installa e gestisce automaticamente i driver e il plugin del dispositivo DirectX. Per altre informazioni, vedere la documentazione AKS Windows GPU.
  • La migrazione dei pool di nodi GPU a più istanze esistenti per usare questa funzionalità non è supportata.
  • Gli aggiornamenti sul posto da un pool di nodi GPU NVIDIA esistente a un pool di nodi GPU gestito non sono supportati. Per eseguire la migrazione, isolare e svuotare i nodi GPU esistenti, quindi ridistribuire nuovamente i carichi di lavoro in un nuovo pool di nodi GPU creato con --enable-managed-gpu=true. Per altre informazioni, vedere Ridimensionare i pool di nodi nel servizio Azure Kubernetes.
  • I campi managementMode, migStrategy, e driver in gpuProfile non sono modificabili dopo la creazione del pool di nodi. Per modificare questi valori, creare un nuovo pool di nodi.
  • Il ridimensionamento automatico del cluster non è supportato nei pool di nodi GPU gestiti durante l'anteprima. Ridimensionare questi pool manualmente.

Annotazioni

Le macchine virtuali abilitate per la GPU contengono hardware specializzato soggetto a prezzi maggiori e alla disponibilità regionale. Per altre informazioni, vedere il calcolatore dei prezzi e la disponibilità a livello di area.

Creare un pool di nodi GPU gestito da AKS (anteprima)

Aggiungere un pool di nodi GPU gestito a un cluster AKS esistente passando --enable-managed-gpu=true a az aks nodepool add. Il servizio Azure Kubernetes imposta gpuProfile.nvidia.managementMode, Managed e installa automaticamente il driver GPU, il plug-in del dispositivo e l'esportatore metriche DCGM.

Per usare lo SKU predefinito del sistema operativo Ubuntu, creare il pool di nodi senza specificare uno SKU del sistema operativo. Il pool di nodi è configurato per il sistema operativo predefinito in base alla versione Kubernetes del cluster.

  1. Aggiungi un pool di nodi al cluster usando il comando az aks nodepool add con il flag --enable-managed-gpu=true.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --node-vm-size Standard_NC6s_v3 \
        --node-taints sku=gpu:NoSchedule \
        --enable-managed-gpu=true
    
  2. Verificare che i componenti software GPU NVIDIA gestiti siano installati correttamente:

    az aks nodepool show \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp
    

    L'output deve includere i valori seguenti:

    ...
    "gpuProfile": {
        "driver": "Install",
        "driverType": "",
        "nvidia": {
            "managementMode": "Managed",
            "migStrategy": null
        }
    },
    ...
    

Creare un pool di nodi MIG (Multi-Instance GPU) gestito (anteprima)

Per gli SKU GPU che supportano GPU a istanze multiple (ad esempio A100 e H100), configurare una strategia MIG durante la creazione del pool di nodi mediante il flag --gpu-mig-strategy. La strategia controlla il modo in cui le partizioni MIG vengono esposte a Kubernetes:

  • Single: tutte le istanze MIG vengono aggregate nella risorsa standard nvidia.com/gpu .
  • Mixed: ogni profilo MIG viene esposto come risorsa separata, ad esempio nvidia.com/mig-1g.10gb.
  • None (impostazione predefinita): MIG non è configurato.

Il migStrategy campo non è modificabile dopo la creazione del pool di nodi.

Per informazioni generali sul partizionamento MIG, sulle dimensioni delle macchine virtuali supportate e sui profili delle istanze GPU, vedere Creare un pool di nodi GPU a più istanze diverse nel servizio Azure Kubernetes e GPU a più istanze NVIDIA.

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name mignp \
    --node-count 1 \
    --node-vm-size Standard_NC24ads_A100_v4 \
    --node-taints sku=gpu:NoSchedule \
    --enable-managed-gpu=true \
    --gpu-instance-profile MIG1g \
    --gpu-mig-strategy Single

Con questa configurazione, i pod richiedono risorse GPU usando il nome della risorsa standard nvidia.com/gpu .

Verificare il pool di nodi GPU gestito (anteprima)

Dopo aver pronto il pool di nodi, eseguire i controlli seguenti per verificare che lo stack gestito completo sia installato e integro.

  1. Verificare le condizioni dei nodi specifiche della GPU con il rilevatore di problemi del nodo (NPD).

    GPU_NODE=$(kubectl get nodes -l agentpool=gpunp -o jsonpath='{.items[0].metadata.name}')
    kubectl describe node $GPU_NODE
    

    In un nodo GPU gestito, entrambe le condizioni seguenti devono segnalare False:

    Condition Condizione Ragione
    UnhealthyNvidiaDevicePlugin False HealthyNvidiaDevicePlugin
    UnhealthyNvidiaDCGMServices False HealthyNvidiaDCGMServices
  2. Verificare che l'etichetta GPU gestita sia presente nel nodo:

    kubectl get node $GPU_NODE -o jsonpath='{.metadata.labels.kubernetes\.azure\.com/dcgm-exporter}'
    

    Output previsto: enabled.

  3. Verificare che le risorse GPU siano annunciate nelle risorse allocabili del nodo:

    kubectl get node $GPU_NODE -o jsonpath='{.status.allocatable}'
    

    Per un pool di nodi non MIG, l'output include "nvidia.com/gpu": "1" (o più, a seconda dello SKU). Per un pool di nodi MIG Mixed, l'output include risorse specifiche di MIG come "nvidia.com/mig-1g.10gb": "7".

  4. Eseguire un carico di lavoro di esempio per confermare l'accesso alla GPU dall'interno di un contenitore:

    apiVersion: v1
    kind: Pod
    metadata:
      name: managed-gpu-test
    spec:
      restartPolicy: Never
      tolerations:
        - key: "sku"
          operator: "Equal"
          value: "gpu"
          effect: "NoSchedule"
      containers:
      - name: gpu-test
        image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu
        command: ["nvidia-smi"]
        resources:
          limits:
            nvidia.com/gpu: 1
    

    Visualizzare i log dei pod per vedere l'output nvidia-smi che mostra il dispositivo GPU, la versione del driver e la versione CUDA:

    kubectl logs managed-gpu-test
    

Ridimensionare un pool di nodi GPU gestito (anteprima)

Ridimensionare manualmente un pool di nodi GPU gestito con az aks nodepool scale. I nuovi nodi installano lo stack GPU gestito completo.

az aks nodepool scale \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name gpunp \
    --node-count 2

Importante

Durante l'anteprima, i pool di nodi GPU gestiti non supportano il ridimensionamento automatico del cluster. Ridimensionare questi pool manualmente.

Profili di installazione alternativi

Se il profilo Full managed stack non è adatto, AKS supporta due profili alternativi nei pool di nodi GPU.

Usare questo profilo quando si vuole che il servizio Azure Kubernetes installi e gestisca il driver GPU NVIDIA, ma si prevede di distribuire il plug-in del dispositivo e l'esportatore metriche (ad esempio, con l'operatore GPU NVIDIA). Impostare --enable-managed-gpu=false:

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name gpunp \
    --node-count 1 \
    --node-vm-size Standard_NC6s_v3 \
    --node-taints sku=gpu:NoSchedule \
    --enable-managed-gpu=false

Con questa configurazione:

  • AKS installa e gestisce il driver GPU NVIDIA (gpuProfile.driver è Install).
  • AKS non installa un device plugin, un esportatore di metriche DCGM o regole di integrità della GPU. gpuProfile.nvidia è null.
  • Nessuna nvidia.com/gpu risorsa viene pubblicizzata fino a quando non si distribuisce un plug-in del dispositivo.

Passaggi successivi