계산 집약적 워크로드에 GPU 사용(Azure Stack HCI 23H2의 AKS)

적용 대상: Azure Stack HCI, 버전 23H2

참고

Azure Stack HCI 22H2의 AKS에서 GPU에 대한 자세한 내용은 GPU 사용(HCI 22H2)을 참조하세요.

GPU(그래픽 처리 장치)는 기계 학습, 딥 러닝 등과 같은 계산 집약적 워크로드에 사용됩니다. 이 문서에서는 Azure Arc에서 사용하도록 설정된 AKS에서 계산 집약적 워크로드에 GPU를 사용하는 방법을 설명합니다.

지원되는 GPU 모델

다음 GPU 모델은 AZURE Stack HCI 23H2의 AKS에서 지원됩니다.

제조업체 GPU 모델 지원되는 버전
엔비디아 A2 2311.2
엔비디아 A16 2402.0

지원되는 VM 크기

각 GPU 모델에 대해 다음 VM 크기는 Azure Stack HCI 23H2의 AKS에서 지원됩니다.

Nvidia A2는 NC2 A2 SKU에서 지원됩니다.

VM 크기 GPU GPU 메모리: GiB vCPU 메모리: GiB
Standard_NC4_A2 1 16 4 8
Standard_NC8_A2 1 16 8 16
Standard_NC16_A2 2 48 16 64
Standard_NC32_A2 2 48 32 28

Nvidia A16은 NC2 A16 SKU에서 지원됩니다.

VM 크기 GPU GPU 메모리: GiB vCPU 메모리: GiB
Standard_NC4_A16 1 16 4 8
Standard_NC8_A16 1 16 8 16
Standard_NC16_A16 2 48 16 64
Standard_NC32_A16 2 48 32 28

시작하기 전에

AKS Arc에서 GPU를 사용하려면 클러스터 배포를 시작하기 전에 필요한 GPU 드라이버를 설치했는지 확인합니다. 이 섹션의 단계를 따릅니다.

1단계: OS 설치

Azure Stack HCI 클러스터의 각 서버에 로컬로 Azure Stack HCI 버전 23H2 운영 체제를 설치합니다.

2단계: NVIDIA 완화 드라이버 다운로드 및 설치

이 소프트웨어에는 NVIDIA Corporation 또는 라이선스 사용자가 개발하고 소유한 구성 요소가 포함될 수 있습니다. 이러한 구성 요소의 사용은 NVIDIA 최종 사용자 라이선스 계약의 적용을 받습니다.

NVIDIA 완화 드라이버를 다운로드하려면 NVIDIA 데이터 센터 설명서를 참조하세요. 드라이버를 다운로드한 후 보관 파일을 확장하고 각 호스트 컴퓨터에 완화 드라이버를 설치합니다.

Invoke-WebRequest -Uri "https://docs.nvidia.com/datacenter/tesla/gpu-passthrough/nvidia_azure_stack_inf_v2022.10.13_public.zip" -OutFile "nvidia_azure_stack_inf_v2022.10.13_public.zip"
mkdir nvidia-mitigation-driver
Expand-Archive .\nvidia_azure_stack_inf_v2022.10.13_public.zip .\nvidia-mitigation-driver\

완화 드라이버를 설치하려면 추출된 파일이 포함된 폴더로 이동하고 Azure Stack HCI 호스트에 설치된 실제 GPU 유형에 따라 GPU 드라이버 파일을 선택합니다. 예를 들어 형식이 A2 GPU인 경우 nvidia_azure_stack_A2_base.inf 파일을 마우스 오른쪽 단추로 클릭하고 설치를 선택합니다.

폴더로 이동하고 다음 명령을 실행하여 완화 드라이버를 설치하여 명령줄을 사용하여 를 설치할 수도 있습니다.

pnputil /add-driver nvidia_azure_stack_A2_base.inf /install 
pnputil /scan-devices 

완화 드라이버를 설치한 후 GPU는 Nvidia A2_base - 분리됨 아래에 확인 상태로 나열됩니다.

Get-PnpDevice  | select status, class, friendlyname, instanceid | findstr /i /c:"nvidia"
OK       Nvidia A2_base - Dismounted               PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000 
OK       Nvidia A2_base - Dismounted               PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000

3단계: 1단계와 2단계 반복

HCI 클러스터의 각 서버에 대해 1단계와 2단계를 반복합니다.

4단계: Azure Stack HCI 클러스터 배포 계속

Azure Stack HCI 버전 23H2 배포의 단계에 따라 Azure Stack HCI 클러스터의 배포를 계속합니다.

사용 가능한 GPU 사용 VM SKU 목록 가져오기

Azure Stack HCI 클러스터 배포가 완료되면 다음 CLI 명령을 실행하여 배포에서 사용 가능한 VM SKU를 표시할 수 있습니다. GPU 드라이버가 올바르게 설치되면 해당 GPU VM SKU가 나열됩니다.

az aksarc vmsize list --custom-location <custom location ID> -g <resource group name>

GPU 사용 노드 풀을 사용하여 새 워크로드 클러스터 만들기

현재 Linux 노드 풀에서만 GPU 사용 노드 풀을 사용할 수 있습니다. 새 Kubernetes 클러스터를 만들려면 다음을 수행합니다.

