Utwórz pulę węzłów GPU z wieloma wystąpieniami z pojedynczą strategią w Azure Kubernetes Service (AKS)

Niektóre procesory GPU FIRMY NVIDIA można podzielić na maksymalnie siedem niezależnych wystąpień. Każda instancja ma własny wieloprocesor przesyłania strumieniowego (SM), który wykonuje instrukcje równolegle, oraz pamięć GPU. Aby uzyskać więcej informacji na temat partycjonowania procesora GPU, zobacz NVIDIA MIG.

Użyj strategii single na wieloinstancyjnym procesorze GPU (MIG) w klastrze usługi AKS, aby uruchamiać obciążenia na partycjach GPU o jednolitych rozmiarach. Każde obciążenie żąda nvidia.com/gpu, gdzie jedna jednostka reprezentuje jedną partycję, a nie cały fizyczny procesor GPU. Usługa AKS instaluje i konfiguruje sterownik NVIDIA i wtyczkę urządzenia dla tej ścieżki. Aby uzyskać informacje na temat wyboru strategii i nazewnictwa zasobów, zobacz Strategie wieloinstancyjnego procesora GPU w usłudze AKS. Aby utworzyć partycje o różnych rozmiarach, zobacz Konfigurowanie strategii mieszanego MIG.

W tym artykule opisano, jak ustawić strategię single z pulą węzłów MIG przy użyciu zgodnego rozmiaru maszyny wirtualnej w klastrze Azure Kubernetes Service (AKS).

Ważne

Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi i wymagają zapisania się. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi AKS są częściowo objęte pomocą techniczną dla klientów, świadczoną w miarę możliwości. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego. Aby uzyskać więcej informacji, zobacz następujące artykuły pomocy technicznej:

Limitations

  • Pule węzłów z jednostkami SKU systemu operacyjnego AzureContainerLinux i Windows nie są obecnie obsługiwane w ramach tej funkcji.
  • Nie można zmienić konfiguracji profilu po utworzeniu puli węzłów MIG. Utwórz pulę zastępczą, aby zmienić układ lub przestać używać MIG. Nie próbuj wyłączać MIG, aktualizując strategię na None.

Przed rozpoczęciem

  • Subskrypcja platformy Azure. Jeśli go nie masz, utwórz bezpłatne konto Azure.
  • Zainstaluj Azure CLI wersję 2.85.0 lub nowszą oraz aks-preview wersję 22.0.0b15 lub nowszą. Uruchom polecenie az --version , aby sprawdzić wersję Azure CLI.
  • Obsługiwany rozmiar maszyny wirtualnej z procesorem GPU z obsługą MIG dostępny w wybranym regionie usługi AKS. Upewnij się, że masz wystarczający limit przydziału regionalnych procesorów wirtualnych i procesorów wirtualnych z rodziny GPU dla rozmiaru maszyny wirtualnej i liczby węzłów, które planujesz wdrożyć.
  • Upewnij się, że istniejąca wtyczka urządzenia NVIDIA zarządzana samodzielnie przez użytkownika lub operator GPU nie zarządza również węzłami nowej puli węzłów MIG.

Wybierz jednolity profil GPU

Określ dokładnie jeden profil dla Single, aby usługa AKS mogła utworzyć jednolity układ partycji. W poniższej tabeli wymieniono profile karty GPU NVIDIA A100 80 GB. Liczby dotyczą każdego fizycznego układu GPU, a nie węzła. Standard_NC24ads_A100_v4 ma jeden procesor GPU A100 80 GB, więc MIG3g daje dwie partycje w tym typie maszyny wirtualnej.

Argument profilu Partition Udział obliczeń Udział pamięci Partycje na GPU
MIG1g 1g.10gb 1/7 1/8 7
MIG2g 2g.20gb 2/7 2/8 3
MIG3g 3g.40gb 3/7 4/8 2
MIG4g 4g.40gb 4.07 4/8 1
MIG7g 7g.80gb 7/7 8/8 1

Pamięć GPU na profil różni się w zależności od modelu procesora graficznego NVIDIA. Nie należy stosować rozmiarów pamięci ani liczby węzłów z tej tabeli do innej jednostki SKU bez potwierdzenia konfiguracji procesora GPU.

Ustawianie zmiennych środowiskowych i przygotowywanie subskrypcji Azure

export SUBSCRIPTION_ID="<subscription-id>"
export RESOURCE_GROUP="<my-resource-group>"
export CLUSTER_NAME="<my-cluster-name>"
export SINGLE_POOL="migsingle"

Wybierz subskrypcję Azure:

az account set --subscription "$SUBSCRIPTION_ID"

