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
, MIG3g
MIG4g
및 MIG7g
.
Important
노드 풀을 만든 후에는 적용된 GPU 인스턴스 프로필을 변경할 수 없습니다.
AKS 클러스터 만들기
az group create
명령을 사용하여 Azure 리소스 그룹을 만듭니다.az group create --name myResourceGroup --location southcentralus
az aks create
명령을 사용하여 AKS 클러스터를 만듭니다.az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --generate-ssh-keys
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 기능 검색) 구성 요소 설치
MIG 전략을 환경 변수로 설정합니다. 단일 또는 혼합 전략을 사용할 수 있습니다.
# Single strategy export MIG_STRATEGY=single # Mixed strategy export MIG_STRATEGY=mixed
및
helm repo update
명령을 사용하여 NVIDIA 디바이스 플러그 인 helm 리포지토리를helm repo add
추가합니다.helm repo add nvdp https://nvidia.github.io/k8s-device-plugin helm repo update
명령을 사용하여 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 기능 확인
kubectl
클러스터 노드 목록을 반환하는 명령을 사용하여kubectl get
클러스터에 대한 연결을 확인합니다.kubectl get nodes -o wide
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
됩니다.
단일 전략
파일
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
kubectl apply
명령을 사용하여 애플리케이션을 배포하고 YAML 매니페스트의 이름을 지정합니다.kubectl apply -f single-strategy-example.yaml
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)
혼합 전략
파일
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
kubectl apply
명령을 사용하여 애플리케이션을 배포하고 YAML 매니페스트의 이름을 지정합니다.kubectl apply -f mixed-strategy-example.yaml
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에 대한 자세한 내용은 다음을 참조하세요.
Azure Kubernetes Service