跳转至正文

在 Azure Kubernetes Service (AKS) 上部署 llm-d

本指南提供有关配置 Azure Kubernetes Service (AKS) 集群以使用 llm-d 运行 LLM 推理工作负载的说明。

先决条件

在继续执行本指南之前,请确保您已满足以下要求:

  • 客户端设置先决条件
  • 已安装 aks-preview 扩展的最新版本 Azure CLI (az extension add --upgrade --name aks-preview)
  • 为您的用户帐户分配了针对目标 AKS 集群的 ClusterAdmin RBAC 角色
  • 一个 AKS 集群。如果您需要创建一个,请参考 AKS 快速入门指南
  • 您的 Azure 订阅中已分配了充足的 GPU VM 实例配额

下表列出了针对 llm-d 高性能 LLM 推理工作负载而优化的推荐 Azure GPU VM 规格

GPU 型号VM 规格GPU 数量每显卡显存总显存RDMA over InfiniBand 支持支持的最佳路径
A100Standard_NC24ads_A100_v4180 GB80 GB智能推理调度
精准前缀缓存感知路由
A100Standard_ND96asr_v4840 GB320 GB智能推理调度
精准前缀缓存感知路由
A100Standard_ND96amsr_A100_v4880 GB640 GB智能推理调度
精准前缀缓存感知路由
H100Standard_ND96isr_H100_v5880 GB640 GB智能推理调度
精准前缀缓存感知路由
P/D 分离部署 (需要 2 个节点并带有 vLLM 标志 --max-model-len=4500)
H200Standard_ND96isr_H200_v58141 GB1128 GB智能推理调度
精准前缀缓存感知路由
P/D 分离部署 (需要 2 个节点)
基于 LeaderWorkerSet 的宽专家并行 (EP/DP) (需要 4 个节点)

集群配置

GPUDirect RDMA 对于在 P/D 分离部署宽专家并行 等高级部署模式中实现最佳性能至关重要。要启用 GPUDirect RDMA,您必须创建并配置具有适当 VM 规格的 GPU 节点池,并安装所需的驱动程序。

创建 GPU 节点池

在创建 GPU 节点池之前,您必须决定驱动程序安装策略。有两种选择:

选项 1:自管理驱动程序安装

通过这种方式,您可以保留对 NVIDIA 驱动程序安装过程的完全控制。在创建节点池时使用 --gpu-driver none 标志,以防止 AKS 自动安装 NVIDIA 驱动程序。

az aks nodepool add \
--resource-group "${AZURE_RESOURCE_GROUP}" \
--cluster-name "${CLUSTER_NAME}" \
--name "${NODEPOOL_NAME}" \
--node-count "${NODEPOOL_NODE_COUNT}" \
--node-vm-size "${NODEPOOL_VM_SIZE}" \
--os-sku Ubuntu \
--gpu-driver none
选项 2:AKS 管理驱动程序安装

通过这种方式,AKS 会自动处理 NVIDIA GPU 驱动程序的安装。创建节点池时无需指定 --gpu-driver 参数,即可使用托管驱动程序安装。

az aks nodepool add \
--resource-group "${AZURE_RESOURCE_GROUP}" \
--cluster-name "${CLUSTER_NAME}" \
--name "${NODEPOOL_NAME}" \
--node-count "${NODEPOOL_NODE_COUNT}" \
--node-vm-size "${NODEPOOL_VM_SIZE}" \
--os-sku Ubuntu

安装 DOCA-OFED 驱动程序

对于支持 RDMA over InfiniBand 的 VM 规格,必须安装 DOCA-OFED 驱动程序才能启用它。请使用 Network Operator 部署驱动程序。

helmfile apply -f network-operator.helmfile.yaml

配置 nvidia-peermem 内核模块

安装 DOCA-OFED 后,您可能需要安装 NVIDIA GPU 驱动程序并启用 nvidia-peermem 内核模块,具体取决于您选择的安装方法。

选项 1:自管理驱动程序安装

我们推荐使用 NVIDIA GPU Operator 来管理 NVIDIA GPU 驱动程序和相关 GPU 组件的安装。通过 GPU Operator 安装驱动程序包括启用 GPUDirect RDMA over InfiniBand 所需的 nvidia-peermem 内核模块。

helmfile apply -f gpu-operator.helmfile.yaml
选项 2:AKS 管理驱动程序安装

AKS 安装的 GPU 驱动程序默认不会启用 nvidia-peermem 内核模块。该模块是 GPUDirect RDMA over InfiniBand 所必需的。要加载此模块,请部署 nvidia-peermem-reloader DaemonSet。

# Deploy the nvidia-peermem-reloader DaemonSet
# Reference: https://github.com/Azure/aks-rdma-infiniband/blob/main/configs/nvidia-peermem-reloader/ds.yaml
kubectl apply -f https://raw.githubusercontent.com/Azure/aks-rdma-infiniband/refs/heads/main/configs/nvidia-peermem-reloader/ds.yaml

随后,安装 NVIDIA 设备插件 (device plugin) 以启用 Kubernetes 中的 GPU 资源管理。

helmfile apply -f nvidia-device-plugin.helmfile.yaml

启用节点资源接口 (NRI)

AKS 工作节点对每个容器强制执行默认的最大锁定内存限制 (ulimit -l) 为 64 KiB。此限制不足以支持 vLLM 的 NIXL 连接器,后者需要大幅提高锁定内存分配。要解决此限制,请在集群中的所有 GPU 节点上启用节点资源接口 (NRI)。NRI 允许集成可以调整容器最大锁定内存限制的插件。

修改 containerd 配置

必须在 containerd 配置中显式启用 NRI。节点 /etc/containerd/config.toml 中所需的配置更改如下:

...
[plugins."io.containerd.nri.v1.nri"]
disable = false
...

要应用此配置:

  1. 使用 kubectl debug 访问每个 GPU 节点
kubectl debug node/<gpu-node-name> -it --image=ubuntu --profile=sysadmin -- chroot /host
  1. 在调试 pod 中,编辑 containerd 配置文件
vim /etc/containerd/config.toml
  1. 如上所示添加或修改 NRI 配置部分。

  2. 重启 containerd 服务以应用更改

systemctl restart containerd
  1. 退出调试 pod
exit
  1. 对集群中的每个 GPU 节点重复这些步骤。

部署 ulimit 调整插件

在成功启用 NRI 并重启所有 GPU 节点上的 containerd 后,部署 ulimit 调整插件 (ulimit-adjuster),以自动增加 GPU 工作负载的锁定内存限制。

kubectl apply -k https://github.com/containerd/nri/contrib/kustomize/ulimit-adjuster

验证

完成配置后,验证您的集群是否已针对 GPU 工作负载正确设置。

验证节点资源

确认您的节点上已正确暴露 GPU 和 RDMA 资源

kubectl describe node <gpu-node-name>

...
Capacity:
nvidia.com/gpu: 8
rdma/ib: 8
...

注意: nvidia.com/gpu 资源代表节点上可用的物理 GPU 数量,而 rdma/ib 表示可以并发利用 RDMA over InfiniBand 的 pod 最大数量。作为最佳实践,每个 pod 应当精确请求一个 rdma/ib 资源,与其消耗的 GPU 数量无关。

联系人

内容来源

此内容自动同步自 llm-d/llm-d 仓库 main 分支下的 docs/infra-providers/aks/README.md

📝 如需建议更改,请 编辑源文件创建 Issue