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 a csomópontok új és meglévő AKS-fürtöken való üzembe helyezéséhez schedulable GPU-kkal.
Támogatott GPU-kompatibilis virtuális gépek
A támogatott GPU-kompatibilis virtuális gépek megtekintéséhez tekintse meg a GPU-ra optimalizált virtuálisgép-méreteket az Azure-ban. 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.
Feljegyzés
A GPU-kompatibilis virtuális gépek speciális hardvereket tartalmaznak, amelyek magasabb díjszabást és régiók rendelkezésre állását teszik lehetővé. 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.
Feljegyzé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 NVadsA10 v5 sorozat nem ajánlott termékváltozat GPU VHD-hez.
- A meglévő csomópontkészlet GPU-ra való frissítése nem támogatott.
Feljegyzés
Az AKS GPU-rendszerkép (előzetes verzió) 2025. január 10-től megszűnik. Az egyéni fejléc már nem érhető el, ami azt jelenti, hogy nem hozhat létre új GPU-kompatibilis csomópontkészleteket az AKS GPU-lemezkép használatával. Javasoljuk, hogy a GPU-rendszerkép helyett az alapértelmezett GPU-konfigurációra migráljon vagy használjon, mivel a GPU-lemezkép már nem támogatott. További információkért tekintse meg az AKS kibocsátási megjegyzéseit, vagy tekintse meg ezt a nyugdíjazási bejelentést az AKS nyilvános ütemtervében.
Mielőtt elkezdené
- Ez a cikk feltételezi, hogy van egy meglévő AKS-fürtje. Ha nem rendelkezik fürttel, hozzon létre egyet az Azure CLI, az Azure PowerShell vagy az Azure Portal használatával.
- Telepítenie és konfigurálnia kell az Azure CLI 2.0.64-es vagy újabb verzióját. A verzió azonosításához futtassa a következőt:
az --version
. Ha telepíteni vagy frissíteni szeretne: Az Azure CLI telepítése.
A fürt hitelesítő adatainak lekérése
Kérje le 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.
Feljegyzé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észlet a fürt Kubernetes-verziója alapján van konfigurálva az alapértelmezett operációs rendszerhez.
Adjon hozzá csomópontkészletet 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
: Egy sku=gpu:NoSchedule taint értéket ad meg a csomópontkészleten.--enable-cluster-autoscaler
: Engedélyezi a fürt automatikus skálázását.--min-count
: Úgy konfigurálja a fürt automatikus skálázását, hogy legalább egy csomópont maradjon a csomópontkészletben.--max-count
: Úgy konfigurálja a fürt automatikus skálázását, hogy legfeljebb három csomópontot tartson fenn a csomópontkészletben.
Feljegyzés
A csomópontkészletek létrehozásakor csak a csomópontkészletek méretei és méretei állíthatók be, de az automatikus skálázási beállításokat bármikor frissítheti.
Hozzon létre egy névteret a
kubectl create namespace
paranccsal.kubectl create namespace gpu-operator
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: kube-system 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.15.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
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
Most, hogy sikeresen telepítette az NVIDIA eszköz beépülő modult, ellenőrizheti, hogy a GPU-k schedulable-e , és gpu-számítási feladatot futtatnak-e.
GPU-illesztőprogram telepítésének kihagyása (előzetes verzió)
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
Az AKS előzetes verziójú funkciói önkiszolgáló, opt-in alapon érhetők el. Az előzetes verziókat "ahogy van" és "rendelkezésre állóként" biztosítjuk, és a szolgáltatási szerződésekből és a korlátozott jótállásból kizárjuk őket. Az AKS előzetes verzióit részben az ügyfélszolgálat fedezi a legjobb munkamennyiség alapján. Ezért ezek a funkciók nem éles használatra vannak szánva. További információkért tekintse meg az alábbi támogatási cikkeket:
Regisztrálja vagy frissítse az aks-preview bővítményt a vagy
az extension update
parancsaz extension add
használatával.# Register the aks-preview extension az extension add --name aks-preview # Update the aks-preview extension az extension update --name aks-preview
Hozzon létre egy csomópontkészletet a
az aks nodepool add
jelölővel ellátott paranccsal az--skip-gpu-driver-install
automatikus 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 \ --skip-gpu-driver-install \ --node-vm-size Standard_NC6s_v3 \ --enable-cluster-autoscaler \ --min-count 1 \ --max-count 3
A csomópontkészlet létrehozásakor a
--skip-gpu-driver-install
jelölő hozzáadása kihagyja az automatikus GPU-illesztőprogram telepítését. A meglévő csomópontok nem módosulnak. A csomópontkészletet nullára skálázhatja, majd biztonsági másolatot készíthet a módosítás érvénybe lépéséhez.
NVIDIA GPU-operátor használata az AKS-sel
Az NVIDIA GPU-operátor automatizálja a GPU kiépítéséhez szükséges összes NVIDIA-szoftverösszetevő kezelését, beleértve az illesztőprogram telepítését, a Kubernetes NVIDIA eszköz beépülő modulját, az NVIDIA tároló futtatókörnyezetét stb. Mivel a GPU-operátor kezeli ezeket az összetevőket, nem szükséges manuálisan telepíteni az NVIDIA eszköz beépülő modult. Ez azt is jelenti, hogy az AKS-en már nincs szükség automatikus GPU-illesztő telepítésre.
Hagyja ki az automatikus GPU-illesztőprogram-telepítést úgy, hogy létrehoz egy csomópontkészletet a
az aks nodepool add
következő paranccsal--skip-gpu-driver-install
: . A csomópontkészlet létrehozásakor a--skip-gpu-driver-install
jelölő hozzáadása kihagyja az automatikus GPU-illesztőprogram telepítését. A meglévő csomópontok nem módosulnak. A csomópontkészletet nullára skálázhatja, majd biztonsági másolatot készíthet a módosítás érvénybe lépéséhez.A GPU-operátor telepítéséhez kövesse az NVIDIA dokumentációját.
Most, hogy sikeresen telepítette a GPU-operátort, ellenőrizheti, hogy a GPU-k schedulable-e , és futtathatók-e GPU-számítási feladatok.
Feljegyzés
Az NVIDIA GPU-operátor használata és a SPOT-példányokon való üzembe helyezés során további szempontokat is figyelembe kell venni. További információ: https://github.com/NVIDIA/gpu-operator/issues/577
Ellenőrizze, hogy a GPU-k schedulable-e
A fürt létrehozása után győződjön meg arról, hogy a GPU-k a Kubernetesben használhatók.
A parancs használatával
kubectl get nodes
listázhatja a fürt csomópontjait.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
Győződjön meg arról, hogy a GPU-k a parancs használatával
kubectl describe node
schedulable-e.kubectl describe node aks-gpunp-28993262-0
A Kapacitás szakaszban a GPU-nak a következőként kell szerepelnie
nvidia.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.
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: 1
tartalmazza:Feljegyzé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"
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
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
Lépjen ki a folyamatból a
kubectl --watch
Ctrl-C billentyűkombinációval.Kérje le a pod nevét a
kubectl get pods
parancs használatával.kubectl get pods --selector app=samples-tf-mnist-demo
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 K80
hogy 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
A Container Insights használata a GPU-használat monitorozásához
Az AKS-sel rendelkező Container Insights a következő GPU-használati metrikákat figyeli:
Metrika neve | Metrikadimenzió (címkék) | Leírás |
---|---|---|
containerGpuDutyCycle | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName , gpuId gpuModel gpuVendor |
Az elmúlt mintaidőszak (60 másodperc) időtartamának százalékos aránya, amely során a GPU foglalt/aktív feldolgozást végzett egy tárolón. A vámciklus egy 1 és 100 közötti szám. |
containerGpuLimits | container.azm.ms/clusterId , , container.azm.ms/clusterName containerName |
Minden tároló megadhat korlátokat egy vagy több GPU-ként. A GPU töredékét nem lehet lekérni vagy korlátozni. |
containerGpuRequests | container.azm.ms/clusterId , , container.azm.ms/clusterName containerName |
Minden tároló igényelhet egy vagy több GPU-t. A GPU töredékét nem lehet lekérni vagy korlátozni. |
containerGpumemoryTotalBytes | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName , gpuId gpuModel gpuVendor |
A GPU-memória mennyisége bájtokban, amelyek egy adott tárolóhoz használhatók. |
containerGpumemoryUsedBytes | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName , gpuId gpuModel gpuVendor |
A GPU-memória mennyisége bájtokban, amelyeket egy adott tároló használ. |
nodeGpuAllocatable | container.azm.ms/clusterId , , container.azm.ms/clusterName gpuVendor |
A Kubernetes által használható csomópontok GPU-jainak száma. |
nodeGpuCapacity | container.azm.ms/clusterId , , container.azm.ms/clusterName gpuVendor |
A csomópont gpu-jainak teljes száma. |
Az erőforrások eltávolí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
- Az Apache Spark-feladatok futtatásához lásd : Apache Spark-feladatok futtatása az AKS-en.
- A Kubernetes-ütemező funkcióival kapcsolatos további információkért tekintse meg az AKS speciális ütemezőfunkcióinak ajánlott eljárásait.
- További információ az Azure Kubernetes Service-ről és az Azure Machine Learningről:
Azure Kubernetes Service