증상은 kubectl describe node 의 Capacity 에 nvidia.com/gpu 가 아예 없는 것이다. 순서대로 확인한다.
VM 크기가 실제로 GPU SKU 인가. AKS 에서 GPU 유무는 VM 크기가 정한다. NC · ND · NV 계열이어야 한다. AKS 노드 풀의 최소 지원 크기는 Standard_NC4as_T4_v3 이며, AMD GPU 기반의 NVv4 계열은 AKS 에서 지원하지 않는다[1].
az aks nodepool show -g <RG> --cluster-name <AKS> -n <POOL> --query '{vm:vmSize, image:nodeImageVersion}'
GPU 소프트웨어 스택을 누가 관리하는가. AKS 에는 두 가지 방식이 있고 각각 무엇까지 깔아 주는지가 다르다.
| 방식 | AKS 가 관리 | 직접 관리 |
|---|---|---|
| AKS 관리형 GPU 노드 풀(권장) | NVIDIA 드라이버, device plugin, DCGM 메트릭 익스포터, GPU 상태 신호 | 워크로드만 |
| 자체 관리 | 기본값으로 NVIDIA 드라이버만 | device plugin, 메트릭 익스포터, 상태 점검 도구 |
자체 관리 방식이라면 device plugin 은 직접 배포해야 한다. 이것이 nvidia.com/gpu 가 나타나지 않는 가장 흔한 원인이다.
kubectl get ds -A | grep -i nvidia
아무것도 없으면 NVIDIA device plugin DaemonSet 을 배포하거나 NVIDIA GPU Operator 를 설치한다. 노드 풀에 테인트를 걸어 뒀다면 DaemonSet 에 그 테인트에 대한 toleration 을 넣어야 파드가 뜬다.
az aks enable-addons --addons gpu 는 없다. 예전 문서와 블로그에 남아 있는 방법이지만 지금은 그런 애드온이 없어 Invalid addon name: gpu 가 난다. 위의 두 방식 중 하나를 쓴다.
드라이버 설치를 건너뛰려면 --gpu-driver none 을 쓴다. GPU Operator 로 드라이버까지 직접 관리할 때 필요하다. 예전의 --skip-gpu-driver-install 태그는 2025-08-14 부로 더 이상 지원하지 않는다[1:1].
az aks nodepool add \
-g <RG> --cluster-name <AKS> -n gpunp \
--node-vm-size Standard_NC4as_T4_v3 \
--node-count 1 \
--gpu-driver none
이 값은 노드 풀을 만들 때만 정한다. update · upgrade 에는 --gpu-driver 인자가 없고, 생성 시 지정한 값이 그대로 유지된다. 기존 노드 풀의 VM 크기를 GPU SKU 로 바꾸는 것도 지원하지 않는다.
노드에 들어가 nvidia-smi 를 쳤을 때 나오는 메시지다. 커널 드라이버는 올라와 있는데 사용자 공간 쪽이 어긋난 상태다.
lsmod | grep nvidia
cat /proc/driver/nvidia/version
dmesg | grep -i nvidia
lsmod 에 nvidia, nvidia_uvm, nvidia_modeset 이 보이는데도 실패한다면 다음 둘을 본다.
NVSwitch 가 없는 VM 에서 Fabric Manager 가 돌고 있는 경우. nvidia-fabricmanager 는 NVSwitch 로 GPU 를 잇는 장비(SXM · HGX 계열)에서만 필요하다. PCIe 형태의 A100 을 쓰는 Standard_NC24ads_A100_v4 같은 VM 에는 NVSwitch 가 없어 서비스가 기동에 실패한다.
nvidia-fabricmanager-start.sh[...]: Detected Pre-NVL5 system
nvidia-fabricmanager-start.sh[...]: request to query NVSwitch device information ...
nvidia-fabricmanager.service: Failed with result 'exit-code'.
이 VM 계열이 맞다면 서비스를 끈다.
systemctl disable --now nvidia-fabricmanager
| VM 계열 | NVSwitch | Fabric Manager |
|---|---|---|
| NC..ads_A100_v4 (A100 PCIe) | 없음 | 필요 없음 |
| ND..amsr_A100_v4 (A100 SXM) | 있음 | 필요 |
드라이버 패키지가 반만 깔린 경우. nvidia-persistenced.service 가 아예 없거나 nvidia-smi 바이너리가 참조하는 libnvidia-ml.so 버전이 커널 모듈과 다르면 이 증상이 난다.
systemctl status nvidia-persistenced
ldd $(which nvidia-smi) | grep nvidia
이 상태는 노드 안에서 고치지 않는 편이 낫다. 임시 OS 디스크를 쓰는 노드는 재배치되면 손으로 고친 것이 전부 사라지고, AKS 의 VM 확장이 다시 원래 상태로 되돌린다. GPU 노드 풀을 지우고 다시 만드는 편이 빠르고 재현 가능하다.
kubectl drain <node> --ignore-daemonsets --delete-emptydir-data
az aks nodepool delete -g <RG> --cluster-name <AKS> -n <POOL>
# device plugin 또는 GPU Operator 를 먼저 준비한 뒤 노드 풀을 다시 만든다
kubectl describe node <gpu-node> | grep -A3 -i 'nvidia.com/gpu'
파드에서 실제로 쓸 수 있는지는 테스트 파드로 확인한다. 노드 풀에 테인트를 걸었다면 toleration 을 넣는다.
apiVersion: v1
kind: Pod
metadata:
name: gpu-test
spec:
restartPolicy: Never
containers:
- name: cuda
image: nvcr.io/nvidia/cuda:12.4.1-base-ubuntu22.04
command: ["nvidia-smi"]
resources:
limits:
nvidia.com/gpu: 1
AKS 에서 GPU 사용 — 2026-09-20 확인. https://learn.microsoft.com/en-us/azure/aks/gpu-cluster ↩︎ ↩︎