다음을 통해 공유


AKS(Azure Kubernetes Service)에서 컴퓨팅 집약적인 워크로드에 Windows GPU 사용(미리 보기)

GPU(그래픽 처리 장치)는 그래픽 및 시각화 워크로드 같은 계산 집약적 워크로드에 자주 사용됩니다. AKS는 GPU 지원 Windows 및 Linux 노드 풀을 지원하여 컴퓨팅 집약적인 Kubernetes 워크로드를 실행합니다.

이 문서는 신규 및 기존 AKS 클러스터(미리 보기)에서 예약 가능한 GPU를 사용하여 Windows 노드를 프로비전하는 데 도움이 됩니다.

지원되는 GPU 지원 VM(가상 머신)

지원되는 GPU 지원 VM을 보려면 Azure의 GPU 최적화 VM 크기를 참조하세요. AKS 노드 풀의 경우 권장하는 최소 크기는 Standard_NC6s_v3입니다. NVv4 시리즈(AMD GPU 기반)는 AKS에서 지원되지 않습니다.

참고 항목

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

제한 사항

  • GPU를 추가하기 위해 기존 Windows 노드 풀을 업데이트하는 것은 지원되지 않습니다.
  • Kubernetes 버전 1.28 이하에서는 지원되지 않습니다.

시작하기 전에

  • 이 문서에서는 기존 AKS 클러스터가 있다고 가정합니다. 클러스터가 없으면 Azure CLI, Azure PowerShell 또는 Azure Portal을 사용하여 클러스터를 만듭니다.
  • az aks nodepool add 명령과 함께 --skip-gpu-driver-install 필드를 사용하려면 Azure CLI 버전 1.0.0b2 이상이 설치 및 구성되어 있어야 합니다. az --version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.
  • 명령을 사용하여 필드를 az aks nodepool add 사용하도록 --driver-type Azure CLI 버전 9.0.0b5 이상을 설치하고 구성해야 합니다. az --version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.

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

  • az aks get-credentials 명령을 사용하여 AKS 클러스터의 자격 증명을 가져옵니다. 다음 예에서는 myResourceGroup 리소스 그룹에서 myAKSCluster에 대한 자격 증명을 가져옵니다.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    

자동 드라이버 설치로 Windows GPU 사용

NVIDIA GPU를 사용하려면 Kubernetes용 DirectX 디바이스 플러그 인, GPU 드라이버 설치 등과 같은 다양한 NVIDIA 소프트웨어 구성 요소를 설치해야 합니다. 지원되는 GPU 지원 VM을 사용하여 Windows 노드 풀을 만들면 이러한 구성 요소와 적절한 NVIDIA CUDA 또는 GRID 드라이버가 설치됩니다. NC 및 ND 시리즈 VM 크기의 경우 CUDA 드라이버가 설치됩니다. NV 시리즈 VM 크기의 경우 GRID 드라이버가 설치됩니다.

Important

AKS 미리 보기 기능은 셀프 서비스에서 사용할 수 있습니다(옵트인 방식). 미리 보기는 "있는 그대로" 및 "사용 가능한 상태로" 제공되며 서비스 수준 계약 및 제한적 보증에서 제외됩니다. AKS 미리 보기의 일부는 고객 지원팀에서 최선을 다해 지원합니다. 따라서 이러한 기능은 프로덕션 용도로 사용할 수 없습니다. 자세한 내용은 다음 지원 문서를 참조하세요.

aks-preview Azure CLI 확장 설치

  • az extension add 또는 az extension update 명령을 사용하여 aks-preview 확장을 등록하거나 업데이트합니다.

    # Register the aks-preview extension
    az extension add --name aks-preview
    
    # Update the aks-preview extension
    az extension update --name aks-preview
    

WindowsGPUPreview 기능 플래그 등록

  1. az feature register 명령을 사용하여 WindowsGPUPreview 기능 플래그를 등록합니다.

    az feature register --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
    

    상태가 Registered로 표시되는 데 몇 분 정도 걸립니다.

  2. 또한 az feature show 명령을 사용하여 등록 상태를 확인합니다.

    az feature show --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
    
  3. 상태가 Registered(등록됨)를 반영하면 az provider register 명령을 사용하여 Microsoft.ContainerService 리소스 공급자의 등록을 새로 고칩니다.

    az provider register --namespace Microsoft.ContainerService
    

Windows GPU 지원 노드 풀 만들기(미리 보기)