az aksarc create -n <aks cluster name> -g <resource group name> --custom-location <custom location ID> --vnet-ids <vnet ID>

다음 예제에서는 Standard_NC4_A2 VM SKU가 있는 2개의 GPU 사용(NVDIA A2) 노드가 있는 노드 풀을 추가합니다.

az aksarc nodepool add --cluster-name <aks cluster name> -n <node pool name> -g <resource group name> --node-count 2 --node-vm-size Standard_NC4_A2 --os-type Linux

GPU를 예약할 수 있는지 확인

GPU 노드 풀을 만든 상태에서 Kubernetes에서 GPU를 예약할 수 있는지 확인합니다. 먼저, kubectl get nodes 명령을 사용하여 클러스터의 노드를 나열합니다.

kubectl get nodes
NAME             STATUS  ROLES                 AGE   VERSION
moc-l9qz36vtxzj  Ready   control-plane,master  6m14s  v1.22.6
moc-lhbkqoncefu  Ready   <none>                3m19s  v1.22.6
moc-li87udi8l9s  Ready   <none>                3m5s  v1.22.6

이제 kubectl describe 노드 명령을 사용하여 GPU를 예약할 수 있음을 확인합니다. 용량 섹션에서 GPU는 nvidia.com/gpu: 1로 표시됩니다.

kubectl describe <node> | findstr "gpu" 

출력은 작업자 노드의 GPU를 표시하고 다음과 같이 표시됩니다.

Capacity: 
  cpu:                4 
  ephemeral-storage:  103110508Ki 
  hugepages-1Gi:      0 
  hugepages-2Mi:      0 
  memory:             7865020Ki 
  nvidia.com/gpu:     1 
  pods:               110

GPU 지원 워크로드 실행

이전 단계를 완료한 후 테스트를 위해 새 YAML 파일을 만듭니다. 예를 들어 gpupod.yaml입니다. 다음 YAML을 복사하여 gpupod.yaml이라는 새 파일에 붙여넣은 다음 저장합니다.

apiVersion: v1
kind: Pod
metadata:
  name: cuda-vector-add
spec:
  restartPolicy: OnFailure
  containers:
  - name: cuda-vector-add
    image: "k8s.gcr.io/cuda-vector-add:v0.1"
    resources:
      limits:
        nvidia.com/gpu: 1

다음 명령을 실행하여 샘플 애플리케이션을 배포합니다.

kubectl apply -f gpupod.yaml

Pod가 시작되고 실행이 완료되었으며 GPU가 할당되었는지 확인합니다.

kubectl describe pod cuda-vector-add | findstr 'gpu'

이전 명령은 할당된 하나의 GPU를 표시해야 합니다.

nvidia.com/gpu: 1
nvidia.com/gpu: 1

Pod의 로그 파일을 확인하여 테스트가 통과되었는지 확인합니다.

kubectl logs cuda-vector-add

다음은 이전 명령의 출력 예제입니다.

[Vector addition of 50000 elements]
Copy input data from the host memory to the CUDA device
CUDA kernel launch with 196 blocks of 256 threads
Copy output data from the CUDA device to the host memory
Test PASSED
Done

"CUDA 드라이버 버전이 CUDA 런타임 버전에 충분하지 않음"과 같이 드라이버를 호출할 때 버전 불일치 오류가 발생하는 경우 NVIDIA 드라이버 매트릭스 호환성 차트를 검토합니다.

FAQ

GPU 사용 노드 풀을 업그레이드하는 동안 어떻게 됩니까?

GPU 사용 노드 풀 업그레이드는 일반 노드 풀에 사용되는 것과 동일한 롤링 업그레이드 패턴을 따릅니다. 새 VM의 GPU 사용 노드 풀이 물리적 호스트 머신에서 성공적으로 생성되려면 디바이스 할당에 사용할 수 있는 물리적 GPU가 하나 이상 필요합니다. 이 가용성을 통해 Kubernetes가 이 업그레이드된 노드에서 Pod를 예약할 때 애플리케이션이 계속 실행될 수 있습니다.

업그레이드하기 전에 다음을 수행합니다.

  1. 업그레이드하는 동안 가동 중지 시간을 계획합니다.
  2. Standard_NK6 실행하는 경우 물리적 호스트당 GPU 1개 또는 Standard_NK12실행하는 경우 2개의 추가 GPU가 있습니다. 전체 용량으로 실행 중이고 추가 GPU가 없는 경우 업그레이드 전에 노드 풀을 단일 노드로 축소한 다음 업그레이드가 성공한 후 스케일 업하는 것이 좋습니다.

업그레이드하는 동안 물리적 컴퓨터에 추가 물리적 GPU가 없으면 어떻게 됩니까?

롤링 업그레이드를 용이하게 하기 위해 추가 GPU 리소스가 없는 클러스터에서 업그레이드가 트리거되면 GPU를 사용할 수 있게 될 때까지 업그레이드 프로세스가 중단됩니다. 전체 용량으로 실행하고 추가 GPU가 없는 경우 업그레이드 전에 노드 풀을 단일 노드로 축소한 다음 업그레이드가 성공한 후 스케일 업하는 것이 좋습니다.

다음 단계