Megosztás a következőn keresztül:


GPU-k használata számítási igényű számítási feladatokhoz az Azure Kubernetes Service-ben (AKS)

A grafikus feldolgozási egységeket (GPU-kat) gyakran használják nagy számítási feladatokhoz, például grafikus és vizualizációs számítási feladatokhoz. Az AKS támogatja a GPU-kompatibilis Linux-csomópontkészleteket a nagy számítási kapacitású Kubernetes-számítási feladatok futtatásához.

Ez a cikk segítséget nyújt az új és meglévő AKS-fürtökön ütemezhető GPU-kkal rendelkező csomópontok üzembe helyezéséhez.

Fontos

2025. november 30-tól az Azure Kubernetes Service (AKS) már nem támogatja vagy biztosítja az Azure Linux 2.0 biztonsági frissítéseit. Az Azure Linux 2.0-s csomópont lemezképe a 202512.06.0-s kiadásnál le van fagyasztva. 2026. március 31-től a rendszer eltávolítja a csomópontrendszerképeket, és nem tudja skálázni a csomópontkészleteket. Migrálás támogatott Azure Linux-verzióra a csomópontkészletek támogatott Kubernetes-verzióra való frissítésével vagy az osSku AzureLinux3-ra való migrálással. További információ: A GitHub kivonásával kapcsolatos probléma és az Azure Updates kivonási bejelentése. Ha értesülni szeretne a bejelentésekről és frissítésekről, kövesse az AKS kibocsátási megjegyzéseit.

Támogatott GPU-kompatibilis virtuális gépek

Az elérhető GPU-kompatibilis virtuális gépek megtekintéséhez tekintse meg a GPU-optimalizált virtuálisgép-méreteket az Azure-ban. Ha a GPU virtuálisgép-méret nem szerepel a támogatott virtuálisgép-méretek listájában, az AKS nem telepíti a szükséges GPU-szoftverösszetevőket, és nem nyújt támogatást. Az AKS lehetővé teszi a nem támogatott GPU virtuálisgép-méretek használatát az automatikus GPU-illesztőprogram telepítésének kihagyása után.

Ellenőrizze az elérhető és támogatott virtuálisgép-méreteket a az vm list-skus paranccsal.

az vm list-skus --location <your-location> --output table

Az AKS-csomópontkészletek esetében a minimális Standard_NC6s_v3 méretet javasoljuk. Az NVv4-sorozat (AMD GPU-k alapján) nem támogatott az AKS-en.

Megjegyzés:

GPU-val felszerelt virtuális gépek speciális hardvereket tartalmaznak, amelyek magasabb áron érhetők el, és a régiók közötti elérhetőségeik is változhatnak. További információkért tekintse meg a díjszabási eszközt és a régió rendelkezésre állását.

Korlátozások

  • Ha Azure Linux GPU-kompatibilis csomópontkészletet használ, a rendszer nem alkalmazza az automatikus biztonsági javításokat. Tekintse meg az AKS API aktuális verzióját a csomópont operációsrendszer-frissítési csatornájának alapértelmezett viselkedéséről.
  • Az AKS-hez készült Flatcar Container Linux nem támogatott NVIDIA GPU-val az AKS-en.
  • Az Azure Linux és az OS Guard for AKS nem támogatott nvidia GPU-val az AKS-en.

Megjegyzés:

Az AKS API 2023-06-01-es vagy újabb verziója esetén a csomópont operációs rendszerének frissítésének alapértelmezett csatornája a NodeImage. A korábbi verziók esetében az alapértelmezett csatorna a Nincs. További információ: automatikus frissítés.

  • Az AKS nem támogatja a meglévő csomópontkészlet GPU virtuálisgép-méretének frissítését.

Mielőtt hozzákezdene

  • Feltételezzük, hogy létezik egy AKS-klasztere. Ha nem rendelkezik fürttel, hozzon létre egyet az Azure CLI, Azure PowerShell vagy az Azure Portal használatával.
  • Az --gpu-driver mező beállításához az Azure CLI 2.72.2-es vagy újabb verzióját kell telepítenie. A verzió azonosításához futtassa a következőt: az --version. Ha telepítenie vagy frissítenie kell, tekintse meg az Azure CLI telepítését.
  • Ha telepítve van az aks-preview Azure CLI-bővítmény, frissítse a verziót 18.0.0b2-es vagy újabb verzióra.

Szerezze be a klaszter hitelesítő adatait.

Szerezze meg az AKS-fürt hitelesítő adatait a az aks get-credentials paranccsal. Az alábbi példaparancs lekéri a myAKSCluster hitelesítő adatait a myResourceGroup erőforráscsoportban:

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

