Azure의 AMD GPU VM(Virtual Machine) 크기는 성능 및 비용의 유연성을 제공하여 높은 컴퓨팅 용량을 제공하는 동시에 워크로드 요구 사항에 적합한 구성을 선택할 수 있습니다. AKS는 계산 집약적 Kubernetes 워크로드를 실행하기 위해 AMD GPU 지원 Linux 노드 풀을 지원합니다.
이 문서는 신규 및 기존 AKS 클러스터에서 예약 가능한 AMD GPU를 사용하여 노드를 프로비전하는 데 도움이 됩니다.
제한점
- AKS는
Standard_ND96isr_MI300X_v5현재 MI300 시리즈 AMD GPU로 구동되는 Azure VM 크기를 지원합니다. - AMD GPU VM 크기를 추가하도록 기존 노드 풀을 업데이트하는 것은 AKS에서 지원되지 않습니다.
- AMD GPU VM 크기를 사용하여 AMD GPU 사용이 아닌 노드 풀을 업데이트하는 것은 지원되지 않습니다.
-
AzureLinux,WindowsAzureLinuxOSGuardAMDflatcarGPU에서 지원되지 않습니다.
시작하기 전 주의 사항:
- 이 문서에서는 기존 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 클러스터의 자격 증명을 가져옵니다. 다음 예제 명령은 myAKSCluster 리소스 그룹 내의 클러스터 myResourceGroup에 대한 자격 증명을 가져옵니다.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
AMD GPU를 사용하기 위한 옵션
AMD GPU를 사용하려면 Kubernetes, GPU 드라이버 등의 AMD 디바이스 플러그 인과 같은 다양한 AMD GPU 소프트웨어 구성 요소를 설치해야 합니다.
비고
현재 AKS는 AMD GPU 사용 노드 풀에서 GPU 드라이버 또는 AMD GPU 디바이스 플러그 인의 설치를 관리하거나 자동화하지 않습니다.
AKSInfinibandSupport 기능 등록
AMD GPU VM 크기가
r명명 규칙(예:Standard_ND96isr_MI300X_v5)을 사용하여 RDMA를 지원하는 경우, 노드 풀의 컴퓨터가 동일한 물리적 Infiniband 네트워크에 연결되도록 해야 합니다. 이렇게 하려면AKSInfinibandSupport기능 플래그를az feature register명령을 사용하여 등록하십시오.az feature register --name AKSInfinibandSupport --namespace Microsoft.ContainerServiceaz feature show명령을 사용하여 등록 상태를 확인합니다.az feature show \ --namespace "Microsoft.ContainerService" \ --name AKSInfinibandSupport명령문
az aks nodepool add을 사용하여 AMD GPU 사용 노드 풀을 만들고 API 필드를--gpu-driver값none으로 설정하여 기본 드라이버 설치를 건너뜁니다.az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name gpunp \ --node-count 1 \ --node-vm-size Standard_ND96isr_MI300X_v5 \ --gpu-driver none비고
AKS는 현재 AMD GPU 노드 풀 생성 시 자동 드라이버 설치를 건너뛰기 위해
gpu-driver필드의 사용을 강제합니다.
AKS에 AMD GPU 연산자 배포
AMD GPU 운영자는 드라이버 설치, Kubernetes용 AMD 디바이스 플러그 인, AMD 컨테이너 런타임 등을 포함하여 GPU를 프로비전하는 데 필요한 모든 AMD 소프트웨어 구성 요소의 관리 및 배포를 자동화합니다. AMD GPU 운영자는 이러한 구성 요소를 처리하므로 AKS 클러스터에 AMD 디바이스 플러그 인을 별도로 설치할 필요가 없습니다. 즉, AKS에서 AMD GPU 연산자를 사용하려면 자동 GPU 드라이버 설치를 건너뛰어야 합니다.
AMD 설명서에 따라 GPU 연산자를 설치합니다.
다음 명령을 사용하여 노드 풀에서 AMD GPU의
kubectl get nodes상태를 확인합니다.kubectl get nodes -o custom-columns=NAME:.metadata.name,GPUs:.status.capacity.'amd\.com/gpu'출력은 다음 예제 출력과 비슷하게 됩니다.
NAME STATUS ROLES AGE VERSION aks-gpunp-00000000 Ready agent 2m4s v1.31.7
AMD GPU를 예약할 수 있는지 확인합니다.
노드 풀을 만든 후 AKS 클러스터에서 GPU를 예약할 수 있는지 확인합니다.
kubectl get nodes명령을 사용하여 클러스터의 노드를 나열합니다.kubectl get nodeskubectl describe node명령을 사용하여 GPU를 예약할 수 있는지 확인합니다.kubectl describe node aks-gpunp-00000000용량 섹션에 GPU가
amd.com/gpu: 1으로 나열됩니다 출력은 다음과 같이 요약된 예제 출력과 비슷하게 됩니다.Name: aks-gpunp-00000000 Roles: agent Labels: accelerator=amd [...] Capacity: [...] amd.com/gpu: 1 [...]
AMD GPU 사용 워크로드 실행
AMD GPU의 작동을 확인하려면 적절한 리소스 요청으로 GPU 사용 워크로드를 예약할 수 있습니다. 이 예에서는 MNIST 데이터 세트에 대해 Tensorflow 작업을 실행합니다.
samples-tf-mnist-demo.yaml이라는 파일을 만들고
amd.com/gpu: 1의 리소스 제한이 포함된 다음 YAML 매니페스트를 붙여넣습니다.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: amd.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 3m36skubectl --watch를 사용하여 프로세스를 종료합니다.kubectl get pods명령을 사용하여 Pod 이름을 가져옵니다.kubectl get pods --selector app=samples-tf-mnist-demo
자원을 정리하세요
kubectl delete job 명령을 사용하여 이 문서에서 만든 연결된 Kubernetes 개체를 제거합니다.
kubectl delete jobs samples-tf-mnist-demo
다음 단계
- AKS에서 GPU 기반 애플리케이션에 대한 다양한 스토리지 옵션을 살펴봅니다.
- AKS의 Ray 클러스터에 대해 자세히 알아봅니다.
- 계산 집약적인 AKS 워크로드에 NVIDIA GPU 를 사용합니다.