Windows GPU 지원 노드 풀을 만들려면 지원되는 GPU 지원 VM 크기를 사용하고 os-typeWindows로 지정해야 합니다. 기본 Windows os-skuWindows2022이지만 모든 Windows os-sku 옵션이 지원됩니다.

  1. az aks nodepool add 명령을 사용하여 Windows GPU 지원 노드 풀을 만듭니다.

    az aks nodepool add \
       --resource-group myResourceGroup \
       --cluster-name myAKSCluster \
       --name gpunp \
       --node-count 1 \
       --os-type Windows \
       --kubernetes-version 1.29.0 \
       --node-vm-size Standard_NC6s_v3
    
  2. GPU가 예약 가능한지 확인합니다.

  3. GPU가 예약 가능하다는 것을 확인한 후에는 GPU 워크로드를 실행할 수 있습니다.

GPU 드라이버 유형 지정(미리 보기)

기본적으로 AKS는 지원되는 각 GPU 지원 VM에 대한 기본 GPU 드라이버 유형을 지정합니다. 워크로드 및 드라이버 호환성은 GPU 워크로드를 작동하는 데 중요하므로 Windows GPU 노드에 대한 드라이버 유형을 지정할 수 있습니다. 이 기능은 Linux GPU 노드 풀에서 지원되지 않습니다.

GPU 지원을 사용하여 Windows 에이전트 풀을 만들 때 플래그를 사용하여 --driver-type GPU 드라이버의 유형을 지정하는 옵션이 있습니다.

사용 가능한 옵션은 다음과 같습니다.

  • GRID: 가상화 지원이 필요한 애플리케이션의 경우.
  • CUDA: 과학 컴퓨팅 및 데이터 집약적 애플리케이션의 계산 작업에 최적화되었습니다.

참고 항목

플래그를 --driver-type 설정할 때 선택한 드라이버 유형이 노드 풀의 특정 VM 크기 및 구성과 호환되도록 해야 합니다. AKS는 호환성의 유효성을 검사하려고 하지만 지정된 드라이버 유형과 기본 VM 또는 하드웨어 간의 비호환성으로 인해 노드 풀을 만들지 못할 수 있는 시나리오가 있습니다.

특정 GPU 드라이버 유형을 사용하여 Windows GPU 사용 노드 풀을 만들려면 이 az aks nodepool add 명령을 사용합니다.

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name gpunp \
    --node-count 1 \
    --os-type Windows \
    --kubernetes-version 1.29.0 \
    --node-vm-size Standard_NC6s_v3 \
    --driver-type GRID

예를 들어 위의 명령은 GPU 드라이버 유형을 사용하여 GPU 사용 노드 풀을 GRID 만듭니다. 이 드라이버 유형을 선택하면 NC 시리즈 VM sku에 대한 드라이버 형식의 기본값이 재정의 CUDA 됩니다.

수동 드라이버 설치로 Windows GPU 사용

AKS에서 N 시리즈(NVIDIA GPU) VM 크기를 사용하여 Windows 노드 풀을 만들 때 GPU 드라이버 및 Kubernetes DirectX 디바이스 플러그 인이 자동으로 설치됩니다. 이 자동 설치를 무시하려면 다음 단계를 따릅니다.

  1. --skip-gpu-driver-install을 사용하여 GPU 드라이버 설치(미리 보기)를 건너뜁니다.
  2. Kubernetes DirectX 디바이스 플러그 인 수동 설치.

GPU 드라이버 설치 건너뛰기(미리 보기)

AKS에는 기본적으로 자동 GPU 드라이버 설치가 사용하도록 설정되어 있습니다. 자체 드라이버 설치와 같은 경우에는 GPU 드라이버 설치를 건너뛸 수도 있습니다.

Important

AKS 미리 보기 기능은 셀프 서비스에서 사용할 수 있습니다(옵트인 방식). 미리 보기는 "있는 그대로" 및 "사용 가능한 상태로" 제공되며 서비스 수준 계약 및 제한적 보증에서 제외됩니다. AKS 미리 보기의 일부는 고객 지원팀에서 최선을 다해 지원합니다. 따라서 이러한 기능은 프로덕션 용도로 사용할 수 없습니다. 자세한 내용은 다음 지원 문서를 참조하세요.

  1. az extension add 또는 az extension update 명령을 사용하여 aks-preview 확장을 등록하거나 업데이트합니다.

    # Register the aks-preview extension
    az extension add --name aks-preview
    
    # Update the aks-preview extension
    az extension update --name aks-preview
    
  2. --skip-gpu-driver-install 플래그와 함께 az aks nodepool add 명령을 사용하여 노드 풀을 만들어 자동 GPU 드라이버 설치를 건너뜁니다.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --os-type windows \
        --os-sku windows2022 \
        --skip-gpu-driver-install
    

참고 항목

사용 중인 --node-vm-size가 아직 AKS에 온보딩되지 않은 경우 GPU를 사용할 수 없으며 --skip-gpu-driver-install이 작동하지 않습니다.

Kubernetes DirectX 디바이스 플러그 인을 수동으로 설치

