Usare le GPU di Windows per carichi di lavoro a elevato utilizzo di calcolo nel servizio Azure Kubernetes (anteprima)
Le unità di elaborazione grafica (GPU) sono spesso usate per carichi di lavoro a elevato utilizzo di calcolo, ad esempio i carichi di lavoro di visualizzazione o di grafica. Il servizio Azure Kubernetes supporta i pool di nodi Windows e Linux per eseguire carichi di lavoro Kubernetes a elevato utilizzo di calcolo.
Questo articolo illustra come effettuare il provisioning di nodi Windows con GPU pianificabili in cluster del servizio Azure Kubernetes nuovi ed esistenti (anteprima).
Macchine virtuali abilitate per GPU supportate
Per visualizzare le macchine virtuali abilitate per GPU supportate, vedere Dimensioni delle macchine virtuali ottimizzate per la GPU in Azure. Per i pool del nodo del servizio Azure Kubernetes è consigliabile una dimensione minima di Standard_NC6s_v3. La serie NVv4 (basata sulle GPU AMD) non è supportata nel servizio Azure Kubernetes.
Nota
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.
Limiti
- L'aggiornamento di un pool di nodi Windows esistente per aggiungere GPU non è supportato.
- Non supportato in Kubernetes versione 1.28 e successive.
Operazioni preliminari
- Questo articolo presuppone che sia presente un cluster del servizio Azure Kubernetes esistente. Se non si ha un cluster, crearne uno usando l'interfaccia della riga di comando di Azure, Azure PowerShello il portale di Azure.
- È necessaria l'interfaccia della riga di comando di Azure versione 1.0.0b2 o successiva installata e configurata per usare il campo
--skip-gpu-driver-install
con il comandoaz aks nodepool add
. Eseguireaz --version
per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure. - È necessaria l'interfaccia della riga di comando di Azure versione 9.0.0b5 o successiva installata e configurata per usare il
--driver-type
campo con ilaz aks nodepool add
comando . Eseguireaz --version
per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.
Ottenere le credenziali per il cluster
Ottenere le credenziali per il cluster del servizio Azure Kubernetes usando il comando
az aks get-credentials
. Il comando di esempio seguente ottiene le credenziali per myAKSCluster nel gruppo di risorse myResourceGroup:az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Uso di GPU Windows con l'installazione automatica dei driver
L'uso di GPU NVIDIA prevede l'installazione di vari componenti software NVIDIA, ad esempio il plug-in del dispositivo NVIDIA per Kubernetes, l'installazione del driver GPU e altro ancora. Quando si crea un pool di nodi Windows con una macchina virtuale abilitata per la GPU supportata, questi componenti e i driver NVIDIA CUDA o GRID appropriati vengono installati. Per le dimensioni delle macchine virtuali serie NC e ND, viene installato il driver CUDA. Per le dimensioni delle macchine virtuali della serie NV, viene installato il driver GRID.
Importante
Le funzionalità di anteprima del servizio Azure Kubernetes sono disponibili in modalità self-service e opzionale. 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:
Installare l'estensione aks-preview
dell'interfaccia della riga di comando di Azure.
Registrare o aggiornare l'estensione aks-preview usando il comando
az extension add
oaz extension update
.# Register the aks-preview extension az extension add --name aks-preview # Update the aks-preview extension az extension update --name aks-preview
Registrare il flag di funzionalità WindowsGPUPreview
Registrare il flag di funzionalità
WindowsGPUPreview
usando il comandoaz feature register
.az feature register --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
Sono necessari alcuni minuti per visualizzare lo stato Registered.
Verificare lo stato della registrazione usando il comando
az feature show
.az feature show --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
Quando lo stato riflette Registrato, aggiornare la registrazione del provider di risorse Microsoft.ContainerService usando il comando
az provider register
.az provider register --namespace Microsoft.ContainerService
Creare un pool di nodi abilitato per GPU Windows (anteprima)
Per creare un pool di nodi abilitato per GPU Windows, è necessario usare una dimensione di macchina virtuale abilitata per la GPU supportata e specificare os-type
come Windows
. Il valore predefinito di Windows os-sku
è Windows2022
, ma tutte le opzioni di Windows os-sku
sono supportate.
Creare un pool di nodi abilitato per GPU Windows usando il comando
az aks nodepool add
.az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name gpunp \ --node-count 1 \ --os-type Windows \ --kubernetes-version 1.29.0 \ --node-vm-size Standard_NC6s_v3
Verificare che le GPU siano pianificabili.
Dopo aver verificato che le GPU sono pianificabili, è possibile eseguire il carico di lavoro GPU.
Specificare il tipo di driver GPU (anteprima)
Per impostazione predefinita, il servizio Azure Kubernetes specifica un tipo di driver GPU predefinito per ogni macchina virtuale abilitata per la GPU supportata. Poiché la compatibilità dei carichi di lavoro e dei driver è importante per i carichi di lavoro GPU funzionanti, è possibile specificare il tipo di driver per il nodo GPU di Windows. Questa funzionalità non è supportata per i pool di nodi GPU Linux.
Quando si crea un pool di agenti Windows con supporto GPU, è possibile specificare il tipo di driver GPU usando il --driver-type
flag .
Le opzioni disponibili sono:
- GRID: per le applicazioni che richiedono il supporto della virtualizzazione.
- CUDA: ottimizzato per le attività di calcolo in applicazioni scientifiche e a elevato utilizzo di dati.
Nota
Quando si imposta il --driver-type
flag, si assume la responsabilità di assicurarsi che il tipo di driver selezionato sia compatibile con le dimensioni e la configurazione specifiche della macchina virtuale del pool di nodi. Mentre il servizio Azure Kubernetes tenta di convalidare la compatibilità, esistono scenari in cui la creazione del pool di nodi potrebbe non riuscire a causa di incompatibilità tra il tipo di driver specificato e la macchina virtuale o l'hardware sottostante.
Per creare un pool di nodi abilitato per Windows GPU con un tipo di driver GPU specifico, usare il az aks nodepool add
comando .
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name gpunp \
--node-count 1 \
--os-type Windows \
--kubernetes-version 1.29.0 \
--node-vm-size Standard_NC6s_v3 \
--driver-type GRID
Ad esempio, il comando precedente crea un pool di nodi abilitato per GPU usando il GRID
tipo di driver GPU. Se si seleziona questo tipo di driver, viene eseguito l'override del valore predefinito del tipo di driver per gli SKU della CUDA
macchina virtuale della serie NC.
Uso di GPU Windows con l'installazione manuale del driver
Quando si crea un pool di nodi Windows con dimensioni di macchine virtuali NVIDIA GPU (N) nel servizio Azure Kubernetes, il driver GPU e il plug-in del dispositivo DirectX Kubernetes vengono installati automaticamente. Per ignorare questa installazione automatica, seguire questa procedura:
- Ignorare l'installazione del driver GPU (anteprima) usando
--skip-gpu-driver-install
. - Installazione manuale del plug-in del dispositivo DirectX Kubernetes.
Ignorare l'installazione del driver GPU (anteprima)
Il servizio Azure Kubernetes ha l'installazione automatica del driver GPU abilitata per impostazione predefinita. In alcuni casi, ad esempio l'installazione di driver personalizzati, è possibile ignorare l'installazione del driver GPU.
Importante
Le funzionalità di anteprima del servizio Azure Kubernetes sono disponibili in modalità self-service e opzionale. 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:
Registrare o aggiornare l'estensione aks-preview usando il comando
az extension add
oaz extension update
.# Register the aks-preview extension az extension add --name aks-preview # Update the aks-preview extension az extension update --name aks-preview
Creare un pool di nodi usando il comando
az aks nodepool add
con il flag--skip-gpu-driver-install
per ignorare l'installazione automatica del driver GPU.az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name gpunp \ --node-count 1 \ --os-type windows \ --os-sku windows2022 \ --skip-gpu-driver-install
Nota
Se l'oggetto --node-vm-size
in uso non è ancora stato caricato nel servizio Azure Kubernetes, non è possibile usare GPU e --skip-gpu-driver-install
non funziona.
Installare manualmente il plug-in del dispositivo DirectX Kubernetes
È possibile distribuire un DaemonSet per il plug-in del dispositivo DirectX Kubernetes, che esegue un pod in ogni nodo per fornire i driver necessari per le GPU.
Aggiungere un pool di nodi al cluster usando il comando
az aks nodepool add
.az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name gpunp \ --node-count 1 \ --os-type windows \ --os-sku windows2022
Creare uno spazio dei nomi e distribuire il plug-in del dispositivo DirectX Kubernetes
Creare uno spazio dei nomi usando il comando
kubectl create namespace
.kubectl create namespace gpu-resources
Creare un file denominato k8s-directx-device-plugin.yaml e incollare il manifesto YAML seguente fornito come parte del plugin del dispositivo NVIDIA per il progetto Kubernetes:
apiVersion: apps/v1 kind: DaemonSet metadata: name: nvidia-device-plugin-daemonset namespace: gpu-resources spec: selector: matchLabels: name: nvidia-device-plugin-ds updateStrategy: type: RollingUpdate template: metadata: # Mark this pod as a critical add-on; when enabled, the critical add-on scheduler # reserves resources for critical add-on pods so that they can be rescheduled after # a failure. This annotation works in tandem with the toleration below. annotations: scheduler.alpha.kubernetes.io/critical-pod: "" labels: name: nvidia-device-plugin-ds spec: tolerations: # Allow this pod to be rescheduled while the node is in "critical add-ons only" mode. # This, along with the annotation above marks this pod as a critical add-on. - key: CriticalAddonsOnly operator: Exists - key: nvidia.com/gpu operator: Exists effect: NoSchedule - key: "sku" operator: "Equal" value: "gpu" effect: "NoSchedule" containers: - image: mcr.microsoft.com/oss/nvidia/k8s-device-plugin:v0.14.1 name: nvidia-device-plugin-ctr securityContext: allowPrivilegeEscalation: false capabilities: drop: ["ALL"] volumeMounts: - name: device-plugin mountPath: /var/lib/kubelet/device-plugins volumes: - name: device-plugin hostPath: path: /var/lib/kubelet/device-plugins
Creare il DaemonSet e verificare che il plug-in del dispositivo NVIDIA sia stato creato correttamente usando il comando
kubectl apply
.kubectl apply -f nvidia-device-plugin-ds.yaml
Dopo aver installato correttamente il plug-in del dispositivo NVIDIA, è possibile verificare che le GPU siano pianificabili.
Verificare che le GPU siano pianificabili
Dopo aver creato il cluster, verificare che le GPU siano pianificabili in Kubernetes.
Elencare i nodi nel cluster usando il comando
kubectl get nodes
.kubectl get nodes
L'output dovrebbe essere simile all'esempio di output seguente:
NAME STATUS ROLES AGE VERSION aks-gpunp-28993262-0 Ready agent 13m v1.20.7
Verificare che le GPU siano pianificabili usando il comando
kubectl describe node
.kubectl describe node aks-gpunp-28993262-0
Nella sezione Capacity (Capacità) la GPU deve comparire in elenco come
microsoft.com/directx: 1
. L'output dovrebbe essere simile all'output di esempio condensato seguente:Capacity: [...] microsoft.com.directx/gpu: 1 [...]
Usare Informazioni dettagliate sul contenitore per monitorare l'utilizzo della GPU
Informazioni dettagliate sui contenitori con servizio Azure Kubernetes monitora le metriche di utilizzo della GPU seguenti:
Nome metrica | Dimensione metrica (tag) | Descrizione |
---|---|---|
containerGpuDutyCycle | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName , gpuId , gpuModel gpuVendor |
Percentuale di tempo nel periodo di campionamento precedente (60 secondi) durante il quale la GPU è stata occupata/attivamente l'elaborazione per un contenitore. Il ciclo di servizio è un numero compreso tra 1 e 100. |
containerGpuLimits | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName |
Ogni contenitore può specificare limiti come una o più GPU. Non è possibile richiedere o limitare una frazione di una GPU. |
containerGpuRequests | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName |
Ogni contenitore può richiedere una o più GPU. Non è possibile richiedere o limitare una frazione di una GPU. |
containerGpumemoryTotalBytes | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName , gpuId , gpuModel gpuVendor |
Quantità di memoria GPU in byte disponibili per l'uso per un contenitore specifico. |
containerGpumemoryUsedBytes | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName , gpuId , gpuModel gpuVendor |
Quantità di memoria GPU in byte usati da un contenitore specifico. |
nodeGpuAllocatable | container.azm.ms/clusterId , container.azm.ms/clusterName , gpuVendor |
Numero di GPU in un nodo che Kubernetes può usare. |
nodeGpuCapacity | container.azm.ms/clusterId , container.azm.ms/clusterName , gpuVendor |
Numero totale di GPU in un nodo. |
Pulire le risorse
Rimuovere gli oggetti Kubernetes associati creati in questo articolo usando il comando
kubectl delete job
.kubectl delete jobs windows-gpu-workload
Passaggi successivi
- Per eseguire i processi Apache Spark, vedere Eseguire un processo Apache Spark con il servizio Azure Kubernetes.
- Per altre informazioni sulle funzionalità dell'utilità di pianificazione Kubernetes, vedere Procedure consigliate per le funzionalità avanzate dell'utilità di pianificazione nel servizio Azure Kubernetes.
- Per altre informazioni sul servizio Azure Kubernetes e Azure Machine Learning, vedere:
Azure Kubernetes Service