Połącz się z klastrem usługi AKS:

az aks get-credentials \
  --resource-group "$RESOURCE_GROUP" \
  --name "$CLUSTER_NAME"

Rejestrowanie funkcji w wersji zapoznawczej

Zainstaluj lub zaktualizuj wymagane rozszerzenie:

az extension add --name aks-preview --upgrade --yes

Zarejestruj funkcję ManagedGPUExperiencePreview:

az feature register \
  --namespace Microsoft.ContainerService \
  --name ManagedGPUExperiencePreview

Zarejestruj MixedMIGStrategyPreview funkcję:

az feature register \
  --namespace Microsoft.ContainerService \
  --name MixedMIGStrategyPreview

Sprawdź każdą rejestrację:

az feature show \
  --namespace Microsoft.ContainerService \
  --name ManagedGPUExperiencePreview \
  --query properties.state --output tsv
az feature show \
  --namespace Microsoft.ContainerService \
  --name MixedMIGStrategyPreview \
  --query properties.state --output tsv

Gdy oba zwrócą Registered, odśwież rejestrację dostawcy:

az provider register --namespace Microsoft.ContainerService

Włącz strategię single MIG w nowej puli węzłów

Aby użyć domyślnej jednostki SKU systemu operacyjnego, utwórz pulę węzłów bez określania jednostki SKU systemu operacyjnego. Pula węzłów jest skonfigurowana dla domyślnego systemu operacyjnego na podstawie wersji rozwiązania Kubernetes klastra. Utwórz jednolitą pulę z dokładnie jednym profilem MIG --enable-managed-gpu=true:

az aks nodepool add \
  --resource-group "$RESOURCE_GROUP" \
  --cluster-name "$CLUSTER_NAME" \
  --name "$SINGLE_POOL" \
  --node-vm-size Standard_NC24ads_A100_v4 \
  --enable-managed-gpu=true \
  --gpu-mig-strategy Single \
  --gpu-mig-profiles MIG3g \
  --node-count 1

Weryfikacja konfiguracji i pojemności partycji GPU

Sprawdź ustawienia zarządzanych procesorów GPU, listę profilów i obraz węzła usługi AKS:

az aks nodepool show \
  --resource-group "$RESOURCE_GROUP" \
  --cluster-name "$CLUSTER_NAME" \
  --name "$SINGLE_POOL" \
  --query "{state:provisioningState,image:nodeImageVersion,gpu:gpuProfile.nvidia}" \
  --output json

W danych wyjściowych sprawdź następujące wartości. Wartości procesora GPU są wyświetlane pod kluczem gpu .

Pole wyjściowe Oczekiwana wartość
state Succeeded
gpu.managementMode Managed
gpu.driverMode DevicePlugin
gpu.migStrategy Single
gpu.migProfiles Tylko określony profil (MIG3g w tym przykładzie)
image Wersja obrazu VHD węzła 202609.01.0 lub nowsza, która jest wymagana dla --gpu-mig-profiles

Poczekaj, aż węzły puli staną się Gotowe.

kubectl wait --for=condition=Ready node \
  -l agentpool="$SINGLE_POOL" --timeout=600s

Sprawdź wszystkie węzły w puli węzłów:

kubectl describe nodes -l agentpool="$SINGLE_POOL"

W przypadku jednego Standard_NC24ads_A100_v4 węzła z profilem MIG3g (jeden procesor GPU A100 80 GB, który daje dwie partycje), Allocatable sekcja powinna obejmować:

Allocatable:
  nvidia.com/gpu:  2

Każda jednostka ma pojemność jednej 3g.40gb partycji MIG.

Uruchamianie obciążenia na jednej partycji MIG

Utwórz single-strategy-example.yaml za pomocą następującego manifestu. Zaktualizuj selektor, jeśli zmieniono nazwę puli węzłów.

apiVersion: v1
kind: Pod
metadata:
  name: nvidia-single
spec:
  restartPolicy: Never
  nodeSelector:
    agentpool: migsingle
  containers:
    - name: gpu-test
      image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu
      command: ["nvidia-smi"]
      resources:
        limits:
          nvidia.com/gpu: "1"

Selektor ma znaczenie, ponieważ pula z pełnymi GPU może również anonsować nvidia.com/gpu. Platforma Kubernetes traktuje pominięte żądanie jako równe rozszerzonemu limitowi zasobów. W przypadku ustawienia obu użyj równych wartości liczb całkowitych.

Wdróż zasobnik:

kubectl apply -f single-strategy-example.yaml

Poczekaj na pomyślne zakończenie:

