Używanie procesorów GPU na potrzeby obciążeń intensywnie korzystających z obliczeń (AKS w usłudze Azure Stack HCI 23H2)

Dotyczy: Azure Stack HCI, wersja 23H2

Uwaga

Aby uzyskać informacje o procesorach GPU w usłudze AKS w usłudze Azure Stack HCI 22H2, zobacz Use GPU (HCI 22H2)( Używanie procesorów GPU (HCI 22H2).

Jednostki przetwarzania graficznego (GPU) są używane do obciążeń intensywnie korzystających z obliczeń, takich jak uczenie maszynowe, uczenie głębokie i inne. W tym artykule opisano sposób używania procesorów GPU na potrzeby obciążeń intensywnie korzystających z obliczeń w usłudze AKS włączonej przez usługę Azure Arc.

Obsługiwane modele procesora GPU

Następujące modele procesora GPU są obsługiwane przez usługę AKS w usłudze Azure Stack HCI 23H2:

Producent Model procesora GPU Obsługiwana wersja
Nvidia A2 2311.2
Nvidia A16 2402.0

Obsługiwane rozmiary maszyn wirtualnych

Następujące rozmiary maszyn wirtualnych dla poszczególnych modeli procesora GPU są obsługiwane przez usługę AKS w usłudze Azure Stack HCI 23H2.

Jednostka SKU NC2 A2 jest obsługiwana przez jednostki SKU NC2 A2

Rozmiar maszyny wirtualnej Procesory GPU Pamięć procesora GPU: GiB Procesor wirtualny Pamięć: 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

ProcesorY NVIDIA A16 są obsługiwane przez jednostki SKU NC2 A16

Rozmiar maszyny wirtualnej Procesory GPU Pamięć procesora GPU: GiB Procesor wirtualny Pamięć: 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

Zanim rozpoczniesz

Aby użyć procesorów GPU w usłudze AKS Arc, przed rozpoczęciem wdrażania klastra upewnij się, że zainstalowano niezbędne sterowniki procesora GPU. Wykonaj kroki opisane w tej sekcji.

Krok 1. Instalowanie systemu operacyjnego

Zainstaluj rozwiązanie Azure Stack HCI w wersji 23H2 lokalnie na każdym serwerze w klastrze usługi Azure Stack HCI.

Krok 2. Pobieranie i instalowanie sterownika ograniczania ryzyka firmy NVIDIA

Oprogramowanie może zawierać składniki opracowane i należące do FIRMY NVIDIA Corporation lub jej licencjodawców. Korzystanie z tych składników podlega umowie licencyjnej użytkownika końcowego firmy NVIDIA.

Zapoznaj się z dokumentacją centrum danych FIRMY NVIDIA , aby pobrać sterownik ograniczania ryzyka firmy NVIDIA. Po pobraniu sterownika rozwiń archiwum i zainstaluj sterownik ograniczania ryzyka na każdej maszynie hosta.

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\

Aby zainstalować sterownik ograniczania ryzyka, przejdź do folderu zawierającego wyodrębnione pliki i wybierz plik sterownika procesora GPU na podstawie rzeczywistego typu procesora GPU zainstalowanego na hostach usługi Azure Stack HCI. Jeśli na przykład typem jest procesor GPU A2, kliknij prawym przyciskiem myszy plik nvidia_azure_stack_A2_base.inf , a następnie wybierz pozycję Zainstaluj.

Możesz również zainstalować przy użyciu wiersza polecenia, przechodząc do folderu i uruchamiając następujące polecenia, aby zainstalować sterownik ograniczania ryzyka:

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

Po zainstalowaniu sterownika ograniczania ryzyka procesory GPU są wyświetlane w stanie OK w obszarze Nvidia A2_base — Odinstaluj:

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

Krok 3. Powtórz kroki 1 i 2

Powtórz kroki 1 i 2 dla każdego serwera w klastrze HCI.

Krok 4. Kontynuowanie wdrażania klastra usługi Azure Stack HCI

Kontynuuj wdrażanie klastra usługi Azure Stack HCI, wykonując kroki opisane we wdrożeniu usługi Azure Stack HCI w wersji 23H2.

Pobieranie listy dostępnych jednostek SKU maszyn wirtualnych z obsługą procesora GPU

Po zakończeniu wdrażania klastra usługi Azure Stack HCI można uruchomić następujące polecenie interfejsu wiersza polecenia, aby wyświetlić dostępne jednostki SKU maszyn wirtualnych we wdrożeniu. Jeśli sterowniki procesora GPU są poprawnie zainstalowane, odpowiednie jednostki SKU maszyny wirtualnej z procesorem GPU są wyświetlane:

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

Tworzenie nowego klastra obciążeń z pulą węzłów z obsługą procesora GPU

Obecnie korzystanie z pul węzłów z obsługą procesora GPU jest dostępne tylko dla pul węzłów systemu Linux. Aby utworzyć nowy klaster Kubernetes:

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

W poniższym przykładzie dodano pulę węzłów z 2 węzłami z obsługą procesora GPU (NVDIA A2) z Standard_NC4_A2 sku maszyny wirtualnej:

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

Potwierdź, że możesz zaplanować procesory GPU

Po utworzeniu puli węzłów procesora GPU upewnij się, że możesz zaplanować procesory GPU na platformie Kubernetes. Najpierw wyświetl listę węzłów w klastrze przy użyciu polecenia 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

Teraz użyj polecenia kubectl describe node , aby potwierdzić, że można zaplanować procesory GPU. W sekcji Pojemność procesor GPU powinien być wyświetlany jako nvidia.com/gpu: 1.

kubectl describe <node> | findstr "gpu" 

Dane wyjściowe powinny wyświetlać procesory GPU z węzła procesu roboczego i wyglądać mniej więcej tak:

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

Uruchamianie obciążenia z obsługą procesora GPU

Po wykonaniu poprzednich kroków utwórz nowy plik YAML na potrzeby testowania; na przykład gpupod.yaml. Skopiuj i wklej następujący kod YAML do nowego pliku o nazwie gpupod.yaml, a następnie zapisz go:

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

Uruchom następujące polecenie, aby wdrożyć przykładową aplikację:

kubectl apply -f gpupod.yaml

Sprawdź, czy zasobnik został uruchomiony, ukończony, a procesor GPU jest przypisany:

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

Poprzednie polecenie powinno pokazywać jeden przypisany procesor GPU:

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

Sprawdź plik dziennika zasobnika, aby sprawdzić, czy test zakończył się pomyślnie:

kubectl logs cuda-vector-add

Poniżej przedstawiono przykładowe dane wyjściowe z poprzedniego polecenia:

[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

Jeśli podczas wywoływania sterowników wystąpi błąd niezgodności wersji, taki jak "Wersja sterownika CUDA jest niewystarczająca dla wersji środowiska uruchomieniowego CUDA", zapoznaj się z wykresem zgodności macierzy sterowników FIRMY NVIDIA.

Często zadawane pytania

Co się stanie podczas uaktualniania puli węzłów z obsługą procesora GPU?

Uaktualnianie pul węzłów z obsługą procesora GPU jest zgodne z tym samym wzorcem uaktualniania stopniowego, który jest używany dla zwykłych pul węzłów. Aby pule węzłów z włączoną obsługą procesora GPU na nowej maszynie wirtualnej zostały pomyślnie utworzone na fizycznej maszynie hosta, wymaga to udostępnienia co najmniej jednego fizycznego procesora GPU w celu pomyślnego przypisania urządzenia. Ta dostępność gwarantuje, że aplikacje będą mogły nadal działać, gdy platforma Kubernetes planuje zasobniki w tym uaktualnionym węźle.

Przed uaktualnieniem:

  1. Zaplanuj przestój podczas uaktualniania.
  2. Jeśli używasz Standard_NK6 lub 2 dodatkowych procesorów GPU na hosta fizycznego, jeśli używasz Standard_NK12, musisz mieć jeden dodatkowy procesor GPU na host fizyczny. Jeśli masz pełną pojemność i nie masz dodatkowego procesora GPU, zalecamy skalowanie puli węzłów w dół do jednego węzła przed uaktualnieniem, a następnie skalowanie w górę po pomyślnym uaktualnieniu.

Co się stanie, jeśli podczas uaktualniania nie mam dodatkowych fizycznych procesorów GPU na mojej maszynie fizycznej?

Jeśli uaktualnienie zostanie wyzwolone w klastrze bez dodatkowych zasobów procesora GPU w celu ułatwienia uaktualnienia stopniowego, proces uaktualniania zawiesza się do momentu udostępnienia procesora GPU. Jeśli uruchamiasz pełną pojemność i nie masz dodatkowego procesora GPU, zalecamy skalowanie puli węzłów w dół do jednego węzła przed uaktualnieniem, a następnie skalowanie w górę po pomyślnym uaktualnieniu.

Następne kroki