특정 NVIDIA GPU는 최대 7개의 독립 인스턴스로 나눌 수 있습니다. 각 인스턴스에는 병렬로 명령을 실행하는 자체 SM(Stream Multiprocessor) 및 GPU 메모리가 있습니다. GPU 분할에 대한 자세한 내용은 NVIDIA MIG를 참조하세요.
이 문서에서는 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는 현재 AKS의
Standard_NC40ads_H100_v5
A100 GPU VM 크기에서 지원됩니다.
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
.
중요합니다
노드 풀을 만든 후에는 적용된 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
kubectl
명령을 사용하여 AKS 클러스터에 연결하도록az aks get-credentials
을 구성합니다.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 aksMigNode \ --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 add
명령을 사용하여 NVIDIA 디바이스 플러그 인 helm 리포지토리를helm repo update
추가합니다.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.17.0 \ --set migStrategy=${MIG_STRATEGY} \ --set gfd.enabled=true \ --namespace nvidia-device-plugin \ --create-namespace
참고 항목
NVIDIA 디바이스 플러그 인의 Helm 설치는 Kubernetes 디바이스 플러그 인 및 GFD 리포지토리를 통합합니다. AKS 관리 다중 인스턴스 GPU를 사용하는 경우 GFD 소프트웨어 구성 요소를 Helm으로 설치하는 것은 권장되지 않습니다.
다중 인스턴스 GPU 기능 확인
kubectl
클러스터 노드 목록을 반환하는 명령을 사용하여kubectl get
클러스터에 대한 연결을 확인합니다.kubectl get nodes -o wide
kubectl describe node
명령을 사용하여 노드에 다중 인스턴스 GPU 기능이 있는지 확인합니다. 다음 예제 명령은 MIG1g를 GPU 인스턴스 프로필로 사용하는 aksMigNode라는 노드에 대해 설명합니다.kubectl describe node aksMigNode
다음 예와 유사하게 출력됩니다.
# Single strategy output Allocatable: nvidia.com/gpu: 56 # Mixed strategy output Allocatable: nvidia.com/mig-1g.5gb: 56
작업 예약
다음 예제는 Ubuntu 22.0412.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)
중요합니다
CUDA 이미지에 대한 latest
태그는 Docker Hub에서 더 이상 사용되지 않습니다. 최신 이미지와 해당 태그는 NVIDIA의 리포지토리를 참조하세요.
문제 해결
노드 풀을 만든 후 다중 인스턴스 GPU 기능이 표시되지 않으면 API 버전이 2021-08-01보다 이전 버전이 아닌지 확인합니다.
다음 단계
Azure Kubernetes Service의 GPU에 대한 자세한 내용은 다음을 참조하세요.
Azure Kubernetes Service