계산 집약적 워크로드에 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 모델 | 지원되는 버전 |
---|---|---|
NVidia | A2 | 2311.2 |
NVidia | A16 | 2402.0 |
NVidia | T4 | 2408.0 |
지원되는 VM 크기
각 GPU 모델에 대한 다음 VM 크기는 Azure Stack HCI 23H2의 AKS에서 지원됩니다.
Nvidia T4는 NK T4 SKU에서 지원됩니다.
VM 크기 | GPU | GPU 메모리: GiB | vCPU | 메모리: GiB |
---|---|---|---|---|
Standard_NK6 | 1 | 8 | 6 | 12 |
Standard_NK12 | 2 | 16 | 12 | 24 |
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 호스트 드라이버를 제거한 다음 컴퓨터를 다시 부팅합니다. 컴퓨터를 다시 부팅한 후 드라이버가 성공적으로 제거되었는지 확인합니다. 관리자 권한 PowerShell 터미널을 열고 다음 명령을 실행합니다.
Get-PnpDevice | select status, class, friendlyname, instanceid | where {$_.friendlyname -eq "3D Video Controller"}
다음 예제 출력과 같이 GPU 디바이스가 오류 상태로 표시되는 것을 볼 수 있습니다.
Error 3D Video Controller PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000
Error 3D Video Controller PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000
3단계: 호스트에서 호스트 드라이버 분리
호스트 드라이버를 제거하면 실제 GPU가 오류 상태로 전환됩니다. 호스트에서 모든 GPU 디바이스를 분리해야 합니다.
각 GPU(3D 비디오 컨트롤러) 디바이스에 대해 PowerShell에서 다음 명령을 실행합니다. 인스턴스 ID를 복사합니다. 예를 들어 PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000
이전 명령 출력에서 다음을 수행합니다.
$id1 = "<Copy and paste GPU instance id into this string>"
$lp1 = (Get-PnpDeviceProperty -KeyName DEVPKEY_Device_LocationPaths -InstanceId $id1).Data[0]
Disable-PnpDevice -InstanceId $id1 -Confirm:$false
Dismount-VMHostAssignableDevice -LocationPath $lp1 -Force
GPU가 호스트에서 올바르게 분리되었는지 확인하려면 다음 명령을 실행합니다. GPU를 상태에 배치해야 합니다.Unknown
Get-PnpDevice | select status, class, friendlyname, instanceid | where {$_.friendlyname -eq "3D Video Controller"}
Unknown 3D Video Controller PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000
Unknown 3D Video Controller PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000
4단계: NVIDIA 완화 드라이버 다운로드 및 설치
이 소프트웨어에는 NVIDIA Corporation 또는 해당 라이센서가 개발하고 소유한 구성 요소가 포함될 수 있습니다. 이러한 구성 요소의 사용은 NVIDIA 최종 사용자 라이선스 계약의 적용을 받습니다.
NVIDIA 완화 드라이버를 다운로드하려면 NVIDIA 데이터 센터 설명서를 참조하세요. 드라이버를 다운로드한 후 보관 파일을 확장하고 각 호스트 컴퓨터에 완화 드라이버를 설치합니다. 이 PowerShell 스크립트에 따라 완화 드라이버를 다운로드하고 추출할 수 있습니다.
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 | where {$_.friendlyname -match "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
5단계: 1~4단계 반복
HCI 클러스터의 각 서버에 대해 1~4단계를 반복합니다.
6단계: 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 사용 노드 풀을 사용하여 새 워크로드 클러스터 만들기
현재 GPU 사용 노드 풀을 사용하는 것은 Linux 노드 풀에만 사용할 수 있습니다. 새 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를 예약할 때 애플리케이션이 계속 실행될 수 있습니다.
업그레이드하기 전에 다음을 수행합니다.
- 업그레이드하는 동안 가동 중지 시간을 계획합니다.
- Standard_NK6 실행하는 경우 물리적 호스트당 GPU 1개 또는 Standard_NK12 실행하는 경우 2개의 추가 GPU가 있어야 합니다. 전체 용량으로 실행 중이고 추가 GPU가 없는 경우 업그레이드 전에 노드 풀을 단일 노드로 축소한 다음 업그레이드가 성공한 후 스케일 업하는 것이 좋습니다.
업그레이드하는 동안 물리적 컴퓨터에 추가 물리적 GPU가 없으면 어떻게 되나요?
롤링 업그레이드를 용이하게 하기 위해 추가 GPU 리소스 없이 클러스터에서 업그레이드가 트리거되면 GPU를 사용할 수 있게 될 때까지 업그레이드 프로세스가 중단됩니다. 전체 용량에서 실행하고 추가 GPU가 없는 경우 업그레이드 전에 노드 풀을 단일 노드로 축소한 다음 업그레이드가 성공한 후 확장하는 것이 좋습니다.