다음을 통해 공유


AKS(Azure Kubernetes Service)에서 다중 인스턴스 GPU 노드 풀 만들기

NVIDIA의 A100 GPU는 최대 7개의 독립 인스턴스로 나눌 수 있습니다. 각 인스턴스에는 병렬로 명령을 실행하는 자체 SM(Stream Multiprocessor) 및 GPU 메모리가 있습니다. NVIDIA A100에 대한 자세한 내용은 NVIDIA A100 GPU를 참조하세요.

이 문서에서는 AKS(Azure Kubernetes Service) 클러스터에서 MIG 호환 VM 크기를 사용하여 다중 인스턴스 GPU 노드 풀을 만드는 방법을 안내합니다.

필수 구성 요소 및 제한 사항

  • 활성 구독이 있는 Azure 계정. 계정이 없는 경우 체험 계정을 만들 수 있습니다.
  • Azure CLI 버전 2.2.0 이상이 설치 및 구성되었습니다. az --version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.
  • Kubernetes 명령줄 클라이언트 kubectl이 설치 및 구성되었습니다. Azure Cloud Shell을 사용하는 경우 kubectl이 이미 설치되어 있습니다. 로컬로 설치하려는 경우 az aks install-cli 명령을 사용할 수 있습니다.
  • Helm v3가 설치 및 구성되었습니다. 자세한 내용은 Helm 설치를 참조하세요.
  • 다중 인스턴스 GPU 노드 풀은 현재 Azure Linux에서 지원되지 않습니다.
  • 다중 인스턴스 GPU 노드 풀에는 클러스터 자동 크기 조정기를 사용할 수 없습니다.

GPU 인스턴스 프로필

GPU 인스턴스 프로필은 GPU가 분할되는 방법을 정의합니다. 다음 표에서는 Standard_ND96asr_v4에 사용할 수 있는 GPU 인스턴스 프로필을 보여 줍니다.

프로필 이름 SM의 소수 메모리의 소수 만든 인스턴스 수
MIG 1g.5gb 1/7 1/8 7
MIG 2g.10gb 2/7 2/8 3
MIG 3g.20gb 3/7 4/8 2
MIG 4g.20gb 4/7 4/8 1
MIG 7g.40gb 7/7 8/8 1

예를 들어 GPU 인스턴스 프로필은 MIG 1g.5gb 각 GPU 인스턴스에 1g SM(스트리밍 다중 프로세서) 및 5gb 메모리가 있음을 나타냅니다. 이 경우 GPU는 7개의 인스턴스로 분할됩니다.

이 VM 크기에 사용할 수 있는 사용 가능한 GPU 인스턴스 프로필에는 MIG1g, MIG2g, MIG3gMIG4gMIG7g.

Important

노드 풀을 만든 후에는 적용된 GPU 인스턴스 프로필을 변경할 수 없습니다.

AKS 클러스터 만들기

  1. az group create 명령을 사용하여 Azure 리소스 그룹을 만듭니다.

    az group create --name myResourceGroup --location southcentralus
    
  2. az aks create 명령을 사용하여 AKS 클러스터를 만듭니다.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --generate-ssh-keys
    
  3. az aks get-credentials 명령을 사용하여 AKS 클러스터에 연결하도록 kubectl을 구성합니다.

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

다중 인스턴스 GPU 노드 풀 만들기

Azure CLI 또는 ARM API에 대한 HTTP 요청을 사용하여 노드 풀을 만들 수 있습니다.

  • az aks nodepool add 명령을 사용하여 다중 인스턴스 GPU 노드 풀을 만들고 GPU 인스턴스 프로필을 지정합니다. 아래 예제에서는 MIG 호환 GPU VM 크기의 노드 풀 Standard_ND96asr_v4 을 만듭니다.

    az aks nodepool add \
        --name aks-mignode \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --node-vm-size Standard_ND96asr_v4 \
        --node-count 1 \
        --gpu-instance-profile MIG1g
    

MIG(다중 인스턴스 GPU) 전략 결정

NVIDIA 플러그 인을 설치하기 전에 GPU 분할에 사용할 MIG(다중 인스턴스 GPU) 전략( 단일 전략 또는 혼합 전략)을 지정해야 합니다. 두 가지 전략은 CPU 워크로드를 실행하는 방법에는 영향을 주지 않지만, GPU 리소스가 표시되는 방식에 영향을 줍니다.

  • 단일 전략: 단일 전략은 모든 GPU 인스턴스를 GPU로 처리합니다. 이 전략을 사용하면 GPU 리소스가 nvidia.com/gpu: 1로 표시됩니다.
  • 혼합 전략: 혼합 전략은 GPU 인스턴스 및 GPU 인스턴스 프로필을 노출합니다. 이 전략을 사용하면 GPU 리소스가 nvidia.com/mig1g.5gb: 1로 표시됩니다.

NVIDIA 디바이스 플러그 인 및 GFD(GPU 기능 검색) 구성 요소 설치

  1. MIG 전략을 환경 변수로 설정합니다. 단일 또는 혼합 전략을 사용할 수 있습니다.

    # Single strategy
    export MIG_STRATEGY=single
    
    # Mixed strategy
    export MIG_STRATEGY=mixed
    
  2. helm repo update 명령을 사용하여 NVIDIA 디바이스 플러그 인 helm 리포지토리를 helm repo add 추가합니다.

    helm repo add nvdp https://nvidia.github.io/k8s-device-plugin
    helm repo update
    
  3. 명령을 사용하여 NVIDIA 디바이스 플러그 인을 설치합니다 helm install .

    helm install nvdp nvdp/nvidia-device-plugin \
    --version=0.15.0 \
    --generate-name \
    --set migStrategy=${MIG_STRATEGY} \
    --set gfd.enabled=true \
    --namespace nvidia-device-plugin \
    --create-namespace
    

