Použití GPU pro úlohy náročné na výpočetní výkon ve službě Azure Kubernetes Service (AKS)
Grafické procesory (GPU) se často používají pro úlohy náročné na výpočetní výkon, jako jsou grafické a vizualizační úlohy. AKS podporuje fondy uzlů Linuxu s podporou GPU pro spouštění úloh Kubernetes náročných na výpočetní výkon.
Tento článek vám pomůže zřizovat uzly se schedovatelnými grafickými procesory v nových a existujících clusterech AKS.
Podporované virtuální počítače s podporou GPU
Pokud chcete zobrazit podporované virtuální počítače s podporou GPU, podívejte se na velikosti virtuálních počítačů optimalizovaných pro GPU v Azure. Pro fondy uzlů AKS doporučujeme minimální velikost Standard_NC6s_v3. Řada NVv4 (založená na grafických procesorech AMD) není podporována v AKS.
Poznámka:
Virtuální počítače s podporou GPU obsahují specializovaný hardware, na který se vztahují vyšší ceny a dostupnost oblastí. Další informace najdete v cenovém nástroji a dostupnosti oblastí.
Omezení
- Pokud používáte fond uzlů s podporou GPU Azure s Linuxem, nepoužijí se automatické opravy zabezpečení. Informace o výchozím chování kanálu upgradu operačního systému uzlu najdete ve vaší aktuální verzi rozhraní API AKS.
Poznámka:
Pro rozhraní API AKS verze 2023-06-01 nebo novější je výchozí kanál pro upgrade operačního systému uzlu NodeImage. U předchozích verzí je výchozí kanál None (Žádný). Další informace najdete v článku o automatickém upgradu.
- NVadsA10 v5-series nejsou doporučenou skladovou jednotkou pro virtuální pevný disk GPU.
- Aktualizace existujícího fondu uzlů pro přidání GPU se nepodporuje.
Než začnete
- Tento článek předpokládá, že máte existující cluster AKS. Pokud cluster nemáte, vytvořte ho pomocí Azure CLI, Azure PowerShellu nebo webu Azure Portal.
- Potřebujete nainstalovanou a nakonfigurovanou verzi Azure CLI 2.0.64 nebo novější. Verzi zjistíte spuštěním příkazu
az --version
. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.
Získání přihlašovacích údajů pro cluster
Pomocí příkazu získejte přihlašovací údaje pro cluster az aks get-credentials
AKS. Následující ukázkový příkaz načte přihlašovací údaje pro myAKSCluster ve skupině prostředků myResourceGroup :
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Možnosti použití grafických procesorů NVIDIA
Použití grafických procesorů NVIDIA zahrnuje instalaci různých softwarových komponent NVIDIA, jako je například modul plug-in zařízení NVIDIA pro Kubernetes, instalaci ovladače GPU a další.
Poznámka:
Microsoft ve výchozím nastavení automaticky udržuje verzi ovladačů NVidia v rámci nasazení image uzlu a AKS ji podporuje a spravuje . Zatímco ovladače NVidia jsou ve výchozím nastavení nainstalované na uzlech podporujících GPU, musíte nainstalovat modul plug-in zařízení.
Instalace modulu plug-in zařízení NVIDIA
Instalace modulu plug-in zařízení NVIDIA se vyžaduje při použití grafických procesorů v AKS. V některých případech se instalace zpracovává automaticky, například při použití operátoru NVIDIA GPU nebo image GPU AKS (Preview). Případně můžete modul plug-in zařízení NVIDIA nainstalovat ručně.
Ruční instalace modulu plug-in zařízení NVIDIA
Můžete nasadit daemonSet pro modul plug-in zařízení NVIDIA, který spouští pod na každém uzlu, aby poskytoval požadované ovladače pro gpu. Tento postup se doporučuje při použití fondů uzlů s podporou GPU pro Azure Linux.
Pokud chcete použít výchozí skladovou položku operačního systému, vytvoříte fond uzlů bez zadání skladové položky operačního systému. Fond uzlů je nakonfigurovaný pro výchozí operační systém založený na verzi Kubernetes clusteru.
Přidejte do clusteru
az aks nodepool add
fond uzlů pomocí příkazu.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
Tento příkaz přidá do myAKSCluster v myResourceGroup fond uzlů s názvem gpunp a pomocí parametrů nakonfiguruje následující nastavení fondu uzlů:
--node-vm-size
: Nastaví velikost virtuálního počítače pro uzel ve fondu uzlů na Standard_NC6s_v3.--node-taints
: Určuje taint sku=gpu:NoSchedule ve fondu uzlů.--enable-cluster-autoscaler
: Povolí automatické škálování clusteru.--min-count
: Nakonfiguruje automatické škálování clusteru tak, aby udržovalo minimálně jeden uzel ve fondu uzlů.--max-count
: Nakonfiguruje automatické škálování clusteru tak, aby udržovalo maximálně tři uzly ve fondu uzlů.
Poznámka:
Tainty a velikosti virtuálních počítačů je možné nastavit pouze pro fondy uzlů během vytváření fondu uzlů, ale nastavení automatického škálování můžete kdykoli aktualizovat.
Vytvořte obor názvů pomocí
kubectl create namespace
příkazu.kubectl create namespace gpu-resources
Vytvořte soubor s názvem nvidia-device-plugin-ds.yaml a vložte následující manifest YAML poskytnutý jako součást modulu plug-in zařízení NVIDIA pro projekt Kubernetes:
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
Pomocí příkazu vytvořte daemonSet a potvrďte úspěšné vytvoření
kubectl apply
modulu plug-in zařízení NVIDIA.kubectl apply -f nvidia-device-plugin-ds.yaml
Teď, když jste úspěšně nainstalovali modul plug-in zařízení NVIDIA, můžete zkontrolovat, jestli jsou grafické procesory schedovatelné , a spustit úlohu GPU.
Přeskočit instalaci ovladače GPU (Preview)
Pokud chcete řídit instalaci ovladačů NVidia nebo pomocí operátoru NVIDIA GPU, můžete přeskočit výchozí instalaci ovladače GPU. Microsoft nepodporuje ani nespravuje údržbu a kompatibilitu ovladačů NVidia v rámci nasazení image uzlu.
Důležité
Funkce AKS ve verzi Preview jsou k dispozici na samoobslužné bázi. Verze Preview jsou poskytovány "tak, jak jsou" a "dostupné", a jsou vyloučené ze smluv o úrovni služeb a omezené záruky. Verze Preview AKS jsou částečně pokryty zákaznickou podporou na základě maximálního úsilí. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:
Zaregistrujte nebo aktualizujte rozšíření aks-preview pomocí
az extension add
příkazu neboaz extension update
příkazu.# Register the aks-preview extension az extension add --name aks-preview # Update the aks-preview extension az extension update --name aks-preview
Vytvořte fond uzlů pomocí
az aks nodepool add
příkazu s příznakem--skip-gpu-driver-install
, který přeskočí automatickou instalaci ovladače GPU.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
Přidání příznaku
--skip-gpu-driver-install
během vytváření fondu uzlů přeskočí automatickou instalaci ovladače GPU. Žádné existující uzly se nezmění. Fond uzlů můžete škálovat na nulu a pak zálohovat, aby se změna projevila.
Použití operátoru NVIDIA GPU s AKS
Operátor NVIDIA GPU automatizuje správu všech softwarových komponent NVIDIA potřebných ke zřízení gpu včetně instalace ovladačů, modulu plug-in zařízení NVIDIA pro Kubernetes, modulu runtime kontejneru NVIDIA a dalších. Vzhledem k tomu, že operátor GPU zpracovává tyto komponenty, není nutné ručně nainstalovat modul plug-in zařízení NVIDIA. To také znamená, že automatická instalace ovladače GPU v AKS už není nutná.
Přeskočte automatickou instalaci ovladače GPU vytvořením fondu uzlů pomocí
az aks nodepool add
příkazu s--skip-gpu-driver-install
. Přidání příznaku--skip-gpu-driver-install
během vytváření fondu uzlů přeskočí automatickou instalaci ovladače GPU. Žádné existující uzly se nezmění. Fond uzlů můžete škálovat na nulu a pak zálohovat, aby se změna projevila.Postupujte podle dokumentace NVIDIA a nainstalujte operátor GPU.
Teď, když jste úspěšně nainstalovali operátor GPU, můžete zkontrolovat, jestli jsou gpu dosažitelné a spustit úlohu GPU.
Upozorňující
Pomocí image AKS GPU nedoporučujeme ručně instalovat démon modulu plug-in NVIDIA s clustery.
Poznámka:
Při použití operátoru NVIDIA GPU a nasazení do spotových instancí může být potřeba vzít v úvahu další aspekty. Projděte si následující téma: https://github.com/NVIDIA/gpu-operator/issues/577
Použití image AKS GPU (Preview)
Poznámka:
Image AKS GPU (Preview) bude vyřazena 10. ledna 2025. Následující vlastní hlavička už nebude dostupná, což znamená, že nebudete moct vytvářet nové fondy uzlů s podporou GPU pomocí image AKS GPU. Doporučujeme místo vyhrazené image GPU migrovat nebo použít výchozí konfiguraci GPU, protože vyhrazená image GPU se už nepodporuje. Další informace najdete v poznámkách k verzi AKS nebo si toto oznámení o vyřazení můžete prohlédnout v našem veřejném plánu AKS.
AKS poskytuje plně nakonfigurovanou image AKS obsahující modul plug-in zařízení NVIDIA pro Kubernetes. Image AKS GPU je aktuálně dostupná jenom na Ubuntu 18.04.
Důležité
Funkce AKS ve verzi Preview jsou k dispozici na samoobslužné bázi. Verze Preview jsou poskytovány "tak, jak jsou" a "dostupné", a jsou vyloučené ze smluv o úrovni služeb a omezené záruky. Verze Preview AKS jsou částečně pokryty zákaznickou podporou na základě maximálního úsilí. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:
aks-preview
Nainstalujte rozšíření Azure CLI pomocíaz extension add
příkazu.az extension add --name aks-preview
Pomocí příkazu aktualizujte na nejnovější verzi rozšíření
az extension update
.az extension update --name aks-preview
GPUDedicatedVHDPreview
Pomocí příkazu zaregistrujte příznakaz feature register
funkce.az feature register --namespace "Microsoft.ContainerService" --name "GPUDedicatedVHDPreview"
Zobrazení stavu Zaregistrované trvá několik minut.
Pomocí příkazu ověřte stav
az feature show
registrace.az feature show --namespace "Microsoft.ContainerService" --name "GPUDedicatedVHDPreview"
Jakmile se stav projeví jako zaregistrovaný, aktualizujte registraci poskytovatele prostředků Microsoft.ContainerService pomocí
az provider register
příkazu.az provider register --namespace Microsoft.ContainerService
Teď, když jste cluster aktualizovali tak, aby používal image GPU AKS, můžete do clusteru přidat fond uzlů pro uzly GPU.
Přidejte fond uzlů pomocí
az aks nodepool add
příkazu.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 \ --aks-custom-headers UseGPUDedicatedVHD=true \ --enable-cluster-autoscaler \ --min-count 1 \ --max-count 3
Předchozí ukázkový příkaz přidá do myAKSCluster v myResourceGroup fond uzlů s názvem gpunp a pomocí parametrů nakonfiguruje následující nastavení fondu uzlů:
--node-vm-size
: Nastaví velikost virtuálního počítače pro uzel ve fondu uzlů na Standard_NC6s_v3.--node-taints
: Určuje taint sku=gpu:NoSchedule ve fondu uzlů.--aks-custom-headers
: Určuje specializovanou image AKS GPU, UseGPUDedicatedVHD=true. Pokud skladová položka GPU vyžaduje virtuální počítače generace 2, použijte - -aks-custom-headers UseGPUDedicatedVHD=true,usegen2vm=true .--enable-cluster-autoscaler
: Povolí automatické škálování clusteru.--min-count
: Nakonfiguruje automatické škálování clusteru tak, aby udržovalo minimálně jeden uzel ve fondu uzlů.--max-count
: Nakonfiguruje automatické škálování clusteru tak, aby udržovalo maximálně tři uzly ve fondu uzlů.
Poznámka:
Tainty a velikosti virtuálních počítačů je možné nastavit pouze pro fondy uzlů během vytváření fondu uzlů, ale nastavení automatického škálování můžete kdykoli aktualizovat.
Teď, když jste úspěšně vytvořili fond uzlů pomocí image GPU, můžete zkontrolovat, jestli jsou grafické procesory schedovatelné , a spustit úlohu GPU.
Potvrďte, že jsou gpu schedlitelné.
Po vytvoření clusteru ověřte, že se v Kubernetes dají schedovat gpu.
Pomocí příkazu vypište uzly v clusteru
kubectl get nodes
.kubectl get nodes
Výstup by měl vypadat podobně jako v následujícím příkladu výstupu:
NAME STATUS ROLES AGE VERSION aks-gpunp-28993262-0 Ready agent 13m v1.20.7
Pomocí příkazu ověřte, že jsou grafické procesory schednutelné
kubectl describe node
.kubectl describe node aks-gpunp-28993262-0
V části Kapacita by gpu měl být uveden jako
nvidia.com/gpu: 1
. Výstup by měl vypadat podobně jako v následujícím zhuštěném příkladu výstupu:Name: aks-gpunp-28993262-0 Roles: agent Labels: accelerator=nvidia [...] Capacity: [...] nvidia.com/gpu: 1 [...]
Spuštění úlohy s podporou GPU
Pokud chcete zobrazit GPU v akci, můžete naplánovat úlohu s podporou GPU s příslušnou žádostí o prostředky. V tomto příkladu spustíme úlohu Tensorflow pro datovou sadu MNIST.
Vytvořte soubor s názvem samples-tf-mnist-demo.yaml a vložte následující manifest YAML, který obsahuje limit
nvidia.com/gpu: 1
prostředků:Poznámka:
Pokud při volání do ovladačů dojde k chybě neshody verzí, například "Verze ovladače CUDA není pro verzi modulu runtime CUDA dostatečná", projděte si graf kompatibility ovladače NVIDIA.
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"
Spusťte úlohu pomocí
kubectl apply
příkazu, který analyzuje soubor manifestu a vytvoří definované objekty Kubernetes.kubectl apply -f samples-tf-mnist-demo.yaml
Zobrazení stavu úlohy s podporou GPU
Sledujte průběh úlohy pomocí
kubectl get jobs
příkazu s příznakem--watch
. Načtení image a zpracování datové sady může trvat několik minut.kubectl get jobs samples-tf-mnist-demo --watch
Když se ve sloupci COMPLETIONS zobrazí hodnota 1/1, úloha se úspěšně dokončila, jak je znázorněno v následujícím příkladu výstupu:
NAME COMPLETIONS DURATION AGE samples-tf-mnist-demo 0/1 3m29s 3m29s samples-tf-mnist-demo 1/1 3m10s 3m36s
Ukončete
kubectl --watch
proces stisknutím ctrl-C.Pomocí příkazu získejte název podu
kubectl get pods
.kubectl get pods --selector app=samples-tf-mnist-demo
Pomocí příkazu zobrazte výstup úlohy
kubectl logs
s podporou GPU.kubectl logs samples-tf-mnist-demo-smnr6
Následující zhuštěný ukázkový výstup protokolů podů potvrzuje,
Tesla K80
že bylo zjištěno příslušné zařízení GPU: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
Použití Container Insights k monitorování využití GPU
Container Insights s AKS monitoruje následující metriky využití GPU:
Název metriky | Dimenze metriky (značky) | Popis |
---|---|---|
containerGpuDutyCycle | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName , gpuId , , gpuModel gpuVendor |
Procento času v minulém ukázkovém období (60 sekund), během kterého byl GPU zaneprázdněn/aktivně zpracovával kontejner. Pracovní cyklus je číslo mezi 1 a 100. |
containerGpuLimits | container.azm.ms/clusterId , , container.azm.ms/clusterName containerName |
Každý kontejner může zadat omezení jako jeden nebo více GPU. Není možné požadovat ani omezit zlomek GPU. |
ContainerGpuRequests | container.azm.ms/clusterId , , container.azm.ms/clusterName containerName |
Každý kontejner si může vyžádat jednu nebo více grafických procesorů. Není možné požadovat ani omezit zlomek GPU. |
containerGpumemoryTotalBytes | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName , gpuId , , gpuModel gpuVendor |
Množství paměti GPU v bajtech, které lze použít pro konkrétní kontejner. |
containerGpumemoryUsedBytes | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName , gpuId , , gpuModel gpuVendor |
Velikost paměti GPU v bajtech používaných konkrétním kontejnerem |
nodeGpuAllocatable | container.azm.ms/clusterId , , container.azm.ms/clusterName gpuVendor |
Počet GPU v uzlu, který může Kubernetes používat. |
nodeGpuCapacity | container.azm.ms/clusterId , , container.azm.ms/clusterName gpuVendor |
Celkový počet GPU v uzlu |
Vyčištění prostředků
Pomocí příkazu odeberte přidružené objekty Kubernetes, které jste vytvořili v tomto článku
kubectl delete job
.kubectl delete jobs samples-tf-mnist-demo
Další kroky
- Pokud chcete spouštět úlohy Apache Sparku, přečtěte si téma Spouštění úloh Apache Sparku v AKS.
- Další informace o funkcích plánovače Kubernetes najdete v tématu Osvědčené postupy pro pokročilé funkce plánovače v AKS.
- Další informace o službě Azure Kubernetes Service a Azure Machine Learning najdete tady:
Azure Kubernetes Service