
Skill
aks-gpu-inference
manage GPU inference workloads on AKS
Description
Day-2 operations for GPU and model-inference workloads on Azure Kubernetes Service (AKS): diagnose GPU pods stuck Pending, missing nvidia.com/gpu, CUDA/driver mismatches, model OOM on weight load, GPU vCPU-quota failures, KAITO (AI toolchain operator) Workspaces stuck not-ready, and GPU cost / scale-to-zero / spot eviction. WHEN: GPU pod Pending 'Insufficient nvidia.com/gpu', no nvidia.com/gpu on node, CUDA driver version insufficient, model OOMKilled loading weights, GPU node pool quota exceeded, KAITO Workspace never becomes ready, idle GPU cost, autoscale GPU on DCGM, spot GPU eviction, right-size a GPU SKU for a model. DO NOT USE FOR: initial GPU/AI setup or enablement (use azure-skills airunway-aks-setup); non-GPU pod/node/network incidents (use aks-troubleshooting); non-GPU cost (use aks-cost-optimization).
SKILL.md
AKS GPU & Inference (Day-2)
Operate and troubleshoot GPU and model-serving workloads on AKS after they exist. This is the failure → check → fix loop, not a setup guide — for enabling GPUs, KAITO, or a model runway, use azure-skills airunway-aks-setup.
Operating rules
- Read-only by default. Diagnose and propose; do not scale, cordon, delete node pools, or delete KAITO Workspaces unless the user explicitly asks — deleting a Workspace has a cost trap (below).
- Evidence before conclusion. GPU symptoms have layered causes (quota → capacity → scheduling → driver). Quote the event, node capacity, or condition that supports the root cause.
The four walls (check in this order)
Most "my GPU workload won't run" incidents are one of these, and they stack — clearing one exposes the next:
- GPU quota is 0 by default. Every N-series VM family starts at 0 vCPUs in every region, and quota is measured in vCPUs, not GPUs. Check:
az vm list-usage --location <region> -o tableand look for the family row (e.g.Standard NC Family vCPUs,Standard NCADSA100v4 Family vCPUs). Error signature: "Insufficient vCPU quota for Standard NCASv3_T4 Family…". - Quota ≠ capacity ≠ SKU-eligibility. Even with quota, a region/zone can lack physical GPU capacity, and AKS gates some GPU SKUs behind a separate eligibility ticket. Check what's actually creatable:
az vm list-skus --location <region> --resource-type virtualMachines -o table. - The taint/toleration/nodeSelector triad. GPU pools use the convention taint
sku=gpu:NoSchedule. A GPU pod must carry the matching toleration (key=sku, value=gpu, effect=NoSchedule), requestnvidia.com/gpu: 1, and (by convention) selectaccelerator: nvidia. A missing toleration is the most common Pending cause after quota. - No
nvidia.com/gpuadvertised on the node → a driver / device-plugin model mismatch. See the driver decision matrix in references/gpu-scheduling.md.
Symptom → reference
| Symptom | Reference |
|---|---|
Pod Pending "Insufficient nvidia.com/gpu"; taints/quota/scheduling; driver models; --gpu-driver | references/gpu-scheduling.md |
| KAITO Workspace never becomes ready; conditions; the delete-doesn't-delete-the-pool cost trap | references/kaito-workspaces.md |
| Idle GPU cost, scale-to-zero, spot eviction, SKU-to-model right-sizing, KEDA on GPU | references/gpu-cost-and-scaling.md |
| GPU utilization/VRAM metrics, DCGM, OOMKilled on weight load | references/gpu-observability.md |
Fast triage
# Are GPUs schedulable? (capacity/allocatable nvidia.com/gpu + the accelerator label)
kubectl describe node <gpu-node> | grep -EA6 "Labels:|Capacity:|Allocatable:"
kubectl get nodes -o custom-columns=NAME:.metadata.name,GPU:.status.allocatable.'nvidia\.com/gpu'
# Why is a GPU pod Pending?
kubectl describe pod <pod> | grep -A15 Events
# Is the driver/device-plugin stack present?
kubectl get pods -A -o wide | grep -Ei "nvidia|device-plugin|dcgm"
az aks nodepool show -g <rg> --cluster-name <cluster> -n <pool> --query gpuProfile
# GPU vCPU quota by family (the exact "Insufficient vCPU quota" check)
az vm list-usage --location "<region>" -o table | grep -Ei "Total Regional|NC|ND"
Two facts that break copy-pasted commands
- DCGM metrics port differs by install model. AKS-managed GPU pools expose the DCGM exporter on port 19400; NVIDIA upstream / GPU-Operator use 9400. A
curl localhost:9400/metricsagainst a managed pool returns nothing. - Kubernetes has no GPU-memory-pressure signal. VRAM exhaustion surfaces only as a container OOMKilled (exit 137) — after DCGM (
DCGM_FI_DEV_FB_USED/FB_FREE) already shows the trend. Size the SKU to the model up front.
Reference
- Use NVIDIA GPUs on AKS: https://learn.microsoft.com/azure/aks/use-nvidia-gpu
- AI toolchain operator (KAITO): https://learn.microsoft.com/azure/aks/ai-toolchain-operator
- GPU observability best practices: https://learn.microsoft.com/azure/aks/best-practices-gpu-observability
More skills from the AKS-Skills repository
View all 7 skillsaks-automatic-readiness
migrate Kubernetes workloads to AKS Automatic
Aug 23AzureKubernetesMigrationModernizationaks-cluster-setup
design and configure Azure Kubernetes Service clusters
Aug 23ArchitectureAzureDeploymentKubernetesaks-cost-optimization
optimize Azure Kubernetes Service cluster costs
Aug 23AzureCost OptimizationKubernetesPerformanceaks-known-issues
diagnose AKS failures using known issue tables
Aug 23AzureDebuggingDiagnosticsKubernetesaks-network-capture
capture network traffic in AKS clusters
Aug 23AzureKubernetesNetworkingObservabilityaks-troubleshooting
debug and troubleshoot Azure Kubernetes Service incidents
Aug 23AzureDebuggingIncident ResponseKubernetes +1
More from Azure (Microsoft)
View publisherazure-arg-external-evaluation-policy-author
author and test Azure Resource Graph policies
azure-policy
Jul 12AzureComplianceGovernancePolicyazure-blueprints-migration
migrate Azure Blueprints to Template Specs
azure-blueprints
Aug 20AzureDeploymentInfrastructure as CodeMigrationapiview-feedback-resolution
resolve APIView feedback on Azure SDKs
azure-sdk-tools
Jul 12API DevelopmentAzureCode ReviewDocumentationazsdk-common-live-and-recorded-tests
deploy resources and run Azure SDK tests
azure-sdk-tools
Jul 12AzureDeploymentSDKTestingazsdk-common-prepare-release-plan
manage Azure SDK release plan work items
azure-sdk-tools
Jul 12AzureGitHubProject ManagementSDKazsdk-common-sdk-release
release Azure SDK packages
azure-sdk-tools
Jul 12AzureCI/CDDeploymentSDK