你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在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 托管节点池:
-
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扩展。 - 在运行本文中的
kubectl示例之前,先使用az aks get-credentials获取 AKS 群集的凭据。
托管 GPU 组件
托管 GPU 节点池可以在每个节点上包含以下组件:
| 组件 | 它的作用是什么 | AKS 管理的内容 |
|---|---|---|
| NVIDIA GPU 驱动程序 | 内核模块和用户空间库,使 OS 和容器能够与 GPU 硬件通信。 | 驱动程序版本选择、在节点预配时安装,并在节点映像升级后重新安装。 |
| NVIDIA Kubernetes 设备插件 | 向 kubelet 通告 GPU 资源(nvidia.com/gpu、nvidia.com/mig-*)以便 Pod 可以请求这些资源的 DaemonSet 等效项。 |
每个 GPU 节点上的部署、配置(包括 MIG 策略)和生命周期。 |
| NVIDIA DCGM 和 DCGM 指标导出程序 |
数据中心 GPU 管理器收集 GPU 运行状况和利用率数据,并在端口DCGM_FI_DEV_GPU_UTIL上公开 Prometheus 指标(例如DCGM_FI_DEV_GPU_TEMP,19400)。 |
安装、服务启用以及用于采集指标的 kubernetes.azure.com/dcgm-exporter=enabled 节点标签。 |
| GPU 运行状况信号 | NPD 信号显示特定于 GPU 的节点条件,例如 UnhealthyNvidiaDevicePlugin 和 UnhealthyNvidiaDCGMServices。 |
GPU 节点上的 NPD 监控和条件报告。 |
安装配置文件
两个 gpuProfile 字段决定哪些组件 AKS 安装:
-
gpuProfile.driver(Install或None):AKS 是否安装 NVIDIA GPU 驱动程序。 -
gpuProfile.nvidia.managementMode(Managed或Unmanaged):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。 -
不可变性:
managementMode,migStrategy在driver创建时都是固定的。 若要更改配置,请创建新的节点池。
安装 aks-preview CLI 扩展
使用
aks-preview命令安装az extension addCLI 扩展。 需要版本 19.0.0b29 或更高版本。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=true创建的新 GPU 节点池。 有关详细信息,请参阅 AKS 上的“调整节点池大小”。 - 创建节点池后,
gpuProfile下的managementMode、migStrategy和driver字段是不可变的。 若要更改这些值,请创建新的节点池。 - 在预览期间,托管 GPU 节点池不支持集群自动扩缩器。 手动缩放这些池。
创建 AKS 管理的 GPU 节点池(预览版)
通过将 --enable-managed-gpu=true 传递给 az aks nodepool add,将托管 GPU 节点池添加到现有 AKS 群集中。 AKS 会自动设置gpuProfile.nvidia.managementModeManaged并安装 GPU 驱动程序、设备插件和 DCGM 指标导出程序。
若要使用默认的 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_NC6s_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 分区、支持的 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 节点池(预览版)
节点池准备就绪后,请运行以下检查,确认已安装完整托管堆栈并正常运行。
从节点问题检测器(NPD)验证特定于 GPU 的节点条件:
GPU_NODE=$(kubectl get nodes -l agentpool=gpunp -o jsonpath='{.items[0].metadata.name}') kubectl describe node $GPU_NODE在托管 GPU 节点上,以下条件应同时报告
False:条件 地位 原因 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 节点池(预览版)
使用 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.driver是Install)。 - AKS 不会安装设备插件、DCGM 指标导出程序或 GPU 运行状况规则。
gpuProfile.nvidia是null。 - 直到部署设备插件后,才播发
nvidia.com/gpu资源。
后续步骤
- 在已启用 AKS 的 GPU 托管节点上部署 示例 GPU 工作负载 。
- 了解从 GPU 节点池上托管的 NVIDIA DCGM 导出器中获取的 GPU 利用率和性能指标。
相关文章
- 将 AKS 上的 NVIDIA GPU 用于标准(非托管)GPU 体验。
- 有关 MIG 分区和支持的 VM 大小的背景信息,请参阅创建多实例 GPU (MIG) 节点池。
- 用于自行管理 GPU 驱动程序和设备插件的 NVIDIA GPU 操作员。
- 从管理的 NVIDIA DCGM 导出程序中监控 GPU 指标。
- 在 AKS 上通过节点问题检测器 (NPD) 进行 GPU 运行状况监视。
- 对 Windows GPU 节点池使用 AKS 上的Windows GPU。
- Azure GPU VM 大小,以获取已启用 NVIDIA GPU 的 VM 的完整列表。
- 在多个 AKS GPU 节点上运行分布式推理。