在 Azure Kubernetes Service (AKS) 上執行 NVIDIA GPU 工作負載,傳統上需要你在每個 GPU 節點安裝並維護 NVIDIA GPU 驅動程式、Kubernetes裝置插件,以及 GPU 指標匯出器。 這些元件可支援 GPU 排程、容器層級 GPU 存取及遙測,但手動安裝或透過 NVIDIA GPU 操作員 會增加營運負擔。
透過使用完全管理的 GPU 節點(預覽版),AKS 會為你安裝並維護 NVIDIA GPU 驅動程式、裝置外掛及資料中心 GPU 管理器 (DCGM)指標匯出器 。 GPU 節點池建立變成單一步驟,GPU 容量的行為就像其他 AKS 節點池一樣。 你可以使用管理型 GPU 節點搭配手動建立的 GPU 節點池,以及節點自動配置(NAP),包括 AKS 自動叢集。
你透過以下兩個欄位 gpuProfile.nvidia配置一個受管理的 GPU 節點池:
-
managementMode(Managed或Unmanaged)控制 AKS 是否安裝完整的受管 GPU 堆疊(驅動程式、裝置外掛及 DCGM 指標匯出器)或僅安裝驅動程式。 預設值為Unmanaged。 -
migStrategy(None、Single、 或Mixed) 為支援的 GPU SKU(如 A100 和 H100)設定多實例 GPU(MIG)策略。 預設值為None。
在本文中,你會配置一個受管理的 GPU 節點池,選擇性地啟用 MIG,驗證堆疊,並執行範例 GPU 工作負載。
這很重要
AKS 預覽功能可透過自助服務,以加入方式使用。 預覽是「依現況」及「可用時」提供的,並不包括在服務等級協定和有限保固之內。 客戶支援部門會盡最大努力,部分支援 AKS 預覽。 因此,這些功能不適合實際執行用途。 如需詳細資訊,請參閱下列支援文章:
開始之前
- 本文假設您目前擁有 AKS 叢集。 若您沒有叢集,請使用 Azure CLI、Azure PowerShell 或 Azure 入口網站來建立一個。
- 你需要安裝 Azure CLI 2.85.0 或更新版本。 若要尋找版本,請執行
az --version。 如果您需要安裝或升級,請參閱 安裝 Azure CLI。 - 您需要 安裝並升級至最新版本的
aks-preview擴充功能。 需要版本 19.0.0b29 或更新版本。 - 在執行本文中的範例之前,先使用
az aks get-credentials取得你的 AKS 叢集憑證kubectl。
管理型 GPU 元件
一個受管理的 GPU 節點池可以在每個節點包含以下組件:
| 組件 | 其功能是什麼 | AKS 所能管理的項目 |
|---|---|---|
| NVIDIA GPU 驅動程式 | 核心模組與使用者空間函式庫,讓作業系統和容器能與 GPU 硬體溝通。 | 驅動程式版本選擇、節點配置時安裝,以及節點映像升級後的重新安裝。 |
| NVIDIA Kubernetes 裝置外掛 | 一種類似 DaemonSet 的機制,用於向 kubelet 宣告 GPU 資源 (nvidia.com/gpu、nvidia.com/mig-*),以便 Pod 可以要求這些資源。 |
部署、配置(包括 MIG 策略)以及每個 GPU 節點的生命週期。 |
| NVIDIA DCGM 與 DCGM 指標匯出器 |
Data Center GPU Manager 收集 GPU 健康與使用率資料,並在埠 DCGM_FI_DEV_GPU_UTIL上揭露 Prometheus 指標(例如 DCGM_FI_DEV_GPU_TEMP、 19400)。 |
安裝、服務啟用,以及用來抓取指標的kubernetes.azure.com/dcgm-exporter=enabled節點標籤。 |
| GPU 健康訊號 | NPD 訊號會呈現 GPU 專屬的節點條件,如 UnhealthyNvidiaDevicePlugin 和 UnhealthyNvidiaDCGMServices。 |
NPD 監控與 GPU 節點狀況報告。 |
安裝設定檔
有兩個 gpuProfile 欄位決定 AKS 安裝哪些元件:
-
gpuProfile.driver(Install或None):AKS 是否安裝了 NVIDIA GPU 驅動程式。 -
gpuProfile.nvidia.managementMode(Managed或Unmanaged):AKS 是否也在驅動程式頂端安裝面向 Kubernetes 的 GPU 堆疊。
它們共同產生三種安裝設定檔:
| 安裝設定檔 | CLI 標誌 | AKS 安裝和管理的內容 |
|---|---|---|
| 完整受控堆疊 |
--enable-managed-gpu=true(或兩者皆非旗標) |
上述四個元件:驅動程式、裝置外掛、DCGM 指標匯出器,以及 NPD 中的 GPU 健康監控。 |
| 僅驅動程式 (預設) | --enable-managed-gpu=false |
只用 NVIDIA GPU 驅動程式。 你自己安裝和管理裝置外掛、指標匯出器和健康監控(例如用 NVIDIA GPU Operator)。 |
| 無(自帶) | --enable-managed-gpu=false --gpu-driver None |
什麼都沒有。 AKS 不安裝這四個零件中的任何一個。 您擁有完整堆疊。 請參考 「自備 GPU 驅動程式」。 |
預設值和覆寫
-
預設值:如果未傳入
--enable-managed-gpu或--gpu-driver,AKS 會在使用 NVIDIA GPU VM 大小建立的節點集區上套用僅驅動程式設定檔。 -
覆蓋:
managementMode: Managed需要驅動程式,因此當--gpu-driver None且驅動程式仍然安裝時,--enable-managed-gpu=true會被忽略。 要跳過驅動程式,請同時設定--enable-managed-gpu=false和--gpu-driver None。 -
不可變性:
managementMode、migStrategy、driver均在創建時固定。 要更改設定檔,請建立一個新的節點池。
安裝 aks-preview CLI 擴充功能
請使用 az extension add 指令安裝 aks-preview CLI 擴充功能。
az extension add --name aks-preview
使用 az extension update 指令更新擴充功能,以確保已安裝最新版本。
az extension update --name aks-preview
註冊 ManagedGPUExperiencePreview 功能旗標
使用 ManagedGPUExperiencePreview 命令,在您的訂用帳戶中註冊 az feature register 功能旗標。
az feature register --namespace Microsoft.ContainerService --name ManagedGPUExperiencePreview
局限性
- 此功能目前僅支援 啟用 NVIDIA GPU 的虛擬機器 (VM) 大小 。
- AKS 不支援更新一般用途節點集區以新增 GPU VM 大小。
- Windows 節點池不支援此功能,因為 GPU 指標不支援。 當你建立 Windows GPU 節點池時,AKS 會自動安裝並管理驅動程式和 DirectX 裝置外掛。 欲了解更多資訊,請參閱 AKS Windows GPU 文件。
- 不支援移轉現有的 多執行個體 GPU 節點集區以使用此功能。
- 不支援從現有 NVIDIA GPU 節點池升級到管理型 GPU 節點池。 要遷移,先封鎖並清空現有的 GPU 節點,然後將工作負載重新部署到用
--enable-managed-gpu=trueS 建立的新 GPU 節點池。 如需詳細資訊,請參閱 AKS 的 Resize node pools。 - 節點池建立後,下方
managementMode的migStrategy、driver及gpuProfile欄位皆為不變。 要更改這些值,請建立一個新的節點池。 - 在預覽期間,手動建立的管理 GPU 節點池不支援叢集自動擴展器。 您可以手動調整這些集區的規模,或使用 NAP 取得自動佈建的 GPU 容量。
建立 AKS 受控 GPU 節點集區 (預覽)
透過傳遞 --enable-managed-gpu=true 給 az aks nodepool add,將管理型 GPU 節點池加入現有的 AKS 叢集。 AKS 會自動設定gpuProfile.nvidia.managementModeManaged並安裝 GPU 驅動程式、裝置外掛和 DCGM 指標匯出器。
對於使用 NAP 的 AKS Automatic 或 AKS Standard 叢集,請將管理式 GPU 堆疊配置在 AKSNodeClass ,而非使用 az aks nodepool add。
若要使用預設的 Ubuntu 作業系統 (OS) SKU,您可以建立節點集區,而不指定 OS SKU。 節點集區會根據叢集的 Kubernetes 版本來設定為預設作業系統。
使用具有旗標的
az aks nodepool add命令,將--enable-managed-gpu=true節點集區新增至叢集。az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name gpunp \ --node-count 1 \ --node-vm-size Standard_NC4as_T4_v3 \ --node-taints sku=gpu:NoSchedule \ --enable-managed-gpu=true確認受管理的 NVIDIA GPU 軟體元件已成功安裝:
az aks nodepool show \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name gpunp您的輸出應包含下列值:
... "gpuProfile": { "driver": "Install", "driverType": "", "nvidia": { "managementMode": "Managed", "migStrategy": null } }, ...
建立一個受管理的多實例 GPU(MIG)節點池(預覽版)
對於支援多實例 GPU(如 A100 和 H100)的 GPU SKU,在建立 --gpu-mig-strategy 節點池時以旗標設定 MIG 策略。 此策略控制如何將 MIG 分割區呈現給 Kubernetes:
-
Single所有 MIG 實例皆匯聚於標準nvidia.com/gpu資源之下。 -
Mixed:每個 MIG 設定檔都會以個別資源的形式公開,例如nvidia.com/mig-1g.10gb。 -
None(預設):MIG 沒有設定。
節點池建立後,欄位 migStrategy 保持不變。
關於 MIG 分割、支援的虛擬機大小及 GPU 實例設定檔的背景,請參見「在 AKS 與 NVIDIA 多實例 GPU中建立多實例 GPU 節點池」。
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name mignp \
--node-count 1 \
--node-vm-size Standard_NC24ads_A100_v4 \
--node-taints sku=gpu:NoSchedule \
--enable-managed-gpu=true \
--gpu-instance-profile MIG1g \
--gpu-mig-strategy Single
在此配置下,Pod 會使用標準 nvidia.com/gpu 資源名稱請求 GPU 資源。
驗證受管理的 GPU 節點池(預覽版)
節點池準備好後,執行以下檢查以確認完整管理堆疊已安裝且健康。
從節點問題偵測器(NPD)驗證 GPU 專屬節點條件:
GPU_NODE=$(kubectl get nodes -l agentpool=gpunp -o jsonpath='{.items[0].metadata.name}') kubectl describe node $GPU_NODE在受控 GPU 節點上,以下兩個條件都應回傳
False:狀況 狀態 Reason UnhealthyNvidiaDevicePluginFalseHealthyNvidiaDevicePluginUnhealthyNvidiaDCGMServicesFalseHealthyNvidiaDCGMServices確認節點上有管理 GPU 標籤:
kubectl get node $GPU_NODE -o jsonpath='{.metadata.labels.kubernetes\.azure\.com/dcgm-exporter}'預期輸出:
enabled。確認 GPU 資源是否在節點的可分配資源中被公告:
kubectl get node $GPU_NODE -o jsonpath='{.status.allocatable}'對於非 MIG 的節點池,輸出會包含
"nvidia.com/gpu": "1"(或依 SKU 而定可能包含更多)。 對於 MIGMixed節點池,輸出包含 MIG 專屬資源,例如"nvidia.com/mig-1g.10gb": "7"。執行一個範例工作負載,確認容器內的 GPU 存取權限:
apiVersion: v1 kind: Pod metadata: name: managed-gpu-test spec: restartPolicy: Never tolerations: - key: "sku" operator: "Equal" value: "gpu" effect: "NoSchedule" containers: - name: gpu-test image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu command: ["nvidia-smi"] resources: limits: nvidia.com/gpu: 1檢視 Pod 記錄,以查看
nvidia-smi輸出,其中包含 GPU 裝置、驅動程式版本及 CUDA 版本:kubectl logs managed-gpu-test
擴展管理型 GPU 節點池(預覽版)
手動調整管理的 GPU 節點池的規模,並使用 az aks nodepool scale。 新節點安裝完整的管理型 GPU 堆疊。
az aks nodepool scale \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name gpunp \
--node-count 2
這很重要
在預覽階段,手動建立的管理 GPU 節點池不支援叢集自動縮放器。 您可以手動調整這些集區的規模,或使用 NAP 取得自動佈建的 GPU 容量。
替代安裝設定檔
如果 全管理堆疊 配置檔不適合,AKS 支援兩種 GPU 節點池的替代配置檔。
當你想讓 AKS 安裝並維護 NVIDIA GPU 驅動程式,但你打算自己部署裝置外掛和指標匯出器時,可以使用這個設定檔(例如搭配 NVIDIA GPU Operator)。 設定 --enable-managed-gpu=false:
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name gpunp \
--node-count 1 \
--node-vm-size Standard_NC4as_T4_v3 \
--node-taints sku=gpu:NoSchedule \
--enable-managed-gpu=false
在此配置下:
- AKS 安裝並管理 NVIDIA GPU 驅動程式(
gpuProfile.driver是Install)。 - AKS 不會安裝裝置外掛、DCGM 指標匯出器或 GPU 健康規則。
gpuProfile.nvidia是null。 - 在部署裝置外掛程式之前,不會宣告
nvidia.com/gpu資源。
後續步驟
- 在已啟用 AKS 受控 GPU 的節點上部署 範例 GPU 工作負載 。
- 請從 GPU 節點池上由管理的 NVIDIA DCGM 匯出工具中瞭解 GPU 使用情況和效能指標。
相關文章
- 在 AKS 上使用 NVIDIA GPU ,以獲得標準(非管理型)GPU 體驗。
- 建立一個多實例 GPU(MIG)節點池 ,以了解有關 MIG 分割及支援的虛擬機大小的背景資訊。
- NVIDIA GPU Operator 用來讓您自行管理 GPU 驅動程式和設備外掛。
- 監控受管理的 NVIDIA DCGM 匯出器中的 GPU 指標。
- 在 AKS 上使用 Node Problem Detector(NPD)進行 GPU 健康監控。
- 在 AKS 上使用 Windows GPU 於 Windows GPU 節點池。
- Azure GPU VM 大小 列出所有支援 NVIDIA GPU 的虛擬機。
- 在多個 AKS GPU 節點上執行分散式推斷。