你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure Kubernetes 服务(AKS)上创建完全托管的 GPU 节点池(预览版)

在Azure Kubernetes 服务 (AKS)上运行 NVIDIA GPU 工作负载通常需要在每个 GPU 节点上安装和维护 NVIDIA GPU 驱动程序、Kubernetes 设备插件和 GPU 指标导出程序。 这些组件支持 GPU 计划、容器级 GPU 访问和遥测,但手动或通过 NVIDIA GPU 操作员 安装它们会增加操作开销。

使用完全托管的 GPU 节点(预览版),AKS 为你安装和维护 NVIDIA GPU 驱动程序、设备插件和数据中心 GPU 管理器 (DCGM)指标导出程序 。 GPU 节点池创建成为一个步骤,GPU 容量的行为与其他任何 AKS 节点池一样。

通过 gpuProfile.nvidia 下的两个字段配置 GPU 托管节点池:

  • managementModeManagedUnmanaged)控制 AKS 是否安装完整的托管 GPU 堆栈(包括驱动程序、设备插件和 DCGM 指标导出程序)或仅安装驱动程序。 默认值为 Unmanaged
  • migStrategyNoneSingleMixed) 为支持的 GPU SKU(如 A100 和 H100)设置多实例 GPU(MIG)策略。 默认值为 None

在本文中,你将预配托管 GPU 节点池,(可选)启用 MIG、验证堆栈并运行示例 GPU 工作负荷。

重要

AKS 预览功能可在自助服务和自愿选择的基础上启用。 预览版按“现状”和“视供应情况”提供,它们不包括在服务级别协议和有限保证范围内。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:

在您开始之前

托管 GPU 组件

托管 GPU 节点池可以在每个节点上包含以下组件:

组件 它的作用是什么 AKS 管理的内容
NVIDIA GPU 驱动程序 内核模块和用户空间库,使 OS 和容器能够与 GPU 硬件通信。 驱动程序版本选择、在节点预配时安装,并在节点映像升级后重新安装。
NVIDIA Kubernetes 设备插件 向 kubelet 通告 GPU 资源(nvidia.com/gpunvidia.com/mig-*)以便 Pod 可以请求这些资源的 DaemonSet 等效项。 每个 GPU 节点上的部署、配置(包括 MIG 策略)和生命周期。
NVIDIA DCGM 和 DCGM 指标导出程序 数据中心 GPU 管理器收集 GPU 运行状况和利用率数据,并在端口DCGM_FI_DEV_GPU_UTIL上公开 Prometheus 指标(例如DCGM_FI_DEV_GPU_TEMP19400)。 安装、服务启用以及用于采集指标的 kubernetes.azure.com/dcgm-exporter=enabled 节点标签。
GPU 运行状况信号 NPD 信号显示特定于 GPU 的节点条件,例如 UnhealthyNvidiaDevicePluginUnhealthyNvidiaDCGMServices GPU 节点上的 NPD 监控和条件报告。

安装配置文件

两个 gpuProfile 字段决定哪些组件 AKS 安装:

  • gpuProfile.driverInstallNone):AKS 是否安装 NVIDIA GPU 驱动程序。
  • gpuProfile.nvidia.managementModeManagedUnmanaged):AKS 是否还会在驱动程序顶部安装面向 Kubernetes 的 GPU 堆栈。

它们共同生成三个安装配置文件:

安装配置文件 CLI 标志 AKS 安装和管理的内容
完全托管堆栈 --enable-managed-gpu=true (或不使用任何标志) 以上所有四个组件:NPD 中的驱动程序、设备插件、DCGM 指标导出者和 GPU 运行状况监视。
仅限驱动程序 (默认) --enable-managed-gpu=false 仅限 NVIDIA GPU 驱动程序。 可以自行安装和管理设备插件、指标导出者和运行状况监视(例如,使用 NVIDIA GPU 操作员)。
无 (BYO) --enable-managed-gpu=false --gpu-driver None 无。 AKS 不会安装四个组件中的任何一个。 你拥有全栈。 请参阅 “自带 GPU 驱动程序”。

默认值和替代值

  • 默认值:如果你不传递 --enable-managed-gpu--gpu-driver,则 AKS 会在使用启用 NVIDIA GPU 的 VM 大小创建的节点池上应用仅驱动程序配置文件。
  • 替代:由于 managementMode: Managed 需要驱动程序,因此,当仍然安装了 --enable-managed-gpu=true 和驱动程序时,--gpu-driver None 会被忽略。 若要跳过驱动程序,请同时设置 --enable-managed-gpu=false--gpu-driver None
  • 不可变性managementModemigStrategydriver 创建时都是固定的。 若要更改配置,请创建新的节点池。

安装 aks-preview CLI 扩展

  1. 使用 aks-preview 命令安装 az extension add CLI 扩展。 需要版本 19.0.0b29 或更高版本。

    az extension add --name aks-preview
    
  2. 使用 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=true创建的新 GPU 节点池。 有关详细信息,请参阅 AKS 上的“调整节点池大小”。
  • 创建节点池后,gpuProfile下的managementModemigStrategydriver字段是不可变的。 若要更改这些值,请创建新的节点池。
  • 在预览期间,托管 GPU 节点池不支持集群自动扩缩器。 手动缩放这些池。

注释

启用 GPU 的 VM 包含专用硬件,这些硬件定价较高,其可用性受区域限制。 有关详细信息,请参阅定价工具和区域可用性

创建 AKS 管理的 GPU 节点池(预览版)

通过将 --enable-managed-gpu=true 传递给 az aks nodepool add,将托管 GPU 节点池添加到现有 AKS 群集中。 AKS 会自动设置gpuProfile.nvidia.managementModeManaged并安装 GPU 驱动程序、设备插件和 DCGM 指标导出程序。

若要使用默认的 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_NC6s_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 分区、支持的 VM 大小和 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

    条件 地位 原因
    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 节点池(预览版)

使用 az aks nodepool scale 手动扩展托管 GPU 节点池。 新节点安装完整的托管 GPU 堆栈。

az aks nodepool scale \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name gpunp \
    --node-count 2

重要

在预览期间,托管 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_NC6s_v3 \
    --node-taints sku=gpu:NoSchedule \
    --enable-managed-gpu=false

使用此配置时:

  • AKS 安装和管理 NVIDIA GPU 驱动程序(gpuProfile.driverInstall)。
  • AKS 不会安装设备插件、DCGM 指标导出程序或 GPU 运行状况规则。 gpuProfile.nvidianull
  • 直到部署设备插件后,才播发 nvidia.com/gpu 资源。

后续步骤