kubectl wait --for=jsonpath='{.status.phase}'=Succeeded \
  pod/nvidia-single --timeout=300s

Odczytaj informacje o urządzeniu:

kubectl logs nvidia-single

Upewnij się, że nvidia-smi działa bez błędów i zgłasza przypisane urządzenie MIG. Aby jawnie sprawdzić listę urządzeń, zmień przykładowe polecenie na ["nvidia-smi", "-L"], usuń ukończony zasobnik i ponownie zastosuj manifest. Powtórz oczekiwanie na ukończenie i sprawdzanie dziennika. W programie Standard_NC24ads_A100_v4 i przy użyciu profilu MIG3g w dziennikach powinno być widoczne jedno przypisane urządzenie MIG 3g.40gb.

Poznaj walidację i zgodność istniejących funkcji

Porównanie sposobów konfigurowania strategii single MIG

Funkcja --gpu-instance-profile pozostaje dostępna do skonfigurowania własnej wtyczki urządzenia GPU NVIDIA. Poniższe opcje oddzielają konfigurację układu GPU od zarządzania wtyczką urządzenia.

Ścieżka konfiguracji Ustawienia Azure CLI podczas tworzenia puli Strategia i właściciel wtyczki urządzeń Reprezentacja interfejsu API
Istniejący profil z wtyczką skonfigurowaną samodzielnie --gpu-instance-profile <profile> bez włączania zarządzanego środowiska GPU. Instalujesz i konfigurujesz samodzielnie zarządzaną wtyczkę urządzeń NVIDIA za pomocą polecenia migStrategy=single. gpuInstanceProfile określa jednolity układ. Ustawienie migStrategy samodzielnie zarządzanej wtyczki urządzenia nie jest przechowywane jako nowe ustawienie listy profilów usługi AKS. Użytkownik pozostaje odpowiedzialny za cykl życia samodzielnie zarządzanej wtyczki urządzenia.
Istniejący profil z wtyczką urządzenia zarządzanego --enable-managed-gpu=true --gpu-instance-profile <profile>. Usługa AKS zarządza wtyczką dla jednolitej ścieżki pojedynczej strategii i nie są wymagane żadne oddzielne zmiany wtyczki. Pole --gpu-instance-profile pozostaje obecne. Interfejs API nie syntetyzuje migProfiles ani migStrategy, gdy dostarczono tylko --gpu-instance-profile.
Lista profilów z wtyczką zarządzaną --enable-managed-gpu=true --gpu-mig-strategy Single --gpu-mig-profiles <profile>. Podaj dokładnie jeden profil. Usługa AKS konfiguruje zarządzaną wtyczkę urządzenia NVIDIA dla Single; nie jest wymagana żadna ręczna konfiguracja. gpuProfile.nvidia.migStrategy i gpuProfile.nvidia.migProfiles jawnie opisują konfigurację.

Wszystkie trzy ścieżki pojedynczej strategii udostępniają partycje jako nvidia.com/gpu po skonfigurowaniu w puli węzłów GPU NVIDIA. Sama nazwa zasobu nie identyfikuje rozmiaru partycji lub czy usługa AKS zarządza wtyczką.

Weryfikowanie konfiguracji profili MIG

  • Podaj dokładnie jedną wartość profilu dla elementu Single w --gpu-mig-profiles, a nie powtórzone wpisy do określenia liczby partycji.
  • Nie podawaj również flagi --gpu-instance-profile. Nie można połączyć --gpu-instance-profile i --gpu-mig-profiles w tej samej puli węzłów MIG.

Flaga --gpu-instance-profile pozostaje obsługiwana dla pojedynczej strategii, a usługa AKS nie konwertuje jej automatycznie na --gpu-mig-profiles. Aby zweryfikować nową pulę węzłów utworzoną przy użyciu opcji --gpu-mig-strategy i --gpu-mig-profiles, uruchom polecenie az aks nodepool show i sprawdź gpuProfile.nvidia.migStrategy oraz gpuProfile.nvidia.migProfiles.