Az NVIDIA GPU-k használatának lehetőségei

Az NVIDIA GPU-k használata magában foglalja a különböző NVIDIA-szoftverösszetevők telepítését, például a Kuberneteshez készült NVIDIA eszköz beépülő modult, a GPU-illesztőprogram telepítését stb.

Megjegyzés:

Alapértelmezés szerint a Microsoft automatikusan fenntartja az NVIDIA-illesztőprogramok verzióját a csomópont lemezképének központi telepítése részeként, és az AKS támogatja és kezeli azt. Bár az NVIDIA-illesztőprogramok alapértelmezés szerint GPU-kompatibilis csomópontokra vannak telepítve, telepítenie kell az eszköz beépülő modult.

NVIDIA eszköz beépülő modul telepítése

AZ NVIDIA eszköz beépülő moduljának telepítése szükséges, ha GPU-kat használ az AKS-en. Bizonyos esetekben a rendszer automatikusan kezeli a telepítést, például az NVIDIA GPU-operátor használatakor. Másik lehetőségként manuálisan is telepítheti az NVIDIA eszköz beépülő modult.

Az NVIDIA eszköz beépülő modul manuális telepítése

Az NVIDIA eszköz beépülő modulhoz üzembe helyezhet egy DaemonSetet, amely minden csomóponton futtat egy podot, hogy biztosítsa a GPU-khoz szükséges illesztőprogramokat. Ez az ajánlott módszer GPU-kompatibilis csomópontkészletek Azure Linuxhoz való használatakor.

Az alapértelmezett operációsrendszer-termékváltozat használatához az operációsrendszer-termékváltozat megadása nélkül hozza létre a csomópontkészletet. A csomópontkészletet a fürt Kubernetes-verziója alapján konfigurálják az alapértelmezett operációs rendszer számára.

Adjon hozzá egy csomópont-gyűjteményt a fürthöz a az aks nodepool add parancs használatával.

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name gpunp \
    --node-count 1 \
    --node-vm-size Standard_NC6s_v3 \
    --node-taints sku=gpu:NoSchedule \
    --enable-cluster-autoscaler \
    --min-count 1 \
    --max-count 3

Ez a parancs hozzáad egy gpunp nevű csomópontkészletet a myAKSClusterhez a myResourceGroupban, és paraméterekkel konfigurálja a következő csomópontkészlet-beállításokat:

  • --node-vm-size: Beállítja a csomópontkészlet csomópontjának virtuálisgép-méretét Standard_NC6s_v3.
  • --node-taints: A csomópontkészleten egy sku=gpu:NoSchedule taint értéket ad meg.
  • --enable-cluster-autoscaler: Engedélyezi a fürt automatikus skálázását.
  • --min-count: Úgy konfigurálja az automatikus skálázást, hogy a csomópontkészletben mindig legyen legalább egy csomópont.
  • --max-count: Úgy konfigurálja a fürt automatikus skálázását, hogy a csomópontkészletben legfeljebb három csomópont legyen.

Megjegyzés:

Csomópontkészletek létrehozásakor csak a taszítók és a virtuális gép méretek állíthatók be, de az automatikus skálázási beállításokat bármikor frissítheti.

  1. Hozzon létre egy névteret a kubectl create namespace paranccsal.

    kubectl create namespace gpu-resources
    
  2. Hozzon létre egy nvidia-device-plugin-ds.yaml nevű fájlt, és illessze be a kubernetes-projekthez készült NVIDIA eszköz beépülő modul részeként megadott alábbi YAML-jegyzékfájlt:

    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:
          labels:
            name: nvidia-device-plugin-ds
        spec:
          tolerations:
          - key: "sku"
            operator: "Equal"
            value: "gpu"
            effect: "NoSchedule"
          # 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.
          # See https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/
          priorityClassName: "system-node-critical"
          containers:
          - image: nvcr.io/nvidia/k8s-device-plugin:v0.18.0
            name: nvidia-device-plugin-ctr
            env:
              - name: FAIL_ON_INIT_ERROR
                value: "false"
            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. Hozza létre a Démonkészletet, és győződjön meg arról, hogy az NVIDIA eszköz beépülő modul sikeresen létrejött a kubectl apply parancs használatával.

    kubectl apply -f nvidia-device-plugin-ds.yaml
    
  4. Most, hogy sikeresen telepítette az NVIDIA eszköz beépülő modult, ellenőrizheti, hogy a GPU-k ütemezhetők-e, és gpu-számítási feladatot futtathat.

GPU-illesztőprogram telepítésének kihagyása

