Udostępnij za pośrednictwem


Tworzenie puli węzłów procesora GPU z wieloma wystąpieniami w usłudze Azure Kubernetes Service (AKS)

Procesor GPU A100 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 i pamięć procesora GPU. Aby uzyskać więcej informacji na temat procesora NVIDIA A100, zobacz NVIDIA A100 GPU.

W tym artykule opisano sposób tworzenia puli węzłów procesora GPU z wieloma wystąpieniami przy użyciu rozmiaru maszyny wirtualnej zgodnej z migracją w klastrze usługi Azure Kubernetes Service (AKS).

Wymagania wstępne i ograniczenia

  • Konto platformy Azure z aktywną subskrypcją. Jeśli go nie masz, możesz bezpłatnie utworzyć konto.
  • Interfejs wiersza polecenia platformy Azure w wersji 2.2.0 lub nowszej został zainstalowany i skonfigurowany. 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.
  • Klient wiersza polecenia kubernetes, kubectl, zainstalowany i skonfigurowany. Jeśli korzystasz z usługi Azure Cloud Shell, narzędzie kubectl jest już zainstalowane. 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.
  • Pule węzłów procesora GPU z wieloma wystąpieniami nie są obecnie obsługiwane w systemie Azure Linux.
  • Nie można używać narzędzia Cluster Autoscaler z pulami węzłów procesora GPU z wieloma wystąpieniami.

Profile wystąpień procesora GPU

Profile wystąpień procesora GPU definiują sposób partycjonowania procesorów GPU. W poniższej tabeli przedstawiono dostępny profil wystąpienia procesora GPU dla elementu Standard_ND96asr_v4:

Nazwa profilu Ułamek sm Ułamek pamięci Liczba utworzonych wystąpień
MIG 1g.5gb 7.01 1/8 7
MIG 2g.10gb 7.02 2/8 3
MIG 3g.20gb 3/7 4/8 2
MIG 4g.20gb 7.04 4/8 1
MIG 7g.40gb 7.07 8/8 1

Na przykład profil MIG 1g.5gb wystąpienia procesora GPU wskazuje, że każde wystąpienie procesora GPU ma 1g SM (multiprocesorów przesyłania strumieniowego) i 5 gb pamięci. W tym przypadku procesor 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 wystąpienia procesora GPU.

Tworzenie klastra AKS

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

    az group create --name myResourceGroup --location southcentralus
    
  2. Utwórz klaster usługi AKS przy użyciu az aks create polecenia .

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

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

Tworzenie puli węzłów procesora GPU z wieloma wystąpieniami

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

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

    az aks nodepool add \
        --name aks-mignode \
        --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 FIRMY NVIDIA należy określić strategię użycia procesora GPU (MIG) z wieloma wystąpieniami na potrzeby partycjonowania procesora 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 procesora GPU jako procesor GPU. Jeśli używasz tej strategii, zasoby procesora GPU są wyświetlane jako nvidia.com/gpu: 1.
  • Strategia mieszana: strategia mieszana uwidacznia wystąpienia procesora GPU i profil wystąpienia procesora GPU. Jeśli używasz tej strategii, zasób procesora GPU będzie wyświetlany jako nvidia.com/mig1g.5gb: 1.

Instalowanie składników funkcji odnajdywania funkcji (GFD) i wtyczki urządzenia NVIDIA (GFD)

  1. Ustaw strategię migrowania 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 helm repo add poleceń 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.15.0 \
    --generate-name \
    --set migStrategy=${MIG_STRATEGY} \
    --set gfd.enabled=true \
    --namespace nvidia-device-plugin \
    --create-namespace
    

Uwaga

Instalacja programu Helm wtyczki urządzenia NVIDIA w wersji 0.15.0 lub nowszej konsoliduje wtyczkę urządzenia i repozytoria GFD. W tym samouczku nie zaleca się oddzielnej instalacji narzędzia Helm składnika oprogramowania GFD.

Potwierdzanie możliwości procesora GPU z wieloma wystąpieniami

  1. kubectl 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ść procesora GPU z wieloma wystąpieniami przy użyciu kubectl describe node polecenia . Poniższe przykładowe polecenie opisuje węzeł o nazwie aks-mignode, który używa mig1g jako profilu wystąpienia procesora GPU.

    kubectl describe node aks-mignode
    

    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 z procesorem kubectl exec GPU przy użyciu polecenia . To polecenie zwraca listę węzłów klastra.

    kubectl exec nvidia-single -- 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)
    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 obrazów CUDA został przestarzały w usłudze Docker Hub. Zapoznaj się z repozytorium firmy NVIDIA, aby zapoznać się z najnowszymi obrazami i odpowiednimi tagami.

Rozwiązywanie problemów

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

Następne kroki

Aby dowiedzieć się więcej o procesorach GPU w usłudze Azure Kubernetes Service, zobacz: