Utwórz pulę węzłów GPU z wieloinstancjami w Azure Kubernetes Service (AKS)

Niektóre procesory GPU FIRMY NVIDIA można podzielić na maksymalnie siedem niezależnych wystąpień. Każde wystąpienie ma własny multiprocesor strumienia (SM), który jest odpowiedzialny za równoległe wykonywanie instrukcji oraz pamięć GPU. Aby uzyskać więcej informacji na temat partycjonowania procesora GPU, zobacz NVIDIA MIG.

W tym artykule poprowadzimy Cię przez proces tworzenia puli węzłów GPU wielowątkowej przy użyciu rozmiaru maszyny wirtualnej zgodnej z MIG w klastrze Azure Kubernetes Service (AKS).

Wymagania wstępne i ograniczenia

  • Konto Azure z aktywną subskrypcją. Jeśli go nie masz, możesz bezpłatnie utworzyć konto.
  • Azure CLI w wersji 2.2.0 lub nowszej zainstalowanej i skonfigurowanej. Uruchom polecenie az --version, aby dowiedzieć się, jaka wersja jest używana. Jeśli musisz zainstalować lub uaktualnić, zobacz Install Azure CLI.
  • Klient wiersza polecenia kubernetes, kubectl, zainstalowany i skonfigurowany. Jeśli używasz Azure Cloud Shell, kubectl jest już zainstalowany. Jeśli chcesz zainstalować ją lokalnie, możesz użyć az aks install-cli polecenia .
  • Program Helm w wersji 3 został zainstalowany i skonfigurowany. Aby uzyskać więcej informacji, zobacz Instalowanie programu Helm.
  • Procesor wieloinstancyjny GPU jest obecnie obsługiwany na maszynach wirtualnych GPU Standard_NC40ads_H100_v5, Standard_ND96isr_H100_v5 i A100 w usłudze AKS.

Profile wystąpień procesora GPU

Profile instancji GPU definiują sposób partycjonowania GPU. W poniższej tabeli przedstawiono dostępny profil instancji GPU dla elementu Standard_ND96asr_v4.

Nazwa profilu Ułamek SM Ułamek pamięci Liczba utworzonych wystąpień
MIG 1g.5gb 1/7 1/8 7
MIG 2g.10gb 2/7 2/8 3
MIG 3G.20GB 3/7 4/8 2
MIG 4g, 20GB 4.07 4/8 1
MIG 7g.40gb 7/7 8/8 1

Na przykład profil MIG 1g.5gb wystąpienia GPU wskazuje, że każde wystąpienie GPU ma 1g SM (multiprocesorów przesyłania strumieniowego) i 5 GB pamięci. W tym przypadku GPU jest podzielony na siedem wystąpień.

Dostępne profile wystąpień procesora GPU dostępne dla tego rozmiaru maszyny wirtualnej obejmują MIG1g, , MIG2gMIG3g, MIG4gi MIG7g.

Ważne

Po utworzeniu puli węzłów nie można zmienić zastosowanego profilu instancji GPU.

Tworzenie klastra AKS

  1. Utwórz grupę zasobów Azure przy użyciu polecenia az group create.

    az group create --name myResourceGroup --location southcentralus
    
  2. Utwórz klaster AKS za pomocą polecenia az aks create.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --generate-ssh-keys
    
  3. Skonfiguruj kubectl, aby połączyć się z klastrem AKS przy użyciu polecenia az aks get-credentials.

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

Tworzenie wielowystąpieniowej puli węzłów GPU

Aby utworzyć pulę węzłów, możesz użyć Azure CLI lub żądania HTTP do interfejsu API usługi ARM.

  • Utwórz pulę węzłów GPU z wieloma wystąpieniami przy użyciu polecenia az aks nodepool add i określ profil wystąpienia GPU. W poniższym przykładzie utworzono pulę węzłów z rozmiarem maszyny wirtualnej GPU zgodnym z MIG.

    az aks nodepool add \
        --name aksMigNode \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --node-vm-size Standard_ND96asr_v4 \
        --node-count 1 \
        --gpu-instance-profile MIG1g
    

