☰
OpenLake多节点RDMA部署全攻略:跨GPU集群共享KV池的3种后端怎么选
2026/10/2 13:02:04 网站建设 项目流程

OpenLake多节点RDMA部署全攻略:跨GPU集群共享KV池的3种后端怎么选

【免费下载链接】openlakeOpenLake is a high performance storage engine for efficient LLM inference and GPU Training项目地址: https://gitcode.com/gh_mirrors/ope/openlake

在 LLM 推理的多节点部署中,如何跨 GPU 机器共享 KV Cache 并通过 RDMA 低延迟访问,是降低首字延迟(TTFT)、节省 GPU 显存的核心问题。OpenLake 是一个为 LLM 推理与 GPU 训练打造的高性能存储引擎,支持把各节点的 KV 池聚合成一个跨机共享的缓存池。本文带你用 Helm 完成一次多节点 RDMA 部署,并针对 H2、UCX、DCT 三种传输后端给出一份可直接落地的选择指南。

为什么GPU集群需要一个跨节点的共享KV池

在多机推理(尤其是 PD 分离、前缀复用场景)下,如果每个节点各自维护 KV Cache:

  • 重复计算浪费 GPU 秒数:相同的 system prompt / 长上下文在不同节点反复 prefill;
  • 首字延迟(TTFT)被放大:命中不了本地缓存时只能重算;
  • 显存利用率上不去:热点 KV 无法在集群内流动复用。

OpenLake 把 KV 元数据集中管理,把 KV 数据放在 RDMA 可注册的内存 slab 中,各推理节点通过统一的 Reserve / Commit / Lookup / Release 生命周期操作共享池,架构细节可参考 docs/developer/kv_offload.rst。启用跨节点 KV 共享后,效果如下两图所示:

OpenLake的3种KV传输后端速览

OpenLake 的 KV 服务有三种传输形态,对应不同的硬件前提和使用场景:

后端传输方式硬件要求适用场景
H2HTTP/2 + 本机 POSIX 共享内存无 RDMA 要求单节点开发、Helm 渲染验证、CPU 冒烟测试
UCXUCX 框架跑在 IB/RoCE RDMA 之上IB/RoCE 网卡 + UCX 运行时多节点 P2P 生产部署,配置门槛最低
DCTDirect Verbs + DCT(Mellanox)支持 DCT 的 Mellanox 网卡(如mlx5_0)超低延迟、高扇入(高 maxClients)的大规模集群

⚠️ 关键区别:H2 客户端只能打开本机共享内存,无法把 KV 数据搬运到另一台机器。多节点 H2 示例因此禁用了 connector 输出;它只是"无 RDMA 环境也能验证部署流程"的入门选项,真正的跨机共享必须走 UCX 或 DCT。

三个后端在 charts/openlake/values.yaml 中由kv.transport(h2/rdma)和kv.rdma.backend(ucx/dct)两个开关决定,官方示例配置分别位于:

  • H2:charts/openlake/examples/kv-h2-values.yaml
  • UCX:charts/openlake/examples/kv-ucx-values.yaml
  • DCT:charts/openlake/examples/kv-dct-values.yaml

裸机部署时对应的服务端配置可参考 crates/openlake_server/configs/kv_rdma.toml(DCT 后端)与 crates/openlake_server/configs/kv_ucx.toml(UCX 后端),RDMA 传输实现位于 crates/openlake_io/src/rdma/。

Helm部署步骤:多节点RDMA KV池如何一键拉起

第1步:核对节点与RDMA设备

在每台目标节点上确认名字、IP 和数据面设备(IP 可以是专用于 RDMA 的地址,不要求等于 Kubernetes InternalIP):

kubectl get nodes -o wide ibv_devices && ibv_devinfo rdma link ucx_info -d # UCX 后端时检查

第2步:选择示例 values 并替换关键项

以 DCT 为例,复制kv-dct-values.yaml,替换镜像仓库、targets(节点名 + IP 的有序列表,顺序即节点 ID,切勿随意重排)、rdma.devName(如mlx5_0)和dcKey。UCX 后端把backend改为ucx即可,并可通过kv.rdma.env传入已在节点上验证过的变量,例如UCX_NET_DEVICES、UCX_TLS。

第3步:渲染并安装

