Udostępnij za pośrednictwem


Używanie procesorów GPU systemu Windows na potrzeby obciążeń intensywnie korzystających z obliczeń w usłudze Azure Kubernetes Service (AKS) (wersja zapoznawcza)

Graficzne jednostki przetwarzania (GPU) są często używane do obciążeń intensywnie korzystających z obliczeń, takich jak obciążenia grafiki i wizualizacji. Usługa AKS obsługuje pule węzłów z obsługą procesora GPU w systemach Windows i Linux w celu uruchamiania obciążeń Platformy Kubernetes intensywnie korzystających z obliczeń.

Ten artykuł ułatwia aprowizację węzłów systemu Windows za pomocą schedulowalnych procesorów GPU w nowych i istniejących klastrach usługi AKS (wersja zapoznawcza).

Obsługiwane maszyny wirtualne z obsługą procesora GPU

Aby wyświetlić obsługiwane maszyny wirtualne z obsługą procesora GPU, zobacz Rozmiary maszyn wirtualnych zoptymalizowanych pod kątem procesora GPU na platformie Azure. W przypadku pul węzłów usługi AKS zalecamy minimalny rozmiar Standard_NC6s_v3. Seria NVv4 (oparta na procesorach GPU AMD) nie jest obsługiwana w usłudze AKS.

Uwaga

Maszyny wirtualne z obsługą procesora GPU zawierają wyspecjalizowany sprzęt z zastrzeżeniem wyższych cen i dostępności regionów. Aby uzyskać więcej informacji, zobacz narzędzie cenowe i dostępność regionów.

Ograniczenia

  • Aktualizowanie istniejącej puli węzłów systemu Windows w celu dodania procesora GPU nie jest obsługiwane.
  • Nieobsługiwane na platformie Kubernetes w wersji 1.28 lub nowszej.

Zanim rozpoczniesz

  • W tym artykule założono, że masz istniejący klaster usługi AKS. Jeśli nie masz klastra, utwórz go przy użyciu interfejsu wiersza polecenia platformy Azure, programu Azure PowerShell lub witryny Azure Portal.
  • Potrzebny jest interfejs wiersza polecenia platformy Azure w wersji 1.0.0b2 lub nowszej i skonfigurowany do używania --skip-gpu-driver-install pola za az aks nodepool add pomocą polecenia . Uruchom polecenie az --version, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.
  • Potrzebny jest interfejs wiersza polecenia platformy Azure w wersji 9.0.0b5 lub nowszej i skonfigurowany do używania --driver-type pola za az aks nodepool add pomocą polecenia . Uruchom polecenie az --version, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.

Pobieranie poświadczeń dla klastra

  • Pobierz poświadczenia dla klastra usługi AKS przy użyciu az aks get-credentials polecenia . Następujące przykładowe polecenie pobiera poświadczenia dla grupy zasobów myAKSCluster w grupie zasobów myResourceGroup :

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    

Używanie procesora GPU systemu Windows z automatyczną instalacją sterowników

Korzystanie z procesorów GPU FIRMY NVIDIA obejmuje instalację różnych składników oprogramowania NVIDIA, takich jak wtyczka urządzenia DirectX dla platformy Kubernetes, instalacja sterownika procesora GPU i nie tylko. Podczas tworzenia puli węzłów systemu Windows z obsługiwaną maszyną wirtualną z obsługą procesora GPU te składniki i odpowiednie sterowniki NVIDIA CUDA lub GRID są instalowane. W przypadku rozmiarów maszyn wirtualnych z serii NC i ND instalowany jest sterownik CUDA. W przypadku rozmiarów maszyn wirtualnych serii NV sterownik GRID jest zainstalowany.

Ważne

Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi. 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. 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:

Instalowanie rozszerzenia interfejsu wiersza polecenia platformy aks-preview Azure

  • Zarejestruj lub zaktualizuj rozszerzenie aks-preview przy użyciu az extension add polecenia lub az extension update .

    # Register the aks-preview extension
    az extension add --name aks-preview
    
    # Update the aks-preview extension
    az extension update --name aks-preview
    

Rejestrowanie flagi WindowsGPUPreview funkcji

  1. Zarejestruj flagę WindowsGPUPreview funkcji przy użyciu az feature register polecenia .

    az feature register --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
    

    Wyświetlenie stanu Zarejestrowane trwa kilka minut.

  2. Sprawdź stan rejestracji przy użyciu az feature show polecenia .

    az feature show --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
    
  3. Gdy stan będzie odzwierciedlał wartość Zarejestrowano, odśwież rejestrację dostawcy zasobów Microsoft.ContainerService przy użyciu az provider register polecenia .

    az provider register --namespace Microsoft.ContainerService
    

Tworzenie puli węzłów z obsługą procesora GPU systemu Windows (wersja zapoznawcza)

