Udostępnij za pośrednictwem


Wykorzystaj procesory GPU dla obliczeniowo intensywnych obciążeń w usłudze AKS na platformie Azure

Dotyczy: AKS w usłudze Azure Local

Uwaga

Aby uzyskać informacje o procesorach GPU w usłudze AKS w systemie Windows Server, zobacz Używanie procesorów GPU w usłudze AKS w systemie Windows Server.

Jednostki przetwarzania graficznego (GPU) są używane do obciążeń intensywnie korzystających z obliczeń, takich jak uczenie maszynowe, uczenie głębokie i nie tylko. W tym artykule opisano, jak używać procesorów GPU dla obciążeń wymagających intensywnych obliczeń w usłudze AKS obsługiwanej przez Azure Arc.

Obsługiwane modele procesora GPU

Następujące modele GPU są obsługiwane przez AKS na Azure Local. Należy pamiętać, że procesory GPU są obsługiwane tylko w pulach węzłów systemu operacyjnego Linux. Procesory GPU nie są obsługiwane w pulach węzłów systemu operacyjnego Windows.

Producent Model procesora GPU Obsługiwana wersja
NVidia A2 2311.2
NVidia A16 2402.0
NVidia T4 2408.0

Obsługiwane rozmiary maszyn wirtualnych GPU

Następujące rozmiary maszyn wirtualnych dla każdego modelu GPU są obsługiwane przez AKS na Azure Local.

Nvidia T4 jest obsługiwana przez SKU NK T4

Rozmiar maszyny wirtualnej Karty graficzne Pamięć procesora GPU: GiB vCPU (procesor wirtualny) Pamięć: GiB
Standard_NK6 1 8 6 12
Standard_NK12 2 16 12 24

Nvidia A2 jest wspierana przez SKU NC2 A2

Rozmiar maszyny wirtualnej Karty graficzne Pamięć procesora GPU: GiB vCPU (procesor wirtualny) Pamięć: GiB
Standard_NC4_A2 1 16 4 8
Standard_NC8_A2 1 16 8 16
Standard_NC16_A2 2 32 16 64
Standard_NC32_A2 2 32 32 128

Nvidia A16 jest wspierana przez SKU NC2 A16

Rozmiar maszyny wirtualnej Karty graficzne Pamięć procesora GPU: GiB vCPU (procesor wirtualny) Pamięć: GiB
Standard_NC4_A16 1 16 4 8
Standard_NC8_A16 1 16 8 16
Standard_NC16_A16 2 32 16 64
Standard_NC32_A16 2 32 32 128

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 lokalny system operacyjny Platformy Azure na każdym serwerze w klastrze lokalnym platformy Azure.

Krok 2. Odinstalowanie sterownika hosta NVIDIA

Na każdej maszynie hosta przejdź do Panel sterowania > Dodaj lub Usuń programy, odinstaluj sterownik hosta FIRMY NVIDIA, a następnie uruchom ponownie maszynę. Po ponownym uruchomieniu maszyny upewnij się, że sterownik został pomyślnie odinstalowany. Otwórz terminal programu PowerShell z podwyższonym poziomem uprawnień i uruchom następujące polecenie:

Get-PnpDevice  | select status, class, friendlyname, instanceid | where {$_.friendlyname -eq "3D Video Controller"}

Urządzenia GPU powinny być wyświetlane w stanie błędu, jak pokazano w poniższym przykładowym wyjściu.

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 

Krok 3: Odmontowanie sterownika hosta z hosta

Po odinstalowaniu sterownika hosta fizyczny procesor GPU przechodzi w stan błędu. Należy odinstalować wszystkie urządzenia gpu z hosta.

Dla każdego urządzenia z procesorem GPU (kontroler wideo 3D) uruchom następujące polecenia w programie PowerShell. Skopiuj identyfikator wystąpienia, na przykład PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000 z wyników poprzedniego polecenia.

$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

Aby potwierdzić, że procesory GPU zostały poprawnie odinstalowane z hosta, uruchom następujące polecenie. Należy umieścić procesory GPU w stanie 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 

Krok 4. 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. Możesz wykonać czynności opisane w tym skrypcie programu PowerShell, aby pobrać sterownik ograniczania ryzyka i wyodrębnić go:

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 lokalnych platformy Azure. 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 polecenie Zainstaluj.

Możesz również zainstalować za pomocą 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 ograniczającego, procesory GPU są wyświetlane w stanie OK w obszarze Nvidia A2_base - Odmontowane:

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

Krok 5. Powtórz kroki od 1 do 4

Powtórz kroki od 1 do 4 dla każdego serwera w klastrze lokalnym platformy Azure.

Krok 6. Kontynuowanie wdrażania klastra lokalnego platformy Azure

Kontynuuj wdrażanie klastra lokalnego platformy Azure, wykonując kroki opisane we wdrożeniu lokalnym platformy Azure.

Lista dostępnych jednostek SKU maszyn wirtualnych z obsługą GPU

Po zakończeniu wdrażania klastra lokalnego platformy Azure możesz uruchomić następujące polecenie interfejsu wiersza polecenia, aby wyświetlić dostępne jednostki SKU maszyn wirtualnych we wdrożeniu. Jeśli sterowniki GPU są poprawnie zainstalowane, zostaną wyświetlone odpowiednie SKU maszyn wirtualnych GPU:

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

Utwórz nowy klaster roboczy z pulą węzłów z obsługą 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 włączoną obsługą GPU (NVDIA A2) i SKU maszyny wirtualnej Standard_NC4_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

Potwierdź, że możesz skonfigurować harmonogram dla GPU

Po utworzeniu puli węzłów GPU upewnij się, że można przydzielić 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 zadania mogą być przypisywane do procesorów GPU. W sekcji Pojemność procesor GPU powinien być wyświetlany jako nvidia.com/gpu: 1.

kubectl describe <node> | findstr "gpu" 

Wyjście powinno wyświetlać procesory GPU z węzła 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

Uruchom obciążenie obsługiwane przez 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 pod został uruchomiony, zakończył działanie, a procesor GPU jest przypisany.

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

Poprzednie polecenie powinno wyświetlić jeden przypisany procesor GPU:

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

Sprawdź dziennik podu, aby zobaczyć, 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 tabelą zgodności sterowników NVIDIA.

Często zadawane pytania

Co się dzieje podczas uaktualniania puli węzłów obsługujących GPU?

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

Przed uaktualnieniem:

  1. Zaplanuj przestój podczas uaktualniania.
  2. Na każdym hoście fizycznym miej jeden dodatkowy procesor GPU, jeśli używasz Standard_NK6, lub dwa dodatkowe procesory GPU, jeśli używasz Standard_NK12. Jeśli działasz na pełnej mocy i nie masz dodatkowego procesora GPU, zalecamy zmniejszenie puli węzłów do jednego węzła przed aktualizacją, a następnie zwiększenie puli po pomyślnym zakończeniu aktualizacji.

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

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 działasz na pełnej wydajności i nie masz dodatkowej karty GPU, zalecamy pomniejszenie puli węzłów do jednego węzła przed aktualizacją, a następnie zwiększenie ich liczby po zakończeniu pomyślnej aktualizacji.

Następne kroki