Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I den här artikeln får du lära dig hur du autoskalar GPU-arbetsbelastningar på Azure Kubernetes Service (AKS) med hjälp av GPU-mått som samlats in av NVIDIA Data Center GPU Manager-exportören (DCGM). Dessa mått exponeras via Azure Managed Prometheus och används av Kubernetes Event-Driven Autoscaling (KEDA) för att automatiskt skala arbetsbelastningar baserat på GPU-användning i realtid. Den här lösningen hjälper till att optimera GPU-resursanvändningen och styra driftskostnaderna genom att dynamiskt justera programskalan som svar på efterfrågan på arbetsbelastningar.
Förutsättningar
-
Azure CLI version 2.60.0 eller senare. Kör
az --versionför att hitta versionen. Om du behöver installera eller uppgradera, se Installera Azure CLI. - Helm version 3.17.0 eller senare installerad.
- kubectl version 1.28.9 eller senare installerad.
- NVIDIA GPU-kvot i din Azure-prenumeration. I det här exemplet används SKU:n
Standard_NC40ads_H100_v5, men andra NVIDIA H100 VM-SKU:er stöds också.
Kontrollera att AKS-klustret är konfigurerat med följande innan du fortsätter:
- Integrera KEDA med ditt Azure Kubernetes Service-kluster.
- Övervaka GPU-mått från NVIDIA DCGM-exportör med Azure Managed Prometheus och Azure Managed Grafana.
Nu bör du ha:
- Ett AKS-kluster med NVIDIA GPU-aktiverade nodpooler och GPU:er som bekräftats som schemaläggningsbara.
- Azure Managed Prometheus och Grafana aktiverade i ditt AKS-kluster. KEDA aktiverat i klustret.
- Den användartilldelade hanterade identiteten som används av KEDA har tilldelats rollen
Monitoring Data Readeri Azure Monitor-arbetsytan som är kopplad till ditt AKS-kluster.
Skapa en ny KEDA-skalare med hjälp av NVIDIA DCGM Exporter-metrik
För att skapa en KEDA-skalare behöver du två komponenter:
- Prometheus-frågeslutpunkten.
- Den användartilldelade hanterade identiteten.
Hämta Azure Managed Prometheus-frågeslutpunkten
Du hittar det här värdet i avsnittet Översikt på Azure Monitor-arbetsytan som är kopplad till ditt AKS-kluster i Azure-portalen.
Exportera Azure Managed Prometheus-frågeslutpunkten till en miljövariabel:
export PROMETHEUS_QUERY_ENDPOINT="https://example.prometheus.monitor.azure.com"
Hämta den användartilldelade hanterade identiteten
Den användartilldelade hanterade identiteten skapades tidigare enligt KEDA-integreringsstegen. Om det behövs läser du in det här värdet igen med az identity show kommandot :
export USER_ASSIGNED_CLIENT_ID="$(az identity show --resource-group $RESOURCE_GROUP --name $USER_ASSIGNED_IDENTITY_NAME --query 'clientId' -o tsv)"
Skapa KEDA-skalare manifestet
Det här manifestet skapar TriggerAuthentication och ScaledObject för autoskalning baserat på GPU-användning mätt med DCGM_FI_DEV_GPU_UTIL-mätvärdet.
Anmärkning
I det här exemplet används måttet DCGM_FI_DEV_GPU_UTIL som mäter GPU-användning. Andra mått är också tillgängliga från DCGM-exportören beroende på dina arbetsbelastningskrav. En fullständig lista över tillgängliga mått finns i dokumentationen för NVIDIA DCGM Exporter.
| Fält | Beskrivning |
|---|---|
metricName |
Anger det GPU-mått som ska övervakas.
DCGM_FI_DEV_GPU_UTIL rapporterar procentandelen av tiden som GPU:n aktivt bearbetar arbetsbelastningar. Det här värdet varierar vanligtvis från 0 till 100. |
query |
PromQL-fråga som beräknar den genomsnittliga GPU-användningen för alla poddar i distributionen my-gpu-workload. Detta säkerställer att skalningsbeslut baseras på övergripande GPU-användning, inte en enda podd. |
threshold |
Den genomsnittliga GPU-utnyttjandeprocenten som utlöser skalning. Om genomsnittet överskrider 5%, ökar skalaren antalet poddrepliker. |
activationThreshold |
Den minsta genomsnittliga GPU-användningen som krävs för att aktivera skalning. Om användningen är under 2%sker inte skalningsåtgärder, vilket förhindrar onödig skalning under perioder med låg aktivitet. |
Skapa följande KEDA-manifest:
cat <<EOF > keda-gpu-scaler-prometheus.yaml apiVersion: keda.sh/v1alpha1 kind: TriggerAuthentication metadata: name: azure-managed-prometheus-trigger-auth spec: podIdentity: provider: azure-workload identityId: ${USER_ASSIGNED_CLIENT_ID} --- apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: my-gpu-workload spec: scaleTargetRef: name: my-gpu-workload minReplicaCount: 1 maxReplicaCount: 20 triggers: - type: prometheus metadata: serverAddress: ${PROMETHEUS_QUERY_ENDPOINT} metricName: DCGM_FI_DEV_GPU_UTIL query: avg(DCGM_FI_DEV_GPU_UTIL{deployment="my-gpu-workload"}) threshold: '5' activationThreshold: '2' authenticationRef: name: azure-managed-prometheus-trigger-auth EOFAnvänd det här manifestet
kubectl applymed kommandot :kubectl apply -f keda-gpu-scaler-prometheus.yaml
Testa de nya skalningsfunktionerna
Skapa en exempelarbetsbelastning som använder GPU-resurser i ditt AKS-kluster. Du kan börja med följande exempel:
cat <<EOF > my-gpu-workload.yaml apiVersion: apps/v1 kind: Deployment metadata: name: my-gpu-workload namespace: default spec: replicas: 1 selector: matchLabels: app: my-gpu-workload template: metadata: labels: app: my-gpu-workload spec: tolerations: - key: "sku" operator: "Equal" value: "gpu" effect: "NoSchedule" containers: - name: my-gpu-workload image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu command: ["/bin/sh"] args: ["-c", "while true; do python /app/main.py --max_steps=500; done"] resources: limits: nvidia.com/gpu: 1 EOFAnvänd det här distributionsmanifestet
kubectl applymed kommandot :kubectl apply -f my-gpu-workload.yamlAnmärkning
Om inga GPU-noder är tillgängliga för närvarande förblir podden i ett
Pendingtillstånd tills en nod har etablerats, vilket visar följande meddelande:Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedScheduling 3m19s default-scheduler 0/2 nodes are available: 2 Insufficient nvidia.com/gpu. preemption: 0/2 nodes are available: 2 No preemption victims found for incoming pod.Autoskalningen av klustret kommer så småningom att starta och etablera en ny GPU-nod.
Normal TriggeredScaleUp 2m43s cluster-autoscaler pod triggered scale-up: [{aks-gpunp-36854149-vmss 0->1 (max: 2)}]Anmärkning
Beroende på storleken på din etablerade GPU SKU kan det ta flera minuter att etablera noder.
Kontrollera förloppet genom att kontrollera HPA-händelserna (Horizontal Pod Autoscaler) med kommandot
kubectl describe:kubectl describe hpa my-gpu-workloadUtdata bör se ut så här:
Conditions: Type Status Reason Message ---- ------ ------ ------- AbleToScale True ReadyForNewScale recommended size matches current size ScalingActive True ValidMetricFound the HPA successfully calculated a replica count from external metric s0-prometheus(&LabelSelector{MatchLabels:map[string]string{scaledobject.keda.sh/name: my-gpu-workload}}) ScalingLimited True TooFewReplicas the desired replica count is less than the minimum replica countBekräfta att GPU-noden har lagts till och att podden körs med
kubectl getkommandot :kubectl get nodesUtdata bör se ut så här:
NAME STATUS ROLES AGE VERSION aks-gpunp-36854149-vmss000005 Ready <none> 4m36s v1.31.7 aks-nodepool1-34179260-vmss000002 Ready <none> 26h v1.31.7 aks-nodepool1-34179260-vmss000003 Ready <none> 26h v1.31.7
Skala ner GPU-nodpoolen
Om du vill skala ned GPU-nodpoolen tar du bort arbetsbelastningsdistributionen med kommandot kubectl delete :
kubectl delete deployment my-gpu-workload
Anmärkning
Du kan konfigurera nodpoolen så att den skalar ned till noll genom att aktivera autoskalaren för klustret och ange min-count och 0 vid skapandet av nodpoolen. Till exempel:
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name gpunp \
--node-count 1 \
--node-vm-size Standard_NC40ads_H100_v5 \
--node-taints sku=gpu:NoSchedule \
--enable-cluster-autoscaler \
--min-count 0 \
--max-count 3
Nästa steg
- Distribuera en arbetsbelastning med flera instanser av GPU (MIG) på AKS.
- Utforska KAITO på AKS för AI-slutsatsdragning och finjustering.
- Läs mer om Ray-kluster på AKS.