你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
某些 NVIDIA GPU 最多可分为七个独立的实例。 每个实例都拥有自己的流多处理器 (SM)(负责并行执行指令)和 GPU 内存。 有关 GPU 分区的详细信息,请参阅 NVIDIA MIG。
本文逐步讲解如何在Azure Kubernetes 服务 (AKS)群集中使用与 MIG 兼容的 VM 大小创建多实例 GPU 节点池。
提示
要体验 AKS 安装和维护 NVIDIA 驱动程序、设备插件和 DCGM 指标导出程序的完全托管的 MIG,请参阅创建托管的多实例 GPU (MIG) 节点池(预览版)。
先决条件和限制
- 具有活动订阅的Azure帐户。 如果没有帐户,可以免费创建一个帐户。
- Azure CLI 2.2.0 或更高版本安装和配置。 运行
az --version即可查找版本。 如果需要安装或升级,请参阅 Install Azure CLI。 - 已安装并配置 Kubernetes 命令行客户端 kubectl。 如果使用 Azure Cloud Shell,则已安装
kubectl。 若要在本地安装,可以使用az aks install-cli命令。 - 已安装并配置 Helm v3。 有关详细信息,请参阅安装 Helm。
- AKS 上的
Standard_NC40ads_H100_v5、Standard_ND96isr_H100_v5和 A100 GPU VM 大小目前支持多实例 GPU。
GPU 实例配置文件
GPU 实例配置文件定义 GPU 的分区方式。 下表显示了 Standard_ND96asr_v4 可用的 GPU 实例配置文件:
| 配置文件名称 | SM 的小数部分 | 内存的小数部分 | 创建的实例数 |
|---|---|---|---|
| MIG 1g.5gb | 1/7 | 1/8 | 7 |
| MIG 2g.10gb | 2/7 | 2/8 | 3 |
| MIG 3g.20GB | 3/7 | 4/8 | 2 |
| MIG 4G.20GB | 4/7 | 4/8 | 1 |
| MIG 7g.40gb | 7/7 | 8月8日 | 1 |
例如,MIG 1g.5gb 的 GPU 实例配置文件显示每个 GPU 实例有 1G SM(流式多处理器)和 5GB 内存。 在这种情况下,GPU 将分区为七个实例。
可用于此 VM 大小的 GPU 实例配置文件包括 MIG1g、MIG2g、MIG3g、MIG4g 和 MIG7g。
重要说明
创建节点池后,无法更改应用的 GPU 实例配置文件。
创建 AKS 群集
使用
az group create命令创建Azure资源组。az group create --name myResourceGroup --location southcentralus使用
az aks create命令创建 AKS 群集。az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --generate-ssh-keys使用
kubectl命令将az aks get-credentials配置为连接到 AKS 群集。az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
创建多实例 GPU 节点池
可以使用对 ARM API 的Azure CLI或 HTTP 请求来创建节点池。
使用
az aks nodepool add命令创建多实例 GPU 节点池,并指定 GPU 实例配置文件。 以下示例创建一个具有Standard_ND96asr_v4MIG 兼容 GPU VM 大小的节点池。az aks nodepool add \ --name aksMigNode \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --node-vm-size Standard_ND96asr_v4 \ --node-count 1 \ --gpu-instance-profile MIG1g
确定多实例 GPU (MIG) 策略
在安装 NVIDIA 插件之前,需要指定用于 GPU 分区的多实例 GPU (MIG) 策略:“单一策略”或“混合策略”。 这两种策略不会影响执行 CPU 工作负载的方式,但会影响 GPU 资源的显示方式。
-
“单一策略”:将每个 GPU 实例视为一个 GPU。 如果使用此策略,GPU 资源将显示为
nvidia.com/gpu: 1。 -
“混合策略”:公开 GPU 实例和 GPU 实例配置文件。 如果使用此策略,GPU 资源将显示为
nvidia.com/mig1g.5gb: 1。
安装 NVIDIA 设备插件和 GPU 功能发现 (GFD) 组件
将 MIG 策略设置为环境变量。 可以使用单一策略或混合策略。
# Single strategy export MIG_STRATEGY=single # Mixed strategy export MIG_STRATEGY=mixed使用
helm repo add和helm repo update命令添加 NVIDIA 设备插件 helm 存储库。helm repo add nvdp https://nvidia.github.io/k8s-device-plugin helm repo update使用
helm install命令安装 NVIDIA 设备插件。helm install nvdp nvdp/nvidia-device-plugin \ --version=0.17.0 \ --set migStrategy=${MIG_STRATEGY} \ --set gfd.enabled=true \ --namespace nvidia-device-plugin \ --create-namespace
注意
NVIDIA 设备插件的 Helm 安装整合了 Kubernetes 设备插件和 GFD 存储库。 使用 AKS 托管的多实例 GPU 时,不建议单独 Helm 安装 GFD 软件组件。
注意
如果通过自定义 DaemonSet 清单而不是 Helm 在 Azure Linux 上部署 NVIDIA 设备插件,则必须在设备插件容器中包含环境变量 NVIDIA_MIG_MONITOR_DEVICES=all。
确认多实例 GPU 功能
使用
kubectl命令返回群集节点列表,以验证与群集之间的kubectl get连接。kubectl get nodes -o wide使用
kubectl describe node命令确认节点具有多实例 GPU 功能。 以下示例命令描述名为 aksMigNode 的节点,该节点使用 MIG1g 作为 GPU 实例配置文件。kubectl describe node aksMigNode输出应与下面的示例输出类似:
# Single strategy output Allocatable: nvidia.com/gpu: 56 # Mixed strategy output Allocatable: nvidia.com/mig-1g.5gb: 56
计划工作
以下示例基于 Ubuntu 22.04 的 CUDA 基础映像版本 12.1.1(标记为 )。12.1.1-base-ubuntu22.04
单一策略
创建名为
single-strategy-example.yaml的文件,并将其复制到以下清单中。apiVersion: v1 kind: Pod metadata: name: nvidia-single spec: containers: - name: nvidia-single image: nvidia/cuda:12.1.1-base-ubuntu22.04 command: ["/bin/sh"] args: ["-c","sleep 1000"] resources: limits: "nvidia.com/gpu": 1使用
kubectl apply命令部署应用程序,并指定 YAML 清单的名称。kubectl apply -f single-strategy-example.yaml使用
kubectl exec命令验证分配的 GPU 设备。 此命令将返回群集节点的列表。kubectl exec nvidia-single -- nvidia-smi -L以下示例类似于显示已成功创建部署和服务的输出:
GPU 0: NVIDIA A100 40GB PCIe (UUID: GPU-48aeb943-9458-4282-da24-e5f49e0db44b) MIG 1g.5gb Device 0: (UUID: MIG-fb42055e-9e53-5764-9278-438605a3014c) MIG 1g.5gb Device 1: (UUID: MIG-3d4db13e-c42d-5555-98f4-8b50389791bc) MIG 1g.5gb Device 2: (UUID: MIG-de819d17-9382-56a2-b9ca-aec36c88014f) MIG 1g.5gb Device 3: (UUID: MIG-50ab4b32-92db-5567-bf6d-fac646fe29f2) MIG 1g.5gb Device 4: (UUID: MIG-7b6b1b6e-5101-58a4-b5f5-21563789e62e) MIG 1g.5gb Device 5: (UUID: MIG-14549027-dd49-5cc0-bca4-55e67011bd85) MIG 1g.5gb Device 6: (UUID: MIG-37e055e8-8890-567f-a646-ebf9fde3ce7a)
混合策略
创建名为
mixed-strategy-example.yaml的文件,并将其复制到以下清单中。apiVersion: v1 kind: Pod metadata: name: nvidia-mixed spec: containers: - name: nvidia-mixed image: nvidia/cuda:12.1.1-base-ubuntu22.04 command: ["/bin/sh"] args: ["-c","sleep 100"] resources: limits: "nvidia.com/mig-1g.5gb": 1使用
kubectl apply命令部署应用程序,并指定 YAML 清单的名称。kubectl apply -f mixed-strategy-example.yaml使用
kubectl exec命令验证分配的 GPU 设备。 此命令将返回群集节点的列表。kubectl exec nvidia-mixed -- nvidia-smi -L以下示例类似于显示已成功创建部署和服务的输出:
GPU 0: NVIDIA A100 40GB PCIe (UUID: GPU-48aeb943-9458-4282-da24-e5f49e0db44b) MIG 1g.5gb Device 0: (UUID: MIG-fb42055e-9e53-5764-9278-438605a3014c)
重要说明
CUDA 映像的 latest 标记已在 Docker Hub 弃用。 请参阅 NVIDIA 的存储库以获取最新图片和相应的标签。
疑难解答
如果在创建节点池后看不到多实例 GPU 功能,请确认 API 版本不早于 2021-08-01。
后续步骤
若要了解有关 Azure Kubernetes 服务 上的 GPU 的详细信息,请参阅:
- AKS 托管的 GPU 节点池(预览版) 提供完全托管的 MIG 体验,包括驱动程序、设备插件和 DCGM 指标导出器。
- 在 AKS 上创建启用了 Linux GPU 的节点池。
- 在 AKS 上创建启用了 GPU 的Windows节点池
- 了解 AKS 上的 GPU 工作负载的用例