참고 항목

NVIDIA 디바이스 플러그 인 버전 0.15.0 이상의 Helm 설치는 디바이스 플러그 인 GFD 리포지토리를 통합합니다. 이 자습서에서는 GFD 소프트웨어 구성 요소의 별도 Helm 설치를 권장하지 않습니다.

다중 인스턴스 GPU 기능 확인

  1. kubectl 클러스터 노드 목록을 반환하는 명령을 사용하여 kubectl get 클러스터에 대한 연결을 확인합니다.

    kubectl get nodes -o wide
    
  2. kubectl describe node 명령을 사용하여 노드에 다중 인스턴스 GPU 기능이 있는지 확인합니다. 다음 예제 명령은 MIG1g를 GPU 인스턴스 프로필로 사용하는 aks-mignode라는 노드를 설명합니다.

    kubectl describe node aks-mignode
    

    다음 예와 유사하게 출력됩니다.

    # Single strategy output
    Allocatable:
        nvidia.com/gpu: 56
    
    # Mixed strategy output
    Allocatable:
        nvidia.com/mig-1g.5gb: 56
    

작업 예약

다음 예제는 Ubuntu 22.04용 CUDA 기본 이미지 버전 12.1.1을 기반으로 하며 태그가 지정12.1.1-base-ubuntu22.04됩니다.

단일 전략

  1. 파일 single-strategy-example.yaml을 만들고 다음 매니페스트에 복사합니다.

    apiVersion: v1
    kind: Pod
    metadata:
      name: nvidia-single
    spec:
      containers:
      - name: nvidia-single
        image: nvidia/cuda:12.1.1-base-ubuntu22.04
        command: ["/bin/sh"]
        args: ["-c","sleep 1000"]
        resources:
          limits:
            "nvidia.com/gpu": 1
    
  2. kubectl apply 명령을 사용하여 애플리케이션을 배포하고 YAML 매니페스트의 이름을 지정합니다.

    kubectl apply -f single-strategy-example.yaml
    
  3. kubectl exec 명령을 사용하여 할당된 GPU 디바이스를 확인합니다. 이 명령은 클러스터 노드 목록을 반환합니다.

    kubectl exec nvidia-single -- nvidia-smi -L
    

    다음 예제는 성공적으로 만들어진 배포 및 서비스를 보여 주는 출력과 유사합니다.

    GPU 0: NVIDIA A100 40GB PCIe (UUID: GPU-48aeb943-9458-4282-da24-e5f49e0db44b)
    MIG 1g.5gb     Device  0: (UUID: MIG-fb42055e-9e53-5764-9278-438605a3014c)
    MIG 1g.5gb     Device  1: (UUID: MIG-3d4db13e-c42d-5555-98f4-8b50389791bc)
    MIG 1g.5gb     Device  2: (UUID: MIG-de819d17-9382-56a2-b9ca-aec36c88014f)
    MIG 1g.5gb     Device  3: (UUID: MIG-50ab4b32-92db-5567-bf6d-fac646fe29f2)
    MIG 1g.5gb     Device  4: (UUID: MIG-7b6b1b6e-5101-58a4-b5f5-21563789e62e)
    MIG 1g.5gb     Device  5: (UUID: MIG-14549027-dd49-5cc0-bca4-55e67011bd85)
    MIG 1g.5gb     Device  6: (UUID: MIG-37e055e8-8890-567f-a646-ebf9fde3ce7a)
    

혼합 전략

  1. 파일 mixed-strategy-example.yaml을 만들고 다음 매니페스트에 복사합니다.

    apiVersion: v1
    kind: Pod
    metadata:
      name: nvidia-mixed
    spec:
      containers:
      - name: nvidia-mixed
        image: nvidia/cuda:12.1.1-base-ubuntu22.04
        command: ["/bin/sh"]
        args: ["-c","sleep 100"]
        resources:
          limits:
            "nvidia.com/mig-1g.5gb": 1
    
  2. kubectl apply 명령을 사용하여 애플리케이션을 배포하고 YAML 매니페스트의 이름을 지정합니다.

    kubectl apply -f mixed-strategy-example.yaml
    
  3. kubectl exec 명령을 사용하여 할당된 GPU 디바이스를 확인합니다. 이 명령은 클러스터 노드 목록을 반환합니다.

    kubectl exec nvidia-mixed -- nvidia-smi -L
    

    다음 예제는 성공적으로 만들어진 배포 및 서비스를 보여 주는 출력과 유사합니다.

    GPU 0: NVIDIA A100 40GB PCIe (UUID: GPU-48aeb943-9458-4282-da24-e5f49e0db44b)
    MIG 1g.5gb     Device  0: (UUID: MIG-fb42055e-9e53-5764-9278-438605a3014c)
    

Important

CUDA 이미지에 대한 latest 태그는 Docker Hub에서 더 이상 사용되지 않습니다. 최신 이미지와 해당 태그는 NVIDIA의 리포지토리를 참조하세요.

문제 해결

노드 풀을 만든 후 다중 인스턴스 GPU 기능이 표시되지 않으면 API 버전이 2021-08-01보다 이전 버전이 아닌지 확인합니다.

다음 단계

Azure Kubernetes Service의 GPU에 대한 자세한 내용은 다음을 참조하세요.