Określanie strategii wieloaduszowego procesora GPU (MIG)

Przed zainstalowaniem wtyczek NVIDIA należy określić strategię użycia multi-instance GPU (MIG) do partycjonowania GPU: pojedyncza strategia lub strategia mieszana. Te dwie strategie nie mają wpływu na sposób wykonywania obciążeń procesora CPU, ale sposób wyświetlania zasobów procesora GPU.

  • Pojedyncza strategia: Pojedyncza strategia traktuje każde wystąpienie GPU jako procesor graficzny. Jeśli używasz tej strategii, zasoby procesora GPU są wyświetlane jako nvidia.com/gpu: 1.
  • Strategia mieszana: ujawnia instancje GPU oraz profil instancji GPU. Jeśli używasz tej strategii, zasób procesora GPU będzie wyświetlany jako nvidia.com/mig1g.5gb: 1.

Instalowanie wtyczki urządzenia NVIDIA i komponentów funkcji wykrywania GPU (GFD)

  1. Ustaw strategię MIG jako zmienną środowiskową. Można użyć strategii pojedynczej lub mieszanej.

    # Single strategy
    export MIG_STRATEGY=single
    
    # Mixed strategy
    export MIG_STRATEGY=mixed
    
  2. Dodaj repozytorium helm wtyczki urządzenia NVIDIA przy użyciu poleceń helm repo add i helm repo update.

    helm repo add nvdp https://nvidia.github.io/k8s-device-plugin
    helm repo update
    
  3. Zainstaluj wtyczkę urządzenia NVIDIA przy użyciu helm install polecenia .

    helm install nvdp nvdp/nvidia-device-plugin \
    --version=0.17.0 \
    --set migStrategy=${MIG_STRATEGY} \
    --set gfd.enabled=true \
    --namespace nvidia-device-plugin \
    --create-namespace
    

Uwaga

Instalacja wtyczki urządzenia NVIDIA za pomocą Helma konsoliduje wtyczkę urządzenia Kubernetes i repozytoria GFD. W przypadku korzystania z procesora GPU z wieloma wystąpieniami usługi AKS nie zaleca się oddzielnej instalacji składnika oprogramowania GFD.

Uwaga

W przypadku wdrożenia wtyczki urządzenia NVIDIA w systemie Azure Linux za pomocą niestandardowego manifestu daemonSet zamiast programu Helm należy dołączyć zmienną środowiskową NVIDIA_MIG_MONITOR_DEVICES=all w kontenerze wtyczki urządzenia.

Potwierdzenie możliwości wieloinstancyjnego GPU

  1. Sprawdź połączenie z klastrem przy użyciu polecenia kubectl get , aby zwrócić listę węzłów klastra.

    kubectl get nodes -o wide
    
  2. Upewnij się, że węzeł ma możliwość obsługi wielu instancji GPU przy użyciu polecenia kubectl describe node. Poniższe przykładowe polecenie opisuje węzeł o nazwie aksMigNode, który używa MIG1g jako profilu instancji GPU.

    kubectl describe node aksMigNode
    

    Dane wyjściowe powinny przypominać następujące przykładowe dane wyjściowe:

    # Single strategy output
    Allocatable:
        nvidia.com/gpu: 56
    
    # Mixed strategy output
    Allocatable:
        nvidia.com/mig-1g.5gb: 56
    

Planowanie pracy

Poniższe przykłady są oparte na obrazie podstawowym CUDA w wersji 12.1.1 dla systemu Ubuntu 22.04 oznaczone jako 12.1.1-base-ubuntu22.04.

