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并且flatcar不支持 AMD GPU。
在您开始之前
- 本文假设你有现有 AKS 群集。 如果没有群集,请使用 Azure CLI、 Azure PowerShell 或 Azure 门户创建群集。
- 需要安装 Azure CLI 2.72.2 或更高版本才能设置
--gpu-driver字段。 运行az --version即可查找版本。 如果需要安装或升级,请参阅 安装 Azure CLI。 - 如果
aks-preview已安装 Azure CLI 扩展,请将版本更新为 18.0.0b2 或更高版本。
获取群集的凭据
使用 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 。