Azure 上的 AMD GPU 虚拟机(VM) 大小可以灵活地提供性能和成本,同时提供高计算容量,同时允许你为工作负荷需求选择合适的配置。 AKS 支持支持 AMD GPU 的 Linux 节点池来运行计算密集型 Kubernetes 工作负载。
本文可帮助你在新的和现有的 AKS 群集上预配具有可计划 AMD GPU 的节点。
局限性
- AKS 目前支持由
Standard_ND96isr_MI300X_v5
提供支持的 Azure VM 大小。 - AKS 不支持更新现有节点池以添加 AMD GPU VM 大小。
- 不支持使用 AMD GPU VM 大小更新未启用 AMD GPU 的节点池。
-
AzureLinux
和Windows
尚未支持 AMD GPU。
在您开始之前
- 本文假设你有现有 AKS 群集。 如果没有群集,请使用 Azure CLI、 Azure PowerShell 或 Azure 门户创建群集。
- 需要安装 Azure CLI 2.72.2 或更高版本才能设置
--gpu-driver
字段。 运行az --version
即可查找版本。 如果需要进行安装或升级,请参阅 [安装 Azure CLI][install-azure-cli]。 - 如果
aks-preview
已安装 Azure CLI 扩展,请将版本更新为 18.0.0b2 或更高版本。
注释
启用 GPU 的 VM 包含专用硬件,这些硬件定价较高,其可用性受区域限制。 有关详细信息,请参阅 [定价][azure-pricing] 工具和 [区域可用性][azure-availability]。
获取群集的凭据
使用 az aks get-credentials
命令获取 AKS 群集的凭据。 以下示例命令获取 myAKSCluster
资源组中群集 myResourceGroup
的凭据:
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
使用 AMD GPU 的选项
使用 AMD GPU 涉及安装各种 AMD GPU 软件组件,例如 用于 Kubernetes 的 AMD 设备插件、GPU 驱动程序等。
注释
目前,AKS 不会管理也不自动安装 GPU 驱动程序或已启用 AMD GPU 的节点池上的 AMD GPU 设备插件。
注册 AKSInfinibandSupport 功能
如果 AMD GPU VM 大小启用了 RDMA 并使用了
r
命名约定(例如Standard_ND96isr_MI300X_v5
),则需确保节点池中的计算机位于同一物理 Infiniband 网络上。 为此,请使用AKSInfinibandSupport
以下命令注册az feature register
功能标志:az feature register --name AKSInfinibandSupport --namespace Microsoft.ContainerService
使用
az feature show
命令验证注册状态:az feature show \ --namespace "Microsoft.ContainerService" \ --name AKSInfinibandSupport
使用
az aks nodepool add
命令创建支持 AMD GPU 的节点池,并通过将 API 字段--gpu-driver
设置为值none
跳过默认驱动程序安装:az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name gpunp \ --node-count 1 \ --node-vm-size Standard_ND96isr_MI300X_v5 \ --gpu-driver none
注释
AKS 当前强制使用
gpu-driver
字段来跳过 AMD GPU 节点池创建时的自动驱动程序安装。
在 AKS平台上部署 AMD GPU 管理程序
AMD GPU作员自动管理并部署预配 GPU 所需的所有 AMD 软件组件,包括驱动程序安装、Kubernetes 的 AMD 设备插件、AMD 容器运行时等。 由于 AMD GPU作员处理这些组件,因此无需在 AKS 群集上单独安装 AMD 设备插件。 这也意味着应该跳过自动GPU驱动程序安装,以便在AKS上使用AMD GPU操作器。
按照 AMD 文档 安装 GPU 操作员。
使用
kubectl get nodes
以下命令检查节点池中 AMD GPU 的状态:kubectl get nodes -o custom-columns=NAME:.metadata.name,GPUs:.status.capacity.'amd\.com/gpu'
输出应类似于以下示例输出:
NAME STATUS ROLES AGE VERSION aks-gpunp-00000000 Ready agent 2m4s v1.31.7
确认 AMD GPU 是可调度的
创建节点池后,请确认 AKS 群集中 GPU 是否可调度。
使用
kubectl get nodes
命令列出群集中的节点。kubectl get nodes
使用
kubectl describe node
命令确认 GPU 是否可调度。kubectl describe node aks-gpunp-00000000
在“容量”部分下,GPU 应列为
amd.com/gpu: 1
。 输出应该类似于以下简洁示例输出:Name: aks-gpunp-00000000 Roles: agent Labels: accelerator=amd [...] Capacity: [...] amd.com/gpu: 1 [...]
运行启用了 AMD GPU 的工作负荷
若要查看 AMD GPU 的运行情况,可以使用相应的资源请求来计划启用了 GPU 的工作负荷。 在此示例中,我们将针对 MNIST 数据集运行一个 Tensorflow 作业。
创建名为“samples-tf-mnist-demo.yaml”的文件并粘贴以下 YAML 清单,它包含
amd.com/gpu: 1
的资源限制:apiVersion: batch/v1 kind: Job metadata: labels: app: samples-tf-mnist-demo name: samples-tf-mnist-demo spec: template: metadata: labels: app: samples-tf-mnist-demo spec: containers: - name: samples-tf-mnist-demo image: mcr.azk8s.cn/azuredocs/samples-tf-mnist-demo:gpu args: ["--max_steps", "500"] imagePullPolicy: IfNotPresent resources: limits: amd.com/gpu: 1 restartPolicy: OnFailure tolerations: - key: "sku" operator: "Equal" value: "gpu" effect: "NoSchedule"
使用
kubectl apply
命令运行作业,该命令会分析清单文件并创建定义的 Kubernetes 对象。kubectl apply -f samples-tf-mnist-demo.yaml
查看启用了 GPU 的工作负载的状态
将
kubectl get jobs
命令与--watch
标志配合使用,以监视作业的进度。 首先拉取映像并处理数据集可能需要几分钟时间。kubectl get jobs samples-tf-mnist-demo --watch
当 COMPLETIONS 列显示 1/1 时,作业已成功完成,如以下示例输出所示:
NAME COMPLETIONS DURATION AGE samples-tf-mnist-demo 0/1 3m29s 3m29s samples-tf-mnist-demo 1/1 3m10s 3m36s
使用
kubectl --watch
退出 进程。使用
kubectl get pods
命令获取 pod 的名称。kubectl get pods --selector app=samples-tf-mnist-demo
清理资源
使用 kubectl delete job
命令移除在本文中创建的相关 Kubernetes 对象。
kubectl delete jobs samples-tf-mnist-demo
后续步骤
- 在 AKS 上浏览基于 GPU 的应用程序 的不同存储选项 。
- 详细了解 AKS 上的光线群集。
- 对计算密集型 AKS 工作负荷使用 NVIDIA GPU 。