helm lint charts/openlake -f charts/openlake/examples/kv-dct-values.yaml helm template openlake charts/openlake -f charts/openlake/examples/kv-dct-values.yaml helm upgrade --install openlake charts/openlake \ --namespace openlake --create-namespace \ -f charts/openlake/examples/kv-dct-values.yaml

Chart 会为每个目标节点创建一个 host 网络 StatefulSet 副本,并生成:

  • 一份 ConfigMap:包含有序target-ips、节点身份映射、OpenLake TOML 模板和 vLLM connector JSON;
  • 一个 headless Service,用于 RPC(9400)与遥测(9401)发现;
  • 每个 Pod 按实际调度到的节点推导self_id,不假设 StatefulSet 序号与机器的对应关系。

完整部署契约见 charts/openlake/README.md。

vLLM对接:让推理引擎挂上共享KV池

安装后,每个 vLLM 实例需要拿到同一份渲染出的 connector JSON(顺序必须与 Helm 生成的一致):

kubectl --namespace openlake get configmap openlake-openlake-kv-config \ --output jsonpath='{.data.vllm-kv-transfer-config\.json}'

输出形如:

{ "kv_connector": "OpenLakeConnector", "kv_role": "kv_both", "kv_connector_extra_config": { "openlake_nodes": ["10.0.0.11:9400", "10.0.0.12:9400"], "openlake_device": "ucx" } }

把它传给vllm serve --kv-transfer-config或挂载给 vLLM Deployment 即可。openlake_device留空时自动选择:UCX 后端用ucx,DCT 后端用rdma.devName。Python 侧实现可看 external/connectors/vllm/openlake_connector.py 与指标模块 external/connectors/vllm/openlake_metrics.py。

💡 提示:新增、删除或重排targets会改变 peer ID 与缓存落位,需要与所有 vLLM 部署同步并重启,KV slab 应视为易失缓存。

部署验证与常见故障排查

✅ 健康检查三板斧:

kubectl --namespace openlake rollout status statefulset/openlake-openlake kubectl --namespace openlake logs statefulset/openlake-openlake kubectl --namespace openlake port-forward pod/openlake-openlake-0 9401:9401 curl http://127.0.0.1:9401/v1/telemetry/openlake

常见故障速查(详见 charts/openlake/README.md 的 "Updates and failure modes"):

现象常见原因
Pod 长期PendingnodeName写错 / 节点不可调度 / 主机端口被占用 / 内存申请超出可分配量
RDMA Pod 起不来无法打开/dev/infiniband、设备插件或 UCX/OFED 未就绪、镜像缺少rdmafeature
端口通但 KV 拉取失败kv_agents中的 IP 不可达(渲染不会替你校验地址)
升级后节点身份变化targets顺序变了,peer ID 与缓存落位全部漂移

3种KV后端怎么选:一页速查

  • 没有 IB/RoCE,只想先把流程跑通→ H2(transport: h2),用它验证 Helm 渲染、调度与健康检查;单节点 + vLLM 冒烟测试可直接启用vllmSmokeTest(示例见 charts/openlake/examples/kv-vllm-smoke-values.yaml)。
  • 有 IB/RoCE、想最快上生产→ UCX(backend: ucx),无需 DCT 支持,可透传集群验证过的UCX_NET_DEVICES等环境,对 GPU Direct 友好。
  • Mellanox ConnectX 集群、追求极致延迟与高并发扇入→ DCT(backend: dct),显式指定devName、dcKey、srqDepth、maxClients等 verbs 参数,参数模板见 crates/openlake_server/configs/kv_rdma.toml。

🔍 一句话总结:H2 用于"先跑通",UCX 用于"好落地",DCT 用于"压极限"。

参考资料

  • 部署总览与 values 说明:charts/openlake/README.md
  • KV 卸载架构(本地 / 跨节点):docs/developer/kv_offload.rst
  • 集群操作与排障:docs/cluster_operations.rst
  • KV 客户端传输层(Protocol trait:attach/put/get/reset):crates/openlake_kv_client/src/transport.rs
  • RDMA 后端实现(DCT、bootstrap、内存注册):crates/openlake_io/src/rdma_backend.rs
  • vLLM 连接器与测试:external/connectors/vllm/

【免费下载链接】openlakeOpenLake is a high performance storage engine for efficient LLM inference and GPU Training项目地址: https://gitcode.com/gh_mirrors/ope/openlake

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询