Ha szabályozni szeretné az NVIDIA-illesztőprogramok telepítését, vagy az NVIDIA GPU-operátort szeretné használni, kihagyhatja az alapértelmezett GPU-illesztőprogram-telepítést. A Microsoft nem támogatja vagy kezeli az NVIDIA-illesztőprogramok karbantartását és kompatibilitását a csomópont lemezképének központi telepítése során.

Fontos

2025. augusztus 14-től az Azure Kubernetes Service (AKS) már nem támogatja a --skip-gpu-driver-install csomópontkészlet címkéjét. Ezen dátum után nem fog tudni GPU-kompatibilis csomópontkészleteket kiépíteni ezzel a címkével az automatikus GPU-illesztőprogram telepítésének megkerüléséhez. Ugyanezt a viselkedést úgy érheti el, ha a mezőt --gpu-driver értékre állítjanone. A kivonással kapcsolatos további információkért tekintse meg a GitHub-kivonással kapcsolatos problémát és az Azure Updates kivonási bejelentését. Ha értesülni szeretne a bejelentésekről és frissítésekről, kövesse az AKS kibocsátási megjegyzéseit.

  1. Hozzon létre egy csomópontkészletet a az aks nodepool add parancs használatával, és állítsa be a --gpu-driver mezőt none az alapértelmezett GPU-illesztőprogram telepítésének kihagyásához.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --gpu-driver none \
        --node-vm-size Standard_NC6s_v3 \
        --enable-cluster-autoscaler \
        --min-count 1 \
        --max-count 3
    

    --gpu-driver Az API mező none beállítása a csomópontkészlet létrehozása során kihagyja az automatikus GPU-illesztőprogram telepítést. A meglévő csomópontok nem módosulnak. A csomópontkészletet nullára skálázhatja, majd ismét felfelé skálázhatja a változtatás hatálybalépéséhez.

    Ha a hibaüzenet unrecognized arguments: --gpu-driver none jelenik meg, frissítse az Azure CLI-verziót. További információt a Kezdés előtt című témakörben talál.

  2. Az NVIDIA GPU-operátort az alábbi lépések végrehajtásával telepítheti.

Ellenőrizze, hogy a GPU-k ütemezhetők-e

A fürt létrehozása után győződjön meg arról, hogy a GPU-k ütemezhetők a Kubernetesben.

  1. A kubectl get nodes parancs használatával listázza a csomópontokat a fürtjében.

    kubectl get nodes
    

    A kimenetnek a következő példakimenethez hasonlóan kell kinéznie:

    NAME                   STATUS   ROLES   AGE   VERSION
    aks-gpunp-28993262-0   Ready    agent   13m   v1.20.7
    
  2. Győződjön meg arról, hogy a GPU-k a kubectl describe node parancs használatával ütemezhetők-e.

    kubectl describe node aks-gpunp-28993262-0
    

    A Kapacitás szakaszban a GPU-nak a következőként kell szerepelnienvidia.com/gpu: 1: . A kimenetnek a következő kondenzált példakimenethez hasonlóan kell kinéznie:

    Name:               aks-gpunp-28993262-0
    Roles:              agent
    Labels:             accelerator=nvidia
    
    [...]
    
    Capacity:
    [...]
     nvidia.com/gpu:                 1
    [...]
    

GPU-kompatibilis számítási feladat futtatása

Ha működés közben szeretné látni a GPU-t, ütemezheti a GPU-kompatibilis számítási feladatokat a megfelelő erőforrás-kéréssel. Ebben a példában egy Tensorflow-feladatot futtatunk az MNIST-adathalmazon.

  1. Hozzon létre egy samples-tf-mnist-demo.yaml nevű fájlt, és illessze be a következő YAML-jegyzékfájlt, amely a következő erőforráskorlátot nvidia.com/gpu: 1tartalmazza:

    Megjegyzés:

    Ha verzióeltérési hibát kap az illesztőprogramok behívásakor, például "A CUDA-illesztőprogram verziója nem elegendő a CUDA futtatókörnyezet verziójához", tekintse át az NVIDIA-illesztőprogramok mátrixkompatibilitási diagramját.

    apiVersion: batch/v1
    kind: Job
    metadata:
      labels:
        app: samples-tf-mnist-demo
      name: samples-tf-mnist-demo
    spec:
      template:
        metadata:
          labels:
            app: samples-tf-mnist-demo
        spec:
          containers:
          - name: samples-tf-mnist-demo
            image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu
            args: ["--max_steps", "500"]
            imagePullPolicy: IfNotPresent
            resources:
              limits:
               nvidia.com/gpu: 1
          restartPolicy: OnFailure
          tolerations:
          - key: "sku"
            operator: "Equal"
            value: "gpu"
            effect: "NoSchedule"
    
  2. Futtassa a feladatot a kubectl apply parancs használatával, amely elemzi a jegyzékfájlt, és létrehozza a definiált Kubernetes-objektumokat.

    kubectl apply -f samples-tf-mnist-demo.yaml
    