Przejście na korzystanie z zarządzanych profili MIG

  1. Sporządź wykaz rozmiaru maszyny wirtualnej bieżącej puli, gpuInstanceProfile, obrazu węzła i zadeklarowanej pojemności partycji. Zanotuj selektory obciążeń, afinitet, tainty, tolerancje i żądania zasobów GPU. Sprawdź, czy istniejąca wtyczka NVIDIA do obsługi urządzeń lub operator GPU obsługuje inne pule węzłów.

  2. Upewnij się, że samodzielnie zarządzana wtyczka urządzenia NVIDIA oraz żaden operator GPU nie obejmują procesem uzgadniania węzłów zastępczej puli MIG. Dostosuj kierowanie na węzły, używając obsługiwanej konfiguracji dla swojej instalacji.

  3. Utwórz zastępczą pulę węzłów MIG z unikatową nazwą. Aby na przykład zachować układ MIG3g na Standard_NC24ads_A100_v4, użyj następującego polecenia. Podstaw obsługiwaną jednostkę SKU i pojedynczy profil zgodny z planem migracji. Nie przekazuj --gpu-instance-profile.

    az aks nodepool add \
      --resource-group "$RESOURCE_GROUP" \
      --cluster-name "$CLUSTER_NAME" \
      --name migreplacement \
      --node-vm-size Standard_NC24ads_A100_v4 \
      --enable-managed-gpu=true \
      --gpu-mig-strategy Single \
      --gpu-mig-profiles MIG3g \
      --node-count 1
    
  4. Uruchom testy konfiguracji, gotowości, wydajności i obciążenia opisane w tym artykule pod kątem migreplacement. Zaktualizuj przykładowy selektor na wartość agentpool: migreplacement. Przed przeniesieniem obciążeń aplikacji potwierdź oczekiwany rozmiar partycji i dostęp do urządzenia.

  5. Stopniowo przenoś obciążenia, aktualizując selektory puli lub koligację oraz wszelkie wymagane tolerancje. Obciążenia korzystające z jednej strategii nadal żądają nvidia.com/gpu. Sprawdź zachowanie aplikacji, przepływność, opóźnienie i użycie pamięci w puli zastępczej.

  6. Po zweryfikowaniu zastąpienia opróżnij lub wycofaj obciążenia w starej puli węzłów i usuń ją. Zachowaj starą pulę dostępną do momentu ukończenia walidacji migracji, jeśli pozwala na to pojemność. Usuń instalację samodzielnie zarządzanej wtyczki urządzenia NVIDIA dopiero po potwierdzeniu, że żadna z pozostałych pul jej nie potrzebuje.

Rozwiązywanie problemów i usuwanie puli węzłów

Rozwiązywanie problemów z harmonogramowaniem i ogłaszaniem partycji

Zasobnik, który żąda większej ilości zasobów nvidia.com/gpu, niż kwalifikujące się węzły mogą zapewnić, pozostaje w stanie oczekiwania ze zdarzeniem planowania informującym o niewystarczających zasobach. Sprawdź jego stan i zdarzenia:

kubectl describe pod nvidia-single

Jeśli węzły nie zgłaszają partycji, sprawdź warunki węzła, ustawienia zarządzane oraz wybrany obraz i profil. Nie instaluj drugiej wtyczki ani nie poprawiaj składników zarządzanych przez usługę AKS jako obejścia.

Podczas tworzenia puli węzłów mogą wystąpić następujące błędy:

Kod błędu Cause Resolution
MIGNotSupportedForVMSize Rozmiar maszyny wirtualnej nie obsługuje MIG. Użyj obsługiwanego rozmiaru maszyny wirtualnej GPU z obsługą technologii MIG.
InvalidOrNoneMIGProfile Profil jest nieprawidłowy lub określono wartość None. Określ dokładnie jeden prawidłowy profil MIG dla rozmiaru maszyny wirtualnej.
MIGProfilesNodeImageNotSupported Obraz węzła usługi AKS jest starszy niż minimalna obsługiwana wersja. Użyj wersji obrazu węzła 202609.01.0 lub nowszej.

Azure CLI może wyświetlać BadRequest jako kod najwyższego poziomu, więc przeczytaj również komunikat weryfikacji.

Usuwanie przykładowego zasobnika i puli węzłów MIG

Usuń przykładowy pod:

kubectl delete pod nvidia-single --ignore-not-found=true

Przed usunięciem puli węzłów, która uruchamia inne obciążenia, utwórz pojemność zastępczą, zmigruj obciążenia i zweryfikuj kondycję aplikacji. Następnie usuń pulę węzłów:

az aks nodepool delete \
  --resource-group "$RESOURCE_GROUP" \
  --cluster-name "$CLUSTER_NAME" \
  --name "$SINGLE_POOL"

Sprawdź, czy pula węzłów MIG została usunięta:

az aks nodepool list \
  --resource-group "$RESOURCE_GROUP" \
  --cluster-name "$CLUSTER_NAME" \
  --query "[?name=='$SINGLE_POOL'].name" --output json

Dane wyjściowe powinny mieć wartość []. Upewnij się, że żadne węzły kubernetes nie pozostają dla puli:

kubectl get nodes -l agentpool="$SINGLE_POOL"

Następne kroki