Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Grafické procesory (GPU) se často používají pro výpočetně náročné úlohy, jako jsou úlohy zaměřené na grafiku a vizualizaci. AKS podporuje uzlové fondy Linuxu s povolenou podporou GPU pro provoz výpočetně náročných Kubernetes pracovních zátěží.
Tento článek vám pomůže nastavit uzly se plánovatelnými GPU na nových a stávajících AKS clusterů.
Podporované virtuální počítače s podporou GPU
Chcete-li zobrazit podporované virtuální počítače s GPU, navštivte velikosti virtuálních počítačů optimalizovaných pro GPU v Azure. Pro uzly AKS doporučujeme minimální velikost Standard_NC6s_v3. NVv4 série (založená na AMD GPU) není podporována na AKS.
Poznámka:
Virtuální stroje s podporou GPU obsahují specializovaný hardware, který podléhá vyšším cenám a dostupnosti dle regionu. Pro více informací se podívejte na nástroj ceny a dostupnost regionů.
Omezení
- Pokud používáte uzlový fond s podporou GPU na systému Azure Linux, automatické bezpečnostní záplaty nejsou aplikovány. Odkazujte na svou aktuální verzi API AKS pro výchozí chování kanálu upgradu OS uzlu.
Poznámka:
Pro verzi AKS API 2023-06-01 nebo novější je výchozím kanálem pro upgrade OS uzlu NodeImage. Pro u předchozích verzí je výchozí kanál None. Pokud se chcete dozvědět více, podívejte se na auto-upgrade.
- Aktualizace existující skupiny uzlů za účelem přidání velikosti GPU VM není podporována v AKS.
Poznámka:
Obraz AKS GPU (náhled) bude vyřazen od 10. ledna 2025. Vlastní záhlaví již není k dispozici, což znamená, že nemůžete vytvářet nové uzlové skupiny s povoleným GPU pomocí obrazu AKS GPU. Doporučujeme migrovat na výchozí konfiguraci GPU nebo ji používat namísto obrazového souboru GPU, protože obrazový soubor GPU již není podporován. Pro více informací si přečtěte poznámky k vydání AKS nebo si prohlédněte toto oznámení o ukončení v naší veřejné roadmapě AKS.
Než začnete
- Tento článek předpokládá, že již máte existující AKS cluster. Pokud nemáte klastr, vytvořte si ho pomocí Azure CLI, Azure PowerShell nebo portálu Azure.
- K nastavení
--gpu-driver
pole potřebujete azure CLI verze 2.72.2 nebo novější. Verzi zjistíte spuštěním příkazuaz --version
. Pokud potřebujete instalovat nebo upgradovat, podívejte se na Install Azure CLI. - Pokud máte
aks-preview
nainstalované rozšíření Azure CLI, aktualizujte prosím verzi na 18.0.0b2 nebo novější.
Získejte přihlašovací údaje pro váš klastr
Získejte přihlašovací údaje pro váš AKS cluster pomocí příkazu az aks get-credentials
. 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í GPU 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 jako součást nasazení image uzlu a AKS ji podporuje a spravuje . Zatímco ovladače NVIDIA jsou ve výchozím nastavení nainstalovány na uzlech podporujících GPU, musíte nainstalovat modul plug-in zařízení.
Instalace pluginu pro 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 je instalace provedena automaticky, například při použití NVIDIA GPU Operator. Případně můžete ručně nainstalovat plugin zařízení NVIDIA.
Ručně nainstalujte plugin zařízení NVIDIA
Můžete nasadit DaemonSet pro plugin zařízení NVIDIA, který spustí pod na každém uzlu, aby poskytl potřebné ovladače pro GPU. Jedná se o doporučený přístup při používání 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 node pool do svého clusteru pomocí příkazu
az aks nodepool add
.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ává fond uzlů s názvem gpunp do myAKSCluster ve skupině prostředků myResourceGroup a používá parametry k nastavení následujících konfigurací fondu uzlů:
-
--node-vm-size
: Nastaví velikost virtuálního stroje pro uzel v uzlovém poolu na Standard_NC6s_v3. -
--node-taints
: Určuje poškození sku=gpu:NoSchedule na poolu uzlů. -
--enable-cluster-autoscaler
: Aktivuje automatické škálování clusteru. -
--min-count
: Konfiguruje automatické škálování clusteru tak, aby v poolu uzlů udržovalo minimálně jeden uzel. -
--max-count
: Nakonfiguruje automatické škálování clusteru tak, aby udržovalo maximálně tři uzly v poolu uzlů.
Poznámka:
Tainty a velikosti VM lze nastavit pro sady uzlů pouze během jejich vytváření, ale nastavení automatického škálovače můžete aktualizovat kdykoliv.
-
Vytvořte jmenný prostor pomocí příkazu
kubectl create namespace
.kubectl create namespace gpu-resources
Vytvořte soubor s názvem nvidia-device-plugin-ds.yaml a vložte do něj následující YAML manifest, který je součástí projektu NVIDIA device plugin pro Kubernetes.
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.17.2 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
Vytvořte DaemonSet a pomocí příkazu
kubectl apply
potvrďte, že byl modul plugin zařízení NVIDIA úspěšně vytvořen.kubectl apply -f nvidia-device-plugin-ds.yaml
Nyní, když jste úspěšně nainstalovali plugin pro zařízení NVIDIA, můžete se přesvědčit, že vaše GPU jsou plánovatelná a spustit úlohu na GPU.
Přeskočit instalaci ovladače GPU
Pokud chcete řídit instalaci ovladačů NVIDIA nebo použít operátor 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í bitové kopie uzlu.
Poznámka:
Pole gpu-driver
API je navrženou alternativou pro zákazníky, kteří dříve používali --skip-gpu-driver-install
štítek uzlového fondu.
- Značka
--skip-gpu-driver-install
fondu uzlů v AKS bude vyřazena 14. srpna 2025. Pokud chcete zachovat stávající chování při vynechání automatické instalace ovladače GPU, upgradujte fondy uzlů na nejnovější verzi image uzlu a nastavte--gpu-driver
pole nanone
. Po 14. srpnu 2025 nebudete moct zřídit fondy uzlů AKS s podporou GPU pomocí značky fondu uzlů--skip-gpu-driver-install
, abyste obešli toto výchozí chování. Další informace najdete v částiskip-gpu-driver
Vyřazení značek.
Vytvořte fond uzlů pomocí
az aks nodepool add
příkazu a nastavte pole--gpu-driver
nanone
, aby se přeskočila výchozí instalace ovladače GPU.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
Nastavení pole rozhraní API nanone
během vytváření fondu uzlů přeskočí automatickou instalaci ovladače GPU. Jakékoli stávající uzly se nezmění. Fond uzlů můžete škálovat na nulu a pak zálohovat, aby se změna projevila.Pokud se zobrazí chyba
unrecognized arguments: --gpu-driver none
, aktualizujte verzi Azure CLI. Další informace najdete v tématu Než začnete.Podle těchto kroků můžete volitelně nainstalovat operátor NVIDIA GPU.
Potvrďte, že GPU jsou plánovatelné.
Po vytvoření clusteru ověřte, že se v Kubernetes dají schedovat gpu.
Vylistujte uzly ve vašem clusteru pomocí příkazu
kubectl get nodes
.kubectl get nodes
Vaše výstupy by měly vypadat podobně jako následující příklad:
NAME STATUS ROLES AGE VERSION aks-gpunp-28993262-0 Ready agent 13m v1.20.7
Potvrďte, že GPU lze naplánovat pomocí příkazu
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áš výstup by měl vypadat podobně jako následující zkrácený příkladový výstup:Name: aks-gpunp-28993262-0 Roles: agent Labels: accelerator=nvidia [...] Capacity: [...] nvidia.com/gpu: 1 [...]
Spusťte úlohu se zapnutou podporou GPU
Abyste viděli GPU v akci, můžete naplánovat úkol se zapnutým GPU pomocí příslušného požadavku na prostředky. V tomto příkladu spustíme úlohu Tensorflow na datové sadě MNIST.
Vytvořte soubor s názvem samples-tf-mnist-demo.yaml a vložte následující YAML manifest, který obsahuje limit zdrojů
nvidia.com/gpu: 1
.Poznámka:
Pokud při volání ovladačů obdržíte chybu nesouladu verzí, například "verze ovladače CUDA je nedostatečná pro verzi CUDA runtime", zkontrolujte tabulku kompatibility ovladačů 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í příkazu
kubectl apply
, který zpracovává soubor manifestu a vytváří definované objekty Kubernetes.kubectl apply -f samples-tf-mnist-demo.yaml
Zobrazit stav úlohy s podporou GPU
Sledujte průběh úlohy pomocí
kubectl get jobs
příkazu s příznakem--watch
. Může trvat několik minut, než se nejprve stáhne obraz a zpracuje dataset.kubectl get jobs samples-tf-mnist-demo --watch
Když sloupec COMPLETIONS ukazuje 1/1, práce byla úspěšně dokončena, jak je vidět 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 proces
kubectl --watch
pomocí Ctrl-C.Získejte název podu pomocí příkazu
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ý příklad výstupu logů z podu potvrzuje, že byla objevena správná GPU zařízení,
Tesla K80
.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
Vyčistěte zdroje
Odstraňte související objekty Kubernetes, které jste vytvořili v tomto článku, pomocí příkazu 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.
- Pro více informací o funkcích plánovače Kubernetes se podívejte na Nejlepší postupy pro pokročilé funkce plánovače v AKS.
- Pro více informací o službách Azure Kubernetes Service a Azure Machine Learning, navštivte:
Azure Kubernetes Service