A GPU-kompatibilis számítási feladat állapotának megtekintése

  1. A feladat előrehaladásának figyelése a kubectl get jobs jelölővel ellátott --watch paranccsal. A rendszerkép lekérése és az adathalmaz feldolgozása eltarthat néhány percig.

    kubectl get jobs samples-tf-mnist-demo --watch
    

    Ha a BEFEJEZÉSEK oszlop 1/1-et jelenít meg, a feladat sikeresen befejeződött, ahogy az alábbi példakimenetben is látható:

    NAME                    COMPLETIONS   DURATION   AGE
    
    samples-tf-mnist-demo   0/1           3m29s      3m29s
    samples-tf-mnist-demo   1/1   3m10s   3m36s
    
  2. Lépjen ki a folyamatból a kubectl --watch Ctrl-C billentyűkombinációval.

  3. Kérje le a pod nevét a kubectl get pods parancs használatával.

    kubectl get pods --selector app=samples-tf-mnist-demo
    
  4. A parancs használatával megtekintheti a GPU-kompatibilis számítási feladat kimenetét kubectl logs .

    kubectl logs samples-tf-mnist-demo-smnr6
    

    A podnaplók következő sűrített példakimenete megerősíti, Tesla K80hogy a megfelelő GPU-eszköz felderítve lett:

    2019-05-16 16:08:31.258328: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
    2019-05-16 16:08:31.396846: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties:
    name: Tesla K80 major: 3 minor: 7 memoryClockRate(GHz): 0.8235
    pciBusID: 2fd7:00:00.0
    totalMemory: 11.17GiB freeMemory: 11.10GiB
    2019-05-16 16:08:31.396886: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: Tesla K80, pci bus id: 2fd7:00:00.0, compute capability: 3.7)
    2019-05-16 16:08:36.076962: I tensorflow/stream_executor/dso_loader.cc:139] successfully opened CUDA library libcupti.so.8.0 locally
    Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
    Extracting /tmp/tensorflow/input_data/train-images-idx3-ubyte.gz
    Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
    Extracting /tmp/tensorflow/input_data/train-labels-idx1-ubyte.gz
    Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
    Extracting /tmp/tensorflow/input_data/t10k-images-idx3-ubyte.gz
    Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.
    Extracting /tmp/tensorflow/input_data/t10k-labels-idx1-ubyte.gz
    Accuracy at step 0: 0.1081
    Accuracy at step 10: 0.7457
    Accuracy at step 20: 0.8233
    Accuracy at step 30: 0.8644
    Accuracy at step 40: 0.8848
    Accuracy at step 50: 0.8889
    Accuracy at step 60: 0.8898
    Accuracy at step 70: 0.8979
    Accuracy at step 80: 0.9087
    Accuracy at step 90: 0.9099
    Adding run metadata for 99
    Accuracy at step 100: 0.9125
    Accuracy at step 110: 0.9184
    Accuracy at step 120: 0.922
    Accuracy at step 130: 0.9161
    Accuracy at step 140: 0.9219
    Accuracy at step 150: 0.9151
    Accuracy at step 160: 0.9199
    Accuracy at step 170: 0.9305
    Accuracy at step 180: 0.9251
    Accuracy at step 190: 0.9258
    Adding run metadata for 199
    [...]
    Adding run metadata for 499
    

Csomópontkészlet frissítése

Akár frissíteni, akár fejleszteni szeretné a csomópontkészleteket, észreveheti, hogy egyik művelethez sem tartozik --gpu-driver paraméter. Ütközhet egy unrecognized arguments: --gpu-driver none hibába, ha megpróbálja átadni a paramétert. Nem kell meghívni a paramétert, mivel az értéket semmilyen ilyen művelet nem befolyásolja.

A csomópontkészlet első létrehozásakor a frissítési/frissítési műveletek nem befolyásolják a deklarált --gpu-driver paramétert. Ha nem szeretné, hogy az illesztőprogramok telepítve legyenek, és a csomópontkészlet létrehozásakor ki legyen jelölve --gpu-driver None , az illesztőprogramok nem lesznek telepítve a későbbi frissítésekben/frissítésekben.

Erőforrások tisztítása

Távolítsa el a cikkben létrehozott társított Kubernetes-objektumokat a kubectl delete job paranccsal.

kubectl delete jobs samples-tf-mnist-demo

Következő lépések