다음을 통해 공유


AKS(Azure Kubernetes Service)에서 계산 집약적 워크로드에 AMD GPU 사용

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, WindowsAzureLinuxOSGuard AMD flatcar GPU에서 지원되지 않습니다.

시작하기 전 주의 사항:

  • 이 문서에서는 기존 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 이상으로 업데이트하세요.

비고

GPU 지원 VM에는 더 높은 가격 및 지역 가용성에 맞는 특별한 하드웨어가 포함되어 있습니다. 자세한 내용은 가격 책정 도구 및 지역 가용성을 참조하세요.

클러스터의 자격 증명 가져오기

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 기능 등록

  1. AMD GPU VM 크기가 r 명명 규칙(예: Standard_ND96isr_MI300X_v5)을 사용하여 RDMA를 지원하는 경우, 노드 풀의 컴퓨터가 동일한 물리적 Infiniband 네트워크에 연결되도록 해야 합니다. 이렇게 하려면 AKSInfinibandSupport 기능 플래그를 az feature register 명령을 사용하여 등록하십시오.

    az feature register --name AKSInfinibandSupport --namespace Microsoft.ContainerService
    
  2. az feature show 명령을 사용하여 등록 상태를 확인합니다.

    az feature show \
    --namespace "Microsoft.ContainerService" \
    --name AKSInfinibandSupport
    
  3. 명령문 az aks nodepool add을 사용하여 AMD GPU 사용 노드 풀을 만들고 API 필드를 --gpu-drivernone으로 설정하여 기본 드라이버 설치를 건너뜁니다.

    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 드라이버 설치를 건너뛰어야 합니다.

  1. AMD 설명서에 따라 GPU 연산자를 설치합니다.

  2. 다음 명령을 사용하여 노드 풀에서 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를 예약할 수 있는지 확인합니다.

  1. kubectl get nodes 명령을 사용하여 클러스터의 노드를 나열합니다.

    kubectl get nodes
    
  2. kubectl 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 작업을 실행합니다.

  1. 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"
    
  2. 매니페스트 파일을 구문 분석하고 정의된 Kubernetes 개체를 만드는 kubectl apply 명령을 사용하여 작업을 실행합니다.

    kubectl apply -f samples-tf-mnist-demo.yaml
    

GPU 지원 워크로드 상태 보기

  1. 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
    
  2. kubectl --watch를 사용하여 프로세스를 종료합니다.

  3. kubectl get pods 명령을 사용하여 Pod 이름을 가져옵니다.

    kubectl get pods --selector app=samples-tf-mnist-demo
    

자원을 정리하세요

kubectl delete job 명령을 사용하여 이 문서에서 만든 연결된 Kubernetes 개체를 제거합니다.

kubectl delete jobs samples-tf-mnist-demo

다음 단계