Korzystanie z procesorów GPU na potrzeby obciążeń intensywnie korzystających z obliczeń
Dotyczy: usługa AKS w usłudze Azure Stack HCI 22H2, 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 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.
Zanim rozpoczniesz
Jeśli aktualizujesz usługę AKS z wersji zapoznawczej starszej niż październik 2022, na której uruchomiono pule węzłów z obsługą procesora GPU, przed rozpoczęciem upewnij się, że wszystkie klastry obciążeń z uruchomionymi procesorami GPU są usuwane. Wykonaj kroki opisane w tej sekcji.
Krok 1. Odinstalowanie sterownika hosta firmy Nvidia
Na każdej maszynie hosta przejdź do Panel sterowania > Dodaj lub Usuń programy, odinstaluj sterownik hosta 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 | findstr /i /c:"3d video"
Urządzenia gpu powinny być wyświetlane w stanie błędu, jak pokazano w poniższych przykładowych danych wyjściowych:
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 2. Odinstalowywanie sterownika hosta z hosta
Po odinstalowaniu sterownika hosta fizyczny procesor GPU przechodzi w stan błędu. Należy odinstalować wszystkie urządzenia z procesorem GPU z hosta.
Dla każdego urządzenia gpu (3D Video Controller) 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 poprzednich danych wyjściowych 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 Unknown
stanie:
Get-PnpDevice | select status, class, friendlyname, instanceid | findstr /i /c:"3d video"
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 3. 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, kliknij prawym przyciskiem myszy plik nvidia_azure_stack_T4_base.inf i wybierz pozycję Zainstaluj. Sprawdź, czy masz prawidłowy sterownik; Usługa AKS obsługuje obecnie tylko procesor GPU NVIDIA Tesla T4.
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_T4_base.inf /install
pnputil /scan-devices
Po zainstalowaniu sterownika ograniczania ryzyka procesory GPU są wyświetlane w stanie OK w obszarze Nvidia T4_base — Odinstaluj:
Get-PnpDevice | select status, class, friendlyname, instanceid | findstr /i /c:"nvidia"
OK Nvidia T4_base - Dismounted PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000
OK Nvidia T4_base - Dismounted PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000
Krok 4. Powtórz kroki od 1 do 3
Powtórz kroki od 1 do 3 dla każdego węzła w klastrze trybu failover.
Ważne
Maszyny wirtualne z obsługą procesora GPU nie są dodawane do klastra trybu failover w systemie Windows Server 2019, Windows Server 2022 lub Azure Stack HCI.
Instalowanie lub aktualizowanie usługi AKS
Zobacz przewodnik Szybki start usługi AKS przy użyciu programu PowerShell lub Windows Admin Center, aby zainstalować lub zaktualizować usługę AKS włączoną przez usługę Arc.
Twórca nowy klaster 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.
New-AksHciCluster -Name "gpucluster" -nodePoolName "gpunodepool" -nodeCount 2 -osType linux -nodeVmSize Standard_NK6
Po zainstalowaniu klastra obciążenia uruchom następujące polecenie, aby uzyskać konfigurację Kubeconfig:
Get-AksHciCredential -Name gpucluster
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:
nvidia.com/gpu.compute.major=7
nvidia.com/gpu.compute.minor=5
nvidia.com/gpu.count=1
nvidia.com/gpu.family=turing
nvidia.com/gpu.machine=Virtual-Machine
nvidia.com/gpu.memory=16384
nvidia.com/gpu.product=Tesla-T4
Annotations: cluster.x-k8s.io/cluster-name: gpucluster
cluster.x-k8s.io/machine: gpunodepool-md-58d9b96dd9-vsdbl
cluster.x-k8s.io/owner-name: gpunodepool-md-58d9b96dd9
nvidia.com/gpu: 1
nvidia.com/gpu: 1
ProviderID: moc://gpunodepool-97d9f5667-49lt4
kube-system gpu-feature-discovery-gd62h 0 (0%) 0 (0%) 0 (0%) 0 (0%) 7m1s
nvidia.com/gpu 0 0
Uruchamianie obciążenia z obsługą procesora GPU
Po wykonaniu poprzednich kroków utwórz nowy plik YAML do 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, został uruchomiony, a procesor GPU został 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ź 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ę dzieje 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 obsługą procesora GPU na nowej maszynie wirtualnej zostały pomyślnie utworzone na maszynie hosta fizycznego, wymaga ona udostępnienia co najmniej jednego fizycznego procesora GPU w celu pomyślnego przypisania urządzenia. Ta dostępność zapewnia, że aplikacje mogą nadal działać, gdy platforma Kubernetes planuje zasobniki w tym uaktualnionym węźle.
Przed uaktualnieniem:
- Zaplanuj przestój podczas uaktualniania.
- Jeśli używasz Standard_NK6 lub 2 dodatkowych procesorów GPU na hosta fizycznego, masz jeden dodatkowy procesor GPU na hosta fizycznego, jeśli używasz Standard_NK12. Jeśli korzystasz z pełnej pojemności 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 nie mam dodatkowych fizycznych procesorów GPU na mojej maszynie fizycznej podczas uaktualniania?
Jeśli uaktualnienie jest wyzwalane 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 korzystasz z pełnej pojemności 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
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla