在 Azure Kubernetes Service (AKS) 上建立完全受控的 GPU 節點集區 (預覽)

在 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 預覽。 因此,這些功能不適合實際執行用途。 如需詳細資訊,請參閱下列支援文章:

開始之前

管理型 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 容量。

備註

已啟用 GPU 的 VM 包含專用硬體,其受限於較高的價格和區域可用性。 如需詳細資訊,請參閱定價工具和區域可用性。

建立 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 版本來設定為預設作業系統。

  1. 使用具有旗標的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
    
  2. 確認受管理的 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 節點池(預覽版)

節點池準備好後,執行以下檢查以確認完整管理堆疊已安裝且健康。

  1. 從節點問題偵測器(NPD)驗證 GPU 專屬節點條件:

    GPU_NODE=$(kubectl get nodes -l agentpool=gpunp -o jsonpath='{.items[0].metadata.name}')
    kubectl describe node $GPU_NODE
    

    在受控 GPU 節點上,以下兩個條件都應回傳 False:

    狀況 狀態 Reason
    UnhealthyNvidiaDevicePlugin False HealthyNvidiaDevicePlugin
    UnhealthyNvidiaDCGMServices False HealthyNvidiaDCGMServices
  2. 確認節點上有管理 GPU 標籤:

    kubectl get node $GPU_NODE -o jsonpath='{.metadata.labels.kubernetes\.azure\.com/dcgm-exporter}'
    

    預期輸出: enabled。

  3. 確認 GPU 資源是否在節點的可分配資源中被公告:

    kubectl get node $GPU_NODE -o jsonpath='{.status.allocatable}'
    

    對於非 MIG 的節點池,輸出會包含 "nvidia.com/gpu": "1" (或依 SKU 而定可能包含更多)。 對於 MIG Mixed 節點池,輸出包含 MIG 專屬資源,例如 "nvidia.com/mig-1g.10gb": "7"。

  4. 執行一個範例工作負載,確認容器內的 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 資源。

後續步驟