在 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 集群的
ClusterAdminRBAC 角色 - 一个 AKS 集群。如果您需要创建一个,请参考 AKS 快速入门指南
- 您的 Azure 订阅中已分配了充足的 GPU VM 实例配额
推荐的 GPU VM 配置
下表列出了针对 llm-d 高性能 LLM 推理工作负载而优化的推荐 Azure GPU VM 规格
| GPU 型号 | VM 规格 | GPU 数量 | 每显卡显存 | 总显存 | RDMA over InfiniBand 支持 | 支持的最佳路径 |
|---|---|---|---|---|---|---|
| A100 | Standard_NC24ads_A100_v4 | 1 | 80 GB | 80 GB | ❌ | 智能推理调度 精准前缀缓存感知路由 |
| A100 | Standard_ND96asr_v4 | 8 | 40 GB | 320 GB | ✅ | 智能推理调度 精准前缀缓存感知路由 |
| A100 | Standard_ND96amsr_A100_v4 | 8 | 80 GB | 640 GB | ✅ | 智能推理调度 精准前缀缓存感知路由 |
| H100 | Standard_ND96isr_H100_v5 | 8 | 80 GB | 640 GB | ✅ | 智能推理调度 精准前缀缓存感知路由 P/D 分离部署 (需要 2 个节点并带有 vLLM 标志 --max-model-len=4500) |
| H200 | Standard_ND96isr_H200_v5 | 8 | 141 GB | 1128 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
...
要应用此配置:
- 使用
kubectl debug访问每个 GPU 节点
kubectl debug node/<gpu-node-name> -it --image=ubuntu --profile=sysadmin -- chroot /host
- 在调试 pod 中,编辑 containerd 配置文件
vim /etc/containerd/config.toml
-
如上所示添加或修改 NRI 配置部分。
-
重启 containerd 服务以应用更改
systemctl restart containerd
- 退出调试 pod
exit
- 对集群中的每个 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。