GPU(그래픽 처리 장치)는 그래픽 및 시각화 워크로드 같은 계산 집약적 워크로드에 자주 사용됩니다. AKS는 컴퓨팅 집약적인 Kubernetes 워크로드를 실행하기 위해 GPU 지원 Linux 노드 풀을 지원합니다.
이 문서는 신규 및 기존 AKS 클러스터에서 예약 가능한 GPU를 사용하여 노드를 프로비전하는 데 도움이 됩니다.
중요합니다
2025년 11월 30일부터 AKS는 더 이상 Azure Linux 2.0에 대한 보안 업데이트를 지원하거나 제공하지 않습니다.
2026년 3월 31일부터 노드 이미지가 제거되고 노드 풀의 크기를 조정할 수 없습니다.
노드 풀을 지원되는 Kubernetes 버전으로 업그레이드하거나 osSku AzureLinux3
으로 마이그레이션하여 지원되는 Azure Linux 버전을 사용하십시오. 자세한 내용은 AKS의 [사용 중지] Azure Linux 2.0 노드 풀을 참조하세요.
지원되는 GPU 지원 VM
지원되는 GPU 지원 VM을 보려면 Azure의 GPU 최적화 VM 크기를 참조하세요. AKS 노드 풀의 경우 권장하는 최소 크기는 Standard_NC6s_v3입니다. NVv4 시리즈(AMD GPU 기반)는 AKS에서 지원되지 않습니다.
제한점
- Azure Linux GPU 사용 노드 풀을 사용하는 경우 자동 보안 패치가 적용되지 않습니다. 노드 OS 업그레이드 채널의 기본 동작은 현재 AKS API 버전을 참조하세요.
비고
AKS API 버전 2023-06-01 이상의 경우 노드 OS 업그레이드의 기본 채널은 NodeImage입니다. 이전 버전의 경우 기본 채널은 None입니다. 자세한 내용은 자동 업그레이드를 참조하세요.
- GPU VM 크기를 추가하도록 기존 노드 풀을 업데이트하는 것은 AKS에서 지원되지 않습니다.
비고
AKS GPU 이미지(미리 보기)는 2025년 1월 10일부터 사용 중지됩니다. 사용자 지정 헤더는 더 이상 사용할 수 없으므로 AKS GPU 이미지를 사용하여 새 GPU 사용 노드 풀을 만들 수 없습니다. GPU 이미지가 더 이상 지원되지 않으므로 GPU 이미지 대신 기본 GPU 구성으로 마이그레이션하거나 사용하는 것이 좋습니다. 자세한 내용은 AKS 릴리스 정보를 참조하세요, 또는 AKS 공개 로드맵에서 해당 사용 중지 공지 사항을 확인하세요.
시작하기 전 주의 사항:
- 이 문서에서는 기존 AKS 클러스터가 있다고 가정합니다. 클러스터가 없으면 Azure CLI, Azure PowerShell 또는 Azure Portal을 사용하여 클러스터를 만듭니다.
- 필드를 설정
--gpu-driver
하려면 Azure CLI 버전 2.72.2 이상이 설치되어 있어야 합니다.az --version
을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요. - Azure CLI 확장이
aks-preview
설치된 경우 버전을 18.0.0b2 이상으로 업데이트하세요.
클러스터의 자격 증명 가져오기
az aks get-credentials
명령을 사용하여 AKS 클러스터의 자격 증명을 가져옵니다. 다음 예에서는 myResourceGroup 리소스 그룹에서 myAKSCluster에 대한 자격 증명을 가져옵니다.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
NVIDIA GPU 사용 옵션
NVIDIA GPU를 사용하려면 Kubernetes용 NVIDIA 디바이스 플러그 인, GPU 드라이버 설치 등과 같은 다양한 NVIDIA 소프트웨어 구성 요소를 설치해야 합니다.
비고
기본적으로 Microsoft는 노드 이미지 배포의 일부로 NVIDIA 드라이버의 버전을 자동으로 유지 관리하며 AKS는 이를 지원하고 관리합니다 . NVIDIA 드라이버는 기본적으로 GPU 지원 노드에 설치되지만 디바이스 플러그 인을 설치해야 합니다.
NVIDIA 디바이스 플러그 인 설치
AKS에서 GPU를 사용하는 경우 NVIDIA 디바이스 플러그 인 설치가 필요합니다. NVIDIA GPU 연산자를 사용하는 경우와 같이 설치가 자동으로 처리되는 경우도 있습니다. 또는 NVIDIA 디바이스 플러그 인을 수동으로 설치할 수 있습니다.
NVIDIA 디바이스 플러그 인 수동 설치
GPU에 필요한 드라이버를 제공하기 위해 각 노드에서 Pod를 실행하는 NVIDIA 디바이스 플러그 인용 DaemonSet를 배포할 수 있습니다. 이것은 Azure Linux에 GPU 지원 노드 풀을 사용할 때 권장되는 방법입니다.
기본 OS SKU를 사용하려면 OS SKU를 지정하지 않고 노드 풀을 만듭니다. 노드 풀은 클러스터의 Kubernetes 버전을 기반으로 기본 운영 체제로 설정됩니다.
az aks nodepool add
명령을 사용하여 클러스터에 노드 풀을 추가합니다.az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name gpunp \ --node-count 1 \ --node-vm-size Standard_NC6s_v3 \ --node-taints sku=gpu:NoSchedule \ --enable-cluster-autoscaler \ --min-count 1 \ --max-count 3
이 명령은 myResourceGroup의 myAKSCluster에 gpunp라는 노드 풀을 추가하고 매개 변수를 사용하여 다음 노드 풀 설정을 구성합니다.
-
--node-vm-size
: 노드 풀에 있는 노드의 VM 크기를 Standard_NC6s_v3로 설정합니다. -
--node-taints
: 노드 풀에 sku=gpu:NoSchedule 테인트를 지정합니다. -
--enable-cluster-autoscaler
: 클러스터 자동 크기 조정기를 사용하도록 설정합니다. -
--min-count
: 노드 풀에서 최소 1개의 노드를 유지하도록 클러스터 자동 크기 조정기를 구성합니다. -
--max-count
: 노드 풀에서 최대 3개의 노드를 유지하도록 클러스터 자동 크기 조정기를 구성합니다.
비고
taint 및 VM 크기는 노드 풀을 만드는 동안에만 노드 풀에 대해 설정할 수 있지만 자동 크기 조정기 설정은 언제든지 업데이트할 수 있습니다.
-
kubectl create namespace
명령을 사용하여 네임스페이스를 만듭니다.kubectl create namespace gpu-resources
nvidia-device-plugin-ds.yaml이라는 파일을 만들고 Kubernetes용 NVIDIA 디바이스 플러그 인 프로젝트의 일부로 제공된 다음 YAML 매니페스트를 붙여넣습니다.
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: labels: name: nvidia-device-plugin-ds spec: tolerations: - key: "sku" operator: "Equal" value: "gpu" effect: "NoSchedule" # 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. # See https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/ priorityClassName: "system-node-critical" containers: - image: nvcr.io/nvidia/k8s-device-plugin:v0.17.2 name: nvidia-device-plugin-ctr env: - name: FAIL_ON_INIT_ERROR value: "false" 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
DaemonSet를 만들고
kubectl apply
명령을 사용하여 NVIDIA 디바이스 플러그 인이 성공적으로 만들어졌는지 확인합니다.kubectl apply -f nvidia-device-plugin-ds.yaml
이제 NVIDIA 디바이스 플러그 인을 성공적으로 설치했으므로 GPU가 예약 가능한지 확인하고 GPU 워크로드를 실행할 수 있습니다.
GPU 드라이버 설치 건너뛰기
NVIDIA 드라이버의 설치를 제어하거나 NVIDIA GPU 연산자를 사용하려는 경우 기본 GPU 드라이버 설치를 건너뛸 수 있습니다. Microsoft는 노드 이미지 배포의 일부로 NVIDIA 드라이버의 유지 관리 및 호환성을 지원하거나 관리하지 않습니다 .
비고
gpu-driver
API 필드는 이전에 노드 풀 태그를 사용하는 --skip-gpu-driver-install
고객에게 제안된 대안입니다.
- AKS의 노드 풀 태그는
--skip-gpu-driver-install
2025년 8월 14일에 사용 중지됩니다. 자동 GPU 드라이버 설치를 건너뛰는 기존 동작을 유지하려면 노드 풀을 최신 노드 이미지 버전으로 업그레이드하고 필드를 로--gpu-driver
설정합니다none
. 2025년 8월 14일 이후에는 노드 풀 태그를 사용하여 AKS GPU 사용 노드 풀--skip-gpu-driver-install
을 프로비전하여 이 기본 동작을 무시할 수 없습니다. 자세한 내용은 태그 사용 중지를 참조skip-gpu-driver
하세요.
명령을 사용하여 노드 풀을
az aks nodepool add
만들고 기본 GPU 드라이버 설치를 건너뛰기 위해--gpu-driver
필드를none
로 설정합니다.az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name gpunp \ --node-count 1 \ --gpu-driver none \ --node-vm-size Standard_NC6s_v3 \ --enable-cluster-autoscaler \ --min-count 1 \ --max-count 3
노드 풀을 만드는 동안
--gpu-driver
API 필드를none
으로 설정하면 자동 GPU 드라이버 설치가 건너뜁니다. 기존 노드는 변경되지 않습니다. 노드 풀을 0으로 스케일링한 다음 백업하여 변경 내용이 적용되도록 할 수 있습니다.오류가
unrecognized arguments: --gpu-driver none
발생하면 Azure CLI 버전을 업데이트합니다. 자세한 내용은 시작하기 전에를 참조하세요.필요에 따라 다음 단계에 따라 NVIDIA GPU 연산자를 설치할 수 있습니다.
GPU의 예약 가능 여부 확인
클러스터를 만든 후 Kubernetes에서 GPU를 예약할 수 있는지 확인합니다.
kubectl get nodes
명령을 사용하여 클러스터의 노드를 나열합니다.kubectl get nodes
출력은 다음 예제 출력과 비슷하게 됩니다.
NAME STATUS ROLES AGE VERSION aks-gpunp-28993262-0 Ready agent 13m v1.20.7
kubectl describe node
명령을 사용하여 GPU를 예약할 수 있는지 확인합니다.kubectl describe node aks-gpunp-28993262-0
용량 섹션에 GPU가
nvidia.com/gpu: 1
으로 나열됩니다 출력은 다음과 같이 요약된 예제 출력과 비슷하게 됩니다.Name: aks-gpunp-28993262-0 Roles: agent Labels: accelerator=nvidia [...] Capacity: [...] nvidia.com/gpu: 1 [...]
GPU 사용 워크로드 실행
GPU가 작동하는 모습을 보려면 적절한 리소스 요청으로 GPU 지원 워크로드를 예약하면 됩니다. 이 예에서는 MNIST 데이터 세트에 대해 Tensorflow 작업을 실행합니다.
samples-tf-mnist-demo.yaml이라는 파일을 만들고
nvidia.com/gpu: 1
의 리소스 제한이 포함된 다음 YAML 매니페스트를 붙여넣습니다.비고
드라이버를 호출할 때 "CUDA 드라이버 버전이 CUDA 런타임 버전에 적합하지 않다"는 버전 불일치 오류가 발생하는 경우, NVIDIA 드라이버 행렬 호환성 차트를 검토합니다.
apiVersion: batch/v1 kind: Job metadata: labels: app: samples-tf-mnist-demo name: samples-tf-mnist-demo spec: template: metadata: labels: app: samples-tf-mnist-demo spec: containers: - name: samples-tf-mnist-demo image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu args: ["--max_steps", "500"] imagePullPolicy: IfNotPresent resources: limits: nvidia.com/gpu: 1 restartPolicy: OnFailure tolerations: - key: "sku" operator: "Equal" value: "gpu" effect: "NoSchedule"
매니페스트 파일을 구문 분석하고 정의된 Kubernetes 개체를 만드는
kubectl apply
명령을 사용하여 작업을 실행합니다.kubectl apply -f samples-tf-mnist-demo.yaml
GPU 지원 워크로드 상태 보기
kubectl get jobs
플래그와 함께--watch
명령을 사용하여 작업 진행률을 모니터링합니다. 처음으로 이미지를 끌어와서 데이터 세트를 처리하는 경우 몇 분 정도 걸릴 수 있습니다.kubectl get jobs samples-tf-mnist-demo --watch
다음 출력 예에 표시된 것처럼 COMPLETIONS 열에 1/1이 표시되면 작업이 성공적으로 완료된 것입니다.
NAME COMPLETIONS DURATION AGE samples-tf-mnist-demo 0/1 3m29s 3m29s samples-tf-mnist-demo 1/1 3m10s 3m36s
kubectl --watch
를 사용하여 프로세스를 종료합니다.kubectl get pods
명령을 사용하여 Pod 이름을 가져옵니다.kubectl get pods --selector app=samples-tf-mnist-demo
kubectl logs
명령을 사용하여 GPU 지원 워크로드의 출력을 확인합니다.kubectl logs samples-tf-mnist-demo-smnr6
Pod 로그의 다음 압축된 출력 예는 적절한 GPU 디바이스
Tesla K80
이 발견되었음을 확인합니다.2019-05-16 16:08:31.258328: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA 2019-05-16 16:08:31.396846: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties: name: Tesla K80 major: 3 minor: 7 memoryClockRate(GHz): 0.8235 pciBusID: 2fd7:00:00.0 totalMemory: 11.17GiB freeMemory: 11.10GiB 2019-05-16 16:08:31.396886: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: Tesla K80, pci bus id: 2fd7:00:00.0, compute capability: 3.7) 2019-05-16 16:08:36.076962: I tensorflow/stream_executor/dso_loader.cc:139] successfully opened CUDA library libcupti.so.8.0 locally Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes. Extracting /tmp/tensorflow/input_data/train-images-idx3-ubyte.gz Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes. Extracting /tmp/tensorflow/input_data/train-labels-idx1-ubyte.gz Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes. Extracting /tmp/tensorflow/input_data/t10k-images-idx3-ubyte.gz Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes. Extracting /tmp/tensorflow/input_data/t10k-labels-idx1-ubyte.gz Accuracy at step 0: 0.1081 Accuracy at step 10: 0.7457 Accuracy at step 20: 0.8233 Accuracy at step 30: 0.8644 Accuracy at step 40: 0.8848 Accuracy at step 50: 0.8889 Accuracy at step 60: 0.8898 Accuracy at step 70: 0.8979 Accuracy at step 80: 0.9087 Accuracy at step 90: 0.9099 Adding run metadata for 99 Accuracy at step 100: 0.9125 Accuracy at step 110: 0.9184 Accuracy at step 120: 0.922 Accuracy at step 130: 0.9161 Accuracy at step 140: 0.9219 Accuracy at step 150: 0.9151 Accuracy at step 160: 0.9199 Accuracy at step 170: 0.9305 Accuracy at step 180: 0.9251 Accuracy at step 190: 0.9258 Adding run metadata for 199 [...] Adding run metadata for 499
자원을 정리하세요
kubectl delete job
명령을 사용하여 이 문서에서 만든 연결된 Kubernetes 개체를 제거합니다.
kubectl delete jobs samples-tf-mnist-demo
다음 단계
- Apache Spark 작업을 실행하려면 AKS에서 Apache Spark 작업 실행을 참조하세요.
- Kubernetes 스케줄러의 기능에 대한 자세한 내용은 AKS의 고급 스케줄러 기능에 대한 모범 사례를 참조하세요.
- Azure Kubernetes Service 및 Azure Machine Learning에 대한 자세한 내용은 다음을 참조하세요.
Azure Kubernetes Service