GPU에 필요한 드라이버를 제공하기 위해 각 노드에서 Pod를 실행하는 Kubernetes DirectX 디바이스 플러그 인용 DaemonSet를 배포할 수 있습니다.

  • az aks nodepool add 명령을 사용하여 클러스터에 노드 풀을 추가합니다.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --os-type windows \
        --os-sku windows2022
    

네임스페이스 만들기 및 Kubernetes DirectX 디바이스 플러그 인 배포

  1. kubectl create namespace 명령을 사용하여 네임스페이스를 만듭니다.

    kubectl create namespace gpu-resources
    
  2. k8s-directx-device-plugin.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:
          # 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.  This annotation works in tandem with the toleration below.
          annotations:
            scheduler.alpha.kubernetes.io/critical-pod: ""
          labels:
            name: nvidia-device-plugin-ds
        spec:
          tolerations:
          # Allow this pod to be rescheduled while the node is in "critical add-ons only" mode.
          # This, along with the annotation above marks this pod as a critical add-on.
          - key: CriticalAddonsOnly
            operator: Exists
          - key: nvidia.com/gpu
            operator: Exists
            effect: NoSchedule
          - key: "sku"
            operator: "Equal"
            value: "gpu"
            effect: "NoSchedule"
          containers:
          - image: mcr.microsoft.com/oss/nvidia/k8s-device-plugin:v0.14.1
            name: nvidia-device-plugin-ctr
            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
    
  3. DaemonSet를 만들고 kubectl apply 명령을 사용하여 NVIDIA 디바이스 플러그 인이 성공적으로 만들어졌는지 확인합니다.

    kubectl apply -f nvidia-device-plugin-ds.yaml
    
  4. 이제 NVIDIA 디바이스 플러그 인을 성공적으로 설치했으므로 GPU가 예약 가능한지 확인할 수 있습니다.

GPU의 예약 가능 여부 확인

클러스터를 만든 후 Kubernetes에서 GPU를 예약할 수 있는지 확인합니다.

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

    kubectl get nodes
    

    출력은 다음 예제 출력과 비슷하게 됩니다.

    NAME                   STATUS   ROLES   AGE   VERSION
    aks-gpunp-28993262-0   Ready    agent   13m   v1.20.7
    
  2. kubectl describe node 명령을 사용하여 GPU를 예약할 수 있는지 확인합니다.

    kubectl describe node aks-gpunp-28993262-0
    

    용량 섹션에 GPU가 microsoft.com/directx: 1으로 나열됩니다 출력은 다음과 같이 요약된 예제 출력과 비슷하게 됩니다.

    Capacity:
    [...]
     microsoft.com.directx/gpu:                 1
    [...]
    

Container Insights를 사용하여 GPU 사용량 모니터링

AKS를 사용한 컨테이너 인사이트는 다음 GPU 사용 현황 메트릭을 모니터링합니다.

메트릭 이름 메트릭 차원(태그) 설명
containerGpuDutyCycle container.azm.ms/clusterId, container.azm.ms/clusterName, containerName, gpuId, gpuModelgpuVendor 과거 샘플 기간(60초) 대비 GPU가 컨테이너를 위해 사용 중/적극적으로 처리 중인 시간의 백분율입니다. 업무 주기는 1에서 100 사이의 숫자입니다.
containerGpuLimits container.azm.ms/clusterId, , container.azm.ms/clusterNamecontainerName 각 컨테이너가 하나 이상의 GPU로 한도를 지정할 수 있습니다. GPU의 일부를 요청하거나 제한할 수는 없습니다.
containerGpuRequests container.azm.ms/clusterId, , container.azm.ms/clusterNamecontainerName 각 컨테이너가 하나 이상의 GPU를 요청할 수 있습니다. GPU의 일부를 요청하거나 제한할 수는 없습니다.
containerGpumemoryTotalBytes container.azm.ms/clusterId, container.azm.ms/clusterName, containerName, gpuId, gpuModelgpuVendor 특정 컨테이너에 사용할 수 있는 GPU 메모리 크기(바이트)입니다.
containerGpumemoryUsedBytes container.azm.ms/clusterId, container.azm.ms/clusterName, containerName, gpuId, gpuModelgpuVendor 특정 컨테이너에 사용 중인 GPU 메모리 크기(바이트)입니다.
nodeGpuAllocatable container.azm.ms/clusterId, , container.azm.ms/clusterNamegpuVendor Kubernetes가 사용할 수 있는 노드의 GPU 수입니다.
nodeGpuCapacity container.azm.ms/clusterId, , container.azm.ms/clusterNamegpuVendor 한 노드에 있는 총 GPU 수입니다.

리소스 정리

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

    kubectl delete jobs windows-gpu-workload
    

다음 단계