你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在 Azure Kubernetes 服务 (AKS) 中创建多实例 GPU 节点池
Nvidia 的 A100 GPU 最多可分为七个独立的实例。 每个实例都有自己的内存和流式多处理器 (SM)。 有关 Nvidia A100 的详细信息,请关注 Nvidia A100 GPU。
本文介绍如何在 Azure Kubernetes 服务 (AKS) 群集中创建多实例 GPU 节点池。
先决条件和限制
- 具有活动订阅的 Azure 帐户。 如果没有帐户,可以免费创建一个帐户。
- 已安装并配置 Azure CLI 2.2.0 或更高版本。 运行
az --version
即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI。 - 已安装并配置 Kubernetes 命令行客户端 kubectl。 如果使用的是 Azure Cloud Shell,则
kubectl
已安装。 若要在本地安装,可以使用az aks install-cli
命令。 - 已安装并配置 Helm v3。 有关详细信息,请参阅安装 Helm。
- 不能将群集自动缩放程序用于多实例节点池。
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 将分区为七个实例。
此实例大小可用的 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\ --node-count 1 \ --generate-ssh-keys
创建多实例 GPU 节点池
可以使用 Azure CLI 或对 ARM API 的 HTTP 请求来创建节点池。
使用
az aks nodepool add
命令创建多实例 GPU 节点池,并指定 GPU 实例配置文件。az aks nodepool add \ --name mignode \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --node-vm-size Standard_ND96asr_v4 \ --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 功能发现
将 MIG 策略设置为环境变量。 可以使用单一策略或混合策略。
# Single strategy export MIG_STRATEGY=single # Mixed strategy export MIG_STRATEGY=mixed
使用
helm repo add
和helm repo update
命令添加 Nvidia 设备插件和 GPU 功能发现 helm 存储库。helm repo add nvdp https://nvidia.github.io/k8s-device-plugin helm repo add nvgfd https://nvidia.github.io/gpu-feature-discovery helm repo update
使用
helm install
命令安装 Nvidia 设备插件。helm install \ --version=0.14.0 \ --generate-name \ --set migStrategy=${MIG_STRATEGY} \ nvdp/nvidia-device-plugin
使用
helm install
命令安装 GPU 功能发现。helm install \ --version=0.2.0 \ --generate-name \ --set migStrategy=${MIG_STRATEGY} \ nvgfd/gpu-feature-discovery
确认多实例 GPU 功能
使用
az aks get-credentials
命令将kubectl
配置为连接到 AKS 群集。az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
使用
kubectl get
命令返回群集节点列表,以此验证与群集之间的连接。kubectl get nodes -o wide
使用
kubectl describe node
命令确认节点具有多实例 GPU 功能。 以下示例命令描述名为 mignode 的节点,该节点使用 MIG1g 作为 GPU 实例配置文件。kubectl describe node mignode
输出应与下面的示例输出类似:
# Single strategy output Allocatable: nvidia.com/gpu: 56 # Mixed strategy output Allocatable: nvidia.com/mig-1g.5gb: 56
计划工作
以下示例是基于 Ubuntu22.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)
重要
在 Docker Hub 上,CUDA 图像的 latest
标签已被弃用。 请参阅 NVIDIA 存储库以获取最新图片和相应的标签。
疑难解答
如果在创建节点池后看不到多实例 GPU 功能,请确认 API 版本不早于 2021-08-01。
后续步骤
有关 AKS 节点池的详细信息,请参阅管理 AKS 中群集的节点池。