Aby utworzyć pulę węzłów z obsługą procesora GPU systemu Windows, należy użyć obsługiwanego rozmiaru maszyny wirtualnej z obsługą procesora GPU i określić wartość os-type jako Windows. Domyślny system Windows os-sku to Windows2022, ale wszystkie opcje systemu Windows os-sku są obsługiwane.

  1. Utwórz pulę węzłów z obsługą procesora GPU systemu Windows przy użyciu az aks nodepool add polecenia .

    az aks nodepool add \
       --resource-group myResourceGroup \
       --cluster-name myAKSCluster \
       --name gpunp \
       --node-count 1 \
       --os-type Windows \
       --kubernetes-version 1.29.0 \
       --node-vm-size Standard_NC6s_v3
    
  2. Sprawdź, czy procesory GPU są możliwe do schedulable.

  3. Po potwierdzeniu, że procesory GPU można schedulable, możesz uruchomić obciążenie procesora GPU.

Określ typ sterownika procesora GPU (wersja zapoznawcza)

Domyślnie usługa AKS określa domyślny typ sterownika procesora GPU dla każdej obsługiwanej maszyny wirtualnej z obsługą procesora GPU. Ponieważ obciążenie i zgodność sterowników są ważne dla działających obciążeń procesora GPU, można określić typ sterownika dla węzła procesora GPU systemu Windows. Ta funkcja nie jest obsługiwana w przypadku pul węzłów procesora GPU systemu Linux.

Podczas tworzenia puli agentów systemu Windows z obsługą procesora GPU można określić typ sterownika procesora GPU przy użyciu flagi --driver-type .

Dostępne opcje:

  • GRID: w przypadku aplikacji wymagających obsługi wirtualizacji.
  • CUDA: zoptymalizowane pod kątem zadań obliczeniowych w obliczeniach naukowych i aplikacjach intensywnie korzystających z danych.

Uwaga

Po ustawieniu flagi --driver-type przyjmujesz odpowiedzialność za zapewnienie zgodności wybranego typu sterownika z określonym rozmiarem maszyny wirtualnej i konfiguracją puli węzłów. Podczas gdy usługa AKS próbuje zweryfikować zgodność, istnieją scenariusze, w których tworzenie puli węzłów może zakończyć się niepowodzeniem z powodu niezgodności między określonym typem sterownika a podstawową maszyną wirtualną lub sprzętem.

Aby utworzyć pulę węzłów z obsługą procesora GPU systemu Windows z określonym typem sterownika procesora GPU, użyj az aks nodepool add polecenia .

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name gpunp \
    --node-count 1 \
    --os-type Windows \
    --kubernetes-version 1.29.0 \
    --node-vm-size Standard_NC6s_v3 \
    --driver-type GRID

Na przykład powyższe polecenie tworzy pulę węzłów z obsługą procesora GPU przy użyciu GRID typu sterownika procesora GPU. Wybranie tego typu sterownika zastępuje domyślny CUDA typ sterownika dla jednostek SKU maszyn wirtualnych serii NC.

Korzystanie z procesora GPU systemu Windows z ręczną instalacją sterowników

Podczas tworzenia puli węzłów systemu Windows z rozmiarami maszyn wirtualnych serii N (GPU firmy NVIDIA) w usłudze AKS sterownik procesora GPU i wtyczka urządzenia Kubernetes DirectX są instalowane automatycznie. Aby obejść tę automatyczną instalację, wykonaj następujące czynności:

  1. Pomiń instalację sterownika procesora GPU (wersja zapoznawcza) przy użyciu polecenia --skip-gpu-driver-install.
  2. Ręczna instalacja wtyczki urządzenia Kubernetes DirectX.

Pomiń instalację sterownika procesora GPU (wersja zapoznawcza)

Usługa AKS ma domyślnie włączoną automatyczną instalację sterownika procesora GPU. W niektórych przypadkach, takich jak instalowanie własnych sterowników, możesz pominąć instalację sterownika procesora GPU.

Ważne

Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi. 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. 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:

  1. Zarejestruj lub zaktualizuj rozszerzenie aks-preview przy użyciu az extension add polecenia lub az extension update .

    # Register the aks-preview extension
    az extension add --name aks-preview
    
    # Update the aks-preview extension
    az extension update --name aks-preview
    
  2. Utwórz pulę węzłów przy użyciu az aks nodepool add polecenia z flagą --skip-gpu-driver-install , aby pominąć automatyczną instalację sterownika procesora GPU.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --os-type windows \
        --os-sku windows2022 \
        --skip-gpu-driver-install
    

Uwaga

Jeśli używany element --node-vm-size nie jest jeszcze dołączony do usługi AKS, nie możesz używać procesorów GPU i --skip-gpu-driver-install nie działa.

Ręczne instalowanie wtyczki urządzenia Kubernetes DirectX

Można wdrożyć zestaw DaemonSet dla wtyczki urządzenia Kubernetes DirectX, która uruchamia zasobnik w każdym węźle, aby zapewnić wymagane sterowniki dla procesorów GPU.

  • Dodaj pulę węzłów do klastra az aks nodepool add przy użyciu polecenia .

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --os-type windows \
        --os-sku windows2022
    

Tworzenie przestrzeni nazw i wdrażanie wtyczki urządzenia Kubernetes DirectX

  1. Utwórz przestrzeń nazw przy użyciu kubectl create namespace polecenia .

    kubectl create namespace gpu-resources
    
  2. Utwórz plik o nazwie k8s-directx-device-plugin.yaml i wklej następujący manifest YAML podany w ramach wtyczki urządzenia NVIDIA dla projektu Kubernetes:

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: nvidia-device-plugin-daemonset
      namespace: gpu-resources
    spec:
      selector:
        matchLabels:
          name: nvidia-device-plugin-ds
      updateStrategy:
        type: RollingUpdate
      template:
        metadata:
          # Mark this pod as a critical add-on; when enabled, the critical add-on scheduler
          # reserves resources for critical add-on pods so that they can be rescheduled after
          # a failure.  This annotation works in tandem with the toleration below.
          annotations:
            scheduler.alpha.kubernetes.io/critical-pod: ""
          labels:
            name: nvidia-device-plugin-ds
        spec:
          tolerations:
          # Allow this pod to be rescheduled while the node is in "critical add-ons only" mode.
          # This, along with the annotation above marks this pod as a critical add-on.
          - key: CriticalAddonsOnly
            operator: Exists
          - key: nvidia.com/gpu
            operator: Exists
            effect: NoSchedule
          - key: "sku"
            operator: "Equal"
            value: "gpu"
            effect: "NoSchedule"
          containers:
          - image: mcr.microsoft.com/oss/nvidia/k8s-device-plugin:v0.14.1
            name: nvidia-device-plugin-ctr
            securityContext:
              allowPrivilegeEscalation: false
              capabilities:
                drop: ["ALL"]
            volumeMounts:
              - name: device-plugin
                mountPath: /var/lib/kubelet/device-plugins
          volumes:
            - name: device-plugin
              hostPath:
                path: /var/lib/kubelet/device-plugins
    
  3. Utwórz element DaemonSet i upewnij się, że wtyczka urządzenia NVIDIA została pomyślnie utworzona przy użyciu kubectl apply polecenia .

    kubectl apply -f nvidia-device-plugin-ds.yaml
    
  4. Teraz, po pomyślnym zainstalowaniu wtyczki urządzenia NVIDIA, możesz sprawdzić, czy procesory GPU można schedulable.

Upewnij się, że jednostki GPU można schedulable

Po utworzeniu klastra upewnij się, że procesory GPU można schedulable na platformie Kubernetes.

  1. Wyświetl listę węzłów w klastrze przy użyciu kubectl get nodes polecenia .

    kubectl get nodes
    

    Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:

    NAME                   STATUS   ROLES   AGE   VERSION
    aks-gpunp-28993262-0   Ready    agent   13m   v1.20.7
    
  2. Upewnij się, że procesory GPU można schedulable przy użyciu kubectl describe node polecenia .

    kubectl describe node aks-gpunp-28993262-0
    

    W sekcji Pojemność procesor GPU powinien mieć wartość microsoft.com/directx: 1. Dane wyjściowe powinny wyglądać podobnie do następujących skróconych przykładowych danych wyjściowych:

    Capacity:
    [...]
     microsoft.com.directx/gpu:                 1
    [...]
    

Monitorowanie użycia procesora GPU przy użyciu usługi Container Insights

Usługa Container Insights z usługą AKS monitoruje następujące metryki użycia procesora GPU:

Nazwa metryki Wymiar metryki (tagi) opis
containerGpuDutyCycle container.azm.ms/clusterId, , container.azm.ms/clusterName, containerName, gpuId, , gpuModelgpuVendor Procent czasu w poprzednim okresie próby (60 sekund), w którym procesor GPU był zajęty/aktywnie przetwarzany dla kontenera. Cykl dyżurów jest liczbą z zakresu od 1 do 100.
containerGpuLimits container.azm.ms/clusterId, , container.azm.ms/clusterNamecontainerName Każdy kontener może określać limity jako co najmniej jeden procesor GPU. Nie można zażądać ani ograniczyć części procesora GPU.
containerGpuRequests container.azm.ms/clusterId, , container.azm.ms/clusterNamecontainerName Każdy kontener może zażądać co najmniej jednego procesora GPU. Nie można zażądać ani ograniczyć części procesora GPU.
containerGpumemoryTotalBytes container.azm.ms/clusterId, , container.azm.ms/clusterName, containerName, gpuId, , gpuModelgpuVendor Ilość pamięci procesora GPU w bajtach dostępnych do użycia dla określonego kontenera.
containerGpumemoryUsedBytes container.azm.ms/clusterId, , container.azm.ms/clusterName, containerName, gpuId, , gpuModelgpuVendor Ilość pamięci procesora GPU w bajtach używanych przez określony kontener.
nodeGpuAllocatable container.azm.ms/clusterId, , container.azm.ms/clusterNamegpuVendor Liczba procesorów GPU w węźle, którego może używać platforma Kubernetes.
nodeGpuCapacity container.azm.ms/clusterId, , container.azm.ms/clusterNamegpuVendor Łączna liczba procesorów GPU w węźle.

Czyszczenie zasobów

  • Usuń skojarzone obiekty Kubernetes utworzone w tym artykule przy użyciu kubectl delete job polecenia .

    kubectl delete jobs windows-gpu-workload
    

Następne kroki