培训
模块
优化 Azure Kubernetes 服务 (AKS) 上的计算成本 - Training
了解可在 Azure 上采用哪些策略来通过使用 Azure Kubernetes 服务 (AKS) 优化云原生应用程序开发过程。
认证
Microsoft Certified: Azure Virtual Desktop Specialty - Certifications
在 Microsoft Azure 上为任何设备计划、交付、管理和监视虚拟桌面体验和远程应用。
你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
图形处理单元 (GPU) 通常用于计算密集型工作负荷,例如图形和可视化工作负载。 AKS 支持启用了 GPU 的 Windows 和 Linux 节点池来运行计算密集型 Kubernetes 工作负载。
本文可帮助你在新的和现有 AKS 群集上预配带有可计划 GPU 的 Windows 节点(预览)。
要查看受支持的启用了 GPU 的 VM,请参阅《Azure 中优化了 GPU 的 VM 大小。 对于 AKS 节点池,建议的最小大小为 Standard_NC6s_v3。 AKS 不支持 NVv4 系列(基于 AMD GPU)。
--skip-gpu-driver-install
字段与 az aks nodepool add
命令一起使用。 运行 az --version
即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI。--driver-type
字段与 az aks nodepool add
命令一起使用。 运行 az --version
即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI。使用 az aks get-credentials
命令获取 AKS 群集的凭据。 以下示例命令获取 myResourceGroup 资源组中 myAKSCluster 的凭据:
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
使用 NVIDIA GPU 会涉及安装各种 NVIDIA 软件组件(例如适用于 Kubernetes 的 DirectX 设备插件)、GPU 驱动程序等。 使用支持的已启用 GPU 的 VM 创建 Windows 节点池时,将会安装这些组件和相应的 NVIDIA CUDA 或 GRID 驱动程序。 对于 NC 和 ND 系列 VM 大小,已安装 CUDA 驱动程序。 对于 NV 系列 VM 大小,已安装 GRID 驱动程序。
重要
AKS 预览功能是可选择启用的自助功能。 预览功能是“按现状”和“按可用”提供的,不包括在服务级别协议和有限保证中。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:
使用 az extension add
或 az extension update
命令注册或更新 aks-preview 扩展。
# Register the aks-preview extension
az extension add --name aks-preview
# Update the aks-preview extension
az extension update --name aks-preview
使用 az feature register
命令注册 WindowsGPUPreview
功能标志。
az feature register --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
状态显示为“已注册”需要几分钟时间。
使用 az feature show
命令验证注册状态。
az feature show --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
当状态反映为已注册时,使用 az provider register
命令刷新 Microsoft.ContainerService 资源提供程序的注册。
az provider register --namespace Microsoft.ContainerService
要创建启用了 Windows GPU 的节点池,需要使用受支持的已启用 GPU 的 VM 大小,并指定 os-type
为 Windows
。 默认 Windows os-sku
是 Windows2022
,但支持所有 Windows os-sku
选项。
使用 az aks nodepool add
命令创建启用了 Windows GPU 的节点池。
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name gpunp \
--node-count 1 \
--os-type Windows \
--kubernetes-version 1.29.0 \
--node-vm-size Standard_NC6s_v3
检查 GPU 是否 可计划。
确认 GPU 可计划后,可以运行 GPU 工作负载。
默认情况下,AKS 为每个支持 GPU 的 VM 指定默认的 GPU 驱动程序类型。 由于工作负载和驱动程序兼容性对于 GPU 工作负载正常运行非常重要,因此可以为 Windows GPU 节点指定驱动程序类型。 Linux GPU 节点池不支持此功能。
创建具有 GPU 支持的 Windows 代理池时,可以选择使用 --driver-type
标志指定 GPU 驱动程序的类型。
可用选项包括:
备注
设置 --driver-type
标志时,你负责确保所选驱动程序类型与节点池的特定 VM 大小和配置兼容。 虽然 AKS 尝试验证兼容性,但在某些情况下,由于指定的驱动程序类型和基础 VM 或硬件之间不兼容,节点池创建可能会失败。
若要使用特定的 GPU 驱动程序类型创建启用了 Windows GPU 的节点池,请使用 az aks nodepool add
命令。
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name gpunp \
--node-count 1 \
--os-type Windows \
--kubernetes-version 1.29.0 \
--node-vm-size Standard_NC6s_v3 \
--driver-type GRID
例如,上述命令使用 GPU 驱动程序类型 GRID
创建启用了 GPU 的节点池。 选择此驱动程序类型会替代 NC 系列 VM SKU 的默认 CUDA
驱动程序类型。
在 AKS 中使用 N 系列 (NVIDIA GPU) VM 大小创建 Windows 节点池时,会自动安装 GPU 驱动程序和 Kubernetes DirectX 设备插件。 要绕过此自动安装,请使用以下步骤:
--skip-gpu-driver-install
跳过 GPU 驱动程序安装(预览版)。AKS 默认启用自动 GPU 驱动程序安装。 在某些情况下,例如安装自己的驱动程序时,可能需要跳过 GPU 驱动程序安装。
重要
AKS 预览功能是可选择启用的自助功能。 预览功能是“按现状”和“按可用”提供的,不包括在服务级别协议和有限保证中。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:
使用 az extension add
或 az extension update
命令注册或更新 aks-preview 扩展。
# Register the aks-preview extension
az extension add --name aks-preview
# Update the aks-preview extension
az extension update --name aks-preview
使用带有 --skip-gpu-driver-install
标志的 az aks nodepool add
命令创建节点池,以跳过自动 GPU 驱动程序安装。
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name gpunp \
--node-count 1 \
--os-type windows \
--os-sku windows2022 \
--skip-gpu-driver-install
备注
如果 AKS 上尚未载入正在使用的 --node-vm-size
,则无法使用 GPU,并且 --skip-gpu-driver-install
会不起作用。
可以为 Kubernetes DirectX 设备插件部署 DaemonSet,它会在每个节点上运行 Pod,以便为 GPU 提供所需的驱动程序。
使用 az aks nodepool add
命令将节点池添加到你的群集。
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name gpunp \
--node-count 1 \
--os-type windows \
--os-sku windows2022
使用 kubectl create namespace
命令创建命名空间。
kubectl create namespace gpu-resources
创建名为 k8s-directx-device-plugin.yaml 的文件,并粘贴适用于 Kubernetes 项目的 NVIDIA 设备插件中提供的以下 YAML 清单:
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:
# 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. This annotation works in tandem with the toleration below.
annotations:
scheduler.alpha.kubernetes.io/critical-pod: ""
labels:
name: nvidia-device-plugin-ds
spec:
tolerations:
# Allow this pod to be rescheduled while the node is in "critical add-ons only" mode.
# This, along with the annotation above marks this pod as a critical add-on.
- key: CriticalAddonsOnly
operator: Exists
- key: nvidia.com/gpu
operator: Exists
effect: NoSchedule
- key: "sku"
operator: "Equal"
value: "gpu"
effect: "NoSchedule"
containers:
- image: mcr.microsoft.com/oss/nvidia/k8s-device-plugin:v0.14.1
name: nvidia-device-plugin-ctr
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
使用 kubectl apply
命令创建 DaemonSet 并确认已成功创建 NVIDIA 设备插件。
kubectl apply -f nvidia-device-plugin-ds.yaml
现在,你已成功安装 NVIDIA 设备插件,可以检查 GPU 是否可计划。
创建完群集后,确认 GPU 在 Kubernetes 中是可计划的。
使用 kubectl get nodes
命令列出群集中的节点。
kubectl get nodes
输出应类似于以下示例输出:
NAME STATUS ROLES AGE VERSION
aks-gpunp-28993262-0 Ready agent 13m v1.20.7
使用 kubectl describe node
命令确认 GPU 可计划。
kubectl describe node aks-gpunp-28993262-0
在“容量”部分下,GPU 应列为 microsoft.com/directx: 1
。 输出应该类似于以下简洁示例输出:
Capacity:
[...]
microsoft.com.directx/gpu: 1
[...]
适用于 AKS 的容器见解监视以下 GPU 使用情况指标:
指标名称 | 指标维度(标记) | 说明 |
---|---|---|
containerGpuDutyCycle | container.azm.ms/clusterId 、container.azm.ms/clusterName 、containerName 、gpuId 、gpuModel 、gpuVendor |
在刚过去的采样周期(60 秒)中,GPU 处于繁忙/积极处理容器的状态的时间百分比。 占空比是 1 到 100 之间的数字。 |
containerGpuLimits | container.azm.ms/clusterId 、container.azm.ms/clusterName 、containerName |
每个容器可以将限值指定为一个或多个 GPU。 不能请求或限制 GPU 的一部分。 |
containerGpuRequests | container.azm.ms/clusterId 、container.azm.ms/clusterName 、containerName |
每个容器可以请求一个或多个 GPU。 不能请求或限制 GPU 的一部分。 |
containerGpumemoryTotalBytes | container.azm.ms/clusterId 、container.azm.ms/clusterName 、containerName 、gpuId 、gpuModel 、gpuVendor |
可用于特定容器的 GPU 内存量(以字节为单位)。 |
containerGpumemoryUsedBytes | container.azm.ms/clusterId 、container.azm.ms/clusterName 、containerName 、gpuId 、gpuModel 、gpuVendor |
特定容器使用的 GPU 内存量(以字节为单位)。 |
nodeGpuAllocatable | container.azm.ms/clusterId 、container.azm.ms/clusterName 、gpuVendor |
Kubernetes 可以使用的节点中的 GPU 数。 |
nodeGpuCapacity | container.azm.ms/clusterId 、container.azm.ms/clusterName 、gpuVendor |
节点中的 GPU 总数。 |
使用 kubectl delete job
命令移除在本文中创建的相关 Kubernetes 对象。
kubectl delete jobs windows-gpu-workload
培训
模块
优化 Azure Kubernetes 服务 (AKS) 上的计算成本 - Training
了解可在 Azure 上采用哪些策略来通过使用 Azure Kubernetes 服务 (AKS) 优化云原生应用程序开发过程。
认证
Microsoft Certified: Azure Virtual Desktop Specialty - Certifications
在 Microsoft Azure 上为任何设备计划、交付、管理和监视虚拟桌面体验和远程应用。