Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel leert u hoe u GPU-workloads in Azure Kubernetes Service (AKS) automatisch schaalt met behulp van GPU-metrische gegevens die zijn verzameld door de DCGM-exporteur (NVIDIA Data Center GPU Manager). Deze metrische gegevens worden weergegeven via Azure Managed Prometheus en gebruikt door Kubernetes Event-Driven Automatisch schalen (KEDA) om workloads automatisch te schalen op basis van realtime GPU-gebruik. Deze oplossing helpt het GPU-resourcegebruik te optimaliseren en operationele kosten te beheren door de toepassingsschaal dynamisch aan te passen in reactie op de vraag naar workloads.
Vereiste voorwaarden
-
Azure CLI versie 2.60.0 of hoger. Voer
az --versionuit om de versie te vinden. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren. - Helm-versie 3.17.0 of hoger geïnstalleerd.
- kubectl versie 1.28.9 of hoger geïnstalleerd.
- NVIDIA GPU-quotum in uw Azure-abonnement. In dit voorbeeld wordt de
Standard_NC40ads_H100_v5SKU gebruikt, maar andere NVIDIA H100 VM-SKU's worden ook ondersteund.
Voordat u doorgaat, moet u ervoor zorgen dat uw AKS-cluster is geconfigureerd met het volgende:
- Integreer KEDA met uw Azure Kubernetes Service-cluster.
- Bewaak GPU-metrische gegevens van NVIDIA DCGM-exporteur met Azure Managed Prometheus en Azure Managed Grafana.
Op dit moment hebt u het volgende nodig:
- Een AKS-cluster met een knooppuntgroep(en) met NVIDIA GPU en GPU's die zijn bevestigd als scheduleerbaar.
- Azure Managed Prometheus en Grafana zijn ingeschakeld op uw AKS-cluster. KEDA ingeschakeld op uw cluster.
- De door DE GEBRUIKER toegewezen beheerde identiteit die door KEDA wordt gebruikt, heeft de
Monitoring Data Readerrol toegewezen aan de Azure Monitor-werkruimte die is gekoppeld aan uw AKS-cluster.
Een nieuwe KEDA-scaler maken met behulp van de metrische gegevens van NVIDIA DCGM Exporter
Als u een KEDA-schaalfunctie wilt maken, hebt u twee onderdelen nodig:
- Het Prometheus-queryeindpunt.
- De door de gebruiker toegewezen beheerde identiteit.
Het Azure Managed Prometheus-queryeindpunt ophalen
U vindt deze waarde in de sectie Overzicht van de Azure Monitor-werkruimte die is gekoppeld aan uw AKS-cluster in Azure Portal.
Exporteer het azure Managed Prometheus-queryeindpunt naar een omgevingsvariabele:
export PROMETHEUS_QUERY_ENDPOINT="https://example.prometheus.monitor.azure.com"
De door de gebruiker toegewezen beheerde identiteit ophalen
De door de gebruiker toegewezen beheerde identiteit is eerder gemaakt volgens de KEDA-integratiestappen. Laad deze waarde indien nodig opnieuw met de az identity show opdracht:
export USER_ASSIGNED_CLIENT_ID="$(az identity show --resource-group $RESOURCE_GROUP --name $USER_ASSIGNED_IDENTITY_NAME --query 'clientId' -o tsv)"
Maak het KEDA-scaler manifest aan
Met dit manifest worden de TriggerAuthentication en ScaledObject voor autoschaling gecreëerd op basis van GPU-gebruik, gemeten door de DCGM_FI_DEV_GPU_UTIL metriek.
Opmerking
In dit voorbeeld wordt de DCGM_FI_DEV_GPU_UTIL metrische waarde gebruikt, waarmee het GPU-gebruik wordt berekend. Andere metrische gegevens zijn ook beschikbaar bij de DCGM-exporteur, afhankelijk van uw workloadvereisten. Raadpleeg de documentatie van NVIDIA DCGM Exporter voor een volledige lijst met beschikbare metrische gegevens.
| Veld | Beschrijving |
|---|---|
metricName |
Hiermee geeft u de GPU-metrische gegevens op die moeten worden bewaakt.
DCGM_FI_DEV_GPU_UTIL rapporteert het percentage tijd dat de GPU werkbelastingen actief verwerkt. Deze waarde varieert doorgaans van 0 tot 100. |
query |
PromQL-query waarmee het gemiddelde GPU-gebruik wordt berekend voor alle pods in de implementatie my-gpu-workload. Dit zorgt ervoor dat schaalbeslissingen zijn gebaseerd op het algehele GPU-gebruik, niet op één pod. |
threshold |
Het gemiddelde GPU-gebruikspercentage dat schaalaanpassingen activeert. Als het gemiddelde groter is dan 5%, verhoogt de scaler het aantal pod replica's. |
activationThreshold |
Het minimale gemiddelde GPU-gebruik dat nodig is om schaalaanpassing te activeren. Als het gebruik lager is dan 2%, treden er geen schaalacties op, waardoor onnodig schalen tijdens lage activiteitsperioden niet wordt voorkomen. |
Maak het volgende 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 EOFPas dit manifest toe met behulp van de
kubectl applyopdracht:kubectl apply -f keda-gpu-scaler-prometheus.yaml
De nieuwe schaalmogelijkheden testen
Maak een voorbeeldworkload die GPU-resources in uw AKS-cluster verbruikt. U kunt beginnen met het volgende voorbeeld:
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 EOFPas dit implementatiemanifest toe met behulp van de
kubectl applyopdracht:kubectl apply -f my-gpu-workload.yamlOpmerking
Als er momenteel geen GPU-knooppunten beschikbaar zijn, blijft de pod in een
Pendingstatus totdat een knooppunt is ingericht, met het volgende bericht: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.De cluster autoscaler zal uiteindelijk starten en een nieuw GPU-knooppunt inrichten.
Normal TriggeredScaleUp 2m43s cluster-autoscaler pod triggered scale-up: [{aks-gpunp-36854149-vmss 0->1 (max: 2)}]Opmerking
Afhankelijk van de grootte van uw ingerichte GPU-SKU kan het inrichten van knooppunten enkele minuten duren.
Als u de voortgang wilt controleren, controleert u de HPA-gebeurtenissen (Horizontal Pod AutoScaler) met behulp van de
kubectl describeopdracht:kubectl describe hpa my-gpu-workloadDe uitvoer moet er als volgt uitzien:
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 countControleer of het GPU-knooppunt is toegevoegd en dat de pod wordt uitgevoerd met de
kubectl getopdracht:kubectl get nodesDe uitvoer moet er als volgt uitzien:
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
De GPU-knooppuntgroep omlaag schalen
Als u de GPU-knooppuntgroep omlaag wilt schalen, verwijdert u uw workloadimplementatie met behulp van de kubectl delete opdracht:
kubectl delete deployment my-gpu-workload
Opmerking
U kunt de knooppuntgroep zo configureren dat deze omlaag wordt geschaald naar nul door de automatische schaalaanpassing van clusters in te schakelen en de min-count in te stellen naar 0 bij het aanmaken van de knooppuntgroep. Voorbeeld:
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
Volgende stappen
- Implementeer een MIG-workload (Multi-Instance GPU) op AKS.
- Verken KAITO op AKS voor AI-deductie en afstemming.
- Meer informatie over Ray-clusters in AKS.