Pojedyncza strategia

  1. Utwórz plik o nazwie single-strategy-example.yaml i skopiuj go w następującym manifeście.

    apiVersion: v1
    kind: Pod
    metadata:
      name: nvidia-single
    spec:
      containers:
      - name: nvidia-single
        image: nvidia/cuda:12.1.1-base-ubuntu22.04
        command: ["/bin/sh"]
        args: ["-c","sleep 1000"]
        resources:
          limits:
            "nvidia.com/gpu": 1
    
  2. Wdróż aplikację przy użyciu kubectl apply polecenia i określ nazwę manifestu YAML.

    kubectl apply -f single-strategy-example.yaml
    
  3. Sprawdź przydzielone urządzenia GPU przy użyciu polecenia kubectl exec. To polecenie zwraca listę węzłów klastra.

    kubectl exec nvidia-single -- nvidia-smi -L
    

    Poniższy przykład to przykład wyniku z pomyślnie utworzonymi usługami oraz wdrożeniami.

    GPU 0: NVIDIA A100 40GB PCIe (UUID: GPU-48aeb943-9458-4282-da24-e5f49e0db44b)
    MIG 1g.5gb     Device  0: (UUID: MIG-fb42055e-9e53-5764-9278-438605a3014c)
    MIG 1g.5gb     Device  1: (UUID: MIG-3d4db13e-c42d-5555-98f4-8b50389791bc)
    MIG 1g.5gb     Device  2: (UUID: MIG-de819d17-9382-56a2-b9ca-aec36c88014f)
    MIG 1g.5gb     Device  3: (UUID: MIG-50ab4b32-92db-5567-bf6d-fac646fe29f2)
    MIG 1g.5gb     Device  4: (UUID: MIG-7b6b1b6e-5101-58a4-b5f5-21563789e62e)
    MIG 1g.5gb     Device  5: (UUID: MIG-14549027-dd49-5cc0-bca4-55e67011bd85)
    MIG 1g.5gb     Device  6: (UUID: MIG-37e055e8-8890-567f-a646-ebf9fde3ce7a)
    

Strategia mieszana

  1. Utwórz plik o nazwie mixed-strategy-example.yaml i skopiuj go w następującym manifeście.

    apiVersion: v1
    kind: Pod
    metadata:
      name: nvidia-mixed
    spec:
      containers:
      - name: nvidia-mixed
        image: nvidia/cuda:12.1.1-base-ubuntu22.04
        command: ["/bin/sh"]
        args: ["-c","sleep 100"]
        resources:
          limits:
            "nvidia.com/mig-1g.5gb": 1
    
  2. Wdróż aplikację przy użyciu kubectl apply polecenia i określ nazwę manifestu YAML.

    kubectl apply -f mixed-strategy-example.yaml
    
  3. Sprawdź przydzielone urządzenia z procesorem kubectl exec GPU przy użyciu polecenia . To polecenie zwraca listę węzłów klastra.

    kubectl exec nvidia-mixed -- nvidia-smi -L
    

    Poniższy przykład przypomina dane wyjściowe z wyświetlonymi pomyślnie utworzonymi wdrożeniami i usługami:

    GPU 0: NVIDIA A100 40GB PCIe (UUID: GPU-48aeb943-9458-4282-da24-e5f49e0db44b)
    MIG 1g.5gb     Device  0: (UUID: MIG-fb42055e-9e53-5764-9278-438605a3014c)
    

Ważne

Tag latest dla obrazów CUDA został wycofany w Docker Hub. Proszę zapoznać się z repozytorium firmy NVIDIA, aby znaleźć najnowsze obrazy i odpowiednie tagi.

Rozwiązywanie problemów

Jeśli po utworzeniu puli węzłów nie widzisz możliwości GPU o wielu instancjach, upewnij się, że wersja interfejsu API nie jest starsza niż 2021-08-01.

Następne kroki

Aby dowiedzieć się więcej na temat procesorów GPU w Azure Kubernetes Service, zobacz: