系列:推理系统基础设施手记

推理系统基础设施(一):P900 + HiCache 下的 NUMA × PCIe × NIC 数据链路

0. 为什么 P900 + HiCache 必须看 NUMA / PCIe / NIC

HiCache 把 KV Cache 放到 Host DRAM 上,当成一张「主机侧大 KV 池」。当某次请求命中 Host KV 时,它并不是直接就在 P900 上被用掉——通常还要走一层:

Host KV (Host DRAM)
     │
     │  H2D (Host → Device)
     ↓
   PCIe
     │
     ↓
   P900
     │
     ↓
   HBM (Device Memory)

也就是说,Host KV 命中率高,不代表性能一定高。因为命中之后还有 PCIe 搬运成本。如果 PCIe 带宽不够 / 延迟高 / 或者 KV 跨 NUMA 节点访问,就可能出现:

Host KV Hit ↑
     ↓
   PCIe 搬运
     ↓
TTFT ↑ / TPS ↓

所以在这个场景里,PCIe、NUMA、NIC 必须放到同一条链路里一起看。下面先用一张拓扑图把硬件关系画清楚,再用一张五层优化图把「怎么调」落到操作上。

1. 拓扑图:一台服务器里到底发生了什么

P900 + HiCache 服务器拓扑:NUMA × PCIe × NIC NUMA Node 0 NUMA Node 2 PCIe Root Complex P900 HBM NIC RDMA Host DRAM Host KV (HiCache) PCIe PCIe H2D / D2H RDMA PCIe Root Complex P900 HBM NIC RDMA Host DRAM Host KV (HiCache) PCIe PCIe H2D / D2H RDMA NUMA interconnect remote NUMA 访问 +1 hop · ↑延迟 · ↓带宽 本 NUMA 内访问(零额外跳,理想) 跨 NUMA 远程访问(+1 跳,延迟↑ 带宽↓)

图 1:P900 + HiCache 的服务器拓扑。绿色 = P900 访问本 NUMA 节点的 Host KV(理想路径);红色虚线 = P900 跨 NUMA interconnect 去访问另一个节点的 Host KV(多一跳,延迟↑有效带宽↓)。

三者的分工一句话记:

核心数据链路(一句话版):

P900 HBM → PCIe → PCIe Root → NUMA Node → Host DRAM → Host KV

2. 五层优化图:从拓扑到绑定怎么落地

NUMA 优化五层:让「计算设备」和「它需要访问的内存」尽量靠近 1 识别硬件拓扑 numactl -H / lscpu -e / lspci -tv / cat numa_node → 画出「P900 → PCIe Root → NUMA」拓扑表 2 CPU 绑到对应 NUMA rank0/1 → NUMA0,rank2/3 → NUMA2(即 --numa-node 0 0 2 2 背后的思想) 3 Host KV 也放 Local NUMA CPU 线程 · Host KV · PCIe Root · P900 四者 locality 一致,而不是只绑 rank 4 NIC 也要考虑 NUMA PD / Mooncake / RDMA 场景下,P900 · Host KV · NIC 三者尽量同 NUMA 5 避免过度绑定 Locality ↔ 负载均衡找平衡;请求不均匀时,强绑死可能反而更差 实验矩阵:正确 NUMA > 自动 NUMA > Remote NUMA ⇒ 证明 HiCache 性能明显受 NUMA locality 影响

图 2:NUMA 优化五层。从「看清拓扑」到「绑 CPU、绑 KV、绑 NIC」,最后一步是别绑死——locality 和负载均衡之间找平衡。

3. 你现在最该测的不是「NUMA 开 / 关」

真正有价值的实验是对比不同 locality 配置,而不是简单的开/关:

配置目的
正确 topology binding看 locality 优化的收益上限
自动 NUMA(系统分配)baseline 对照
错误 / remote binding验证 NUMA 惩罚有多大
Shared KV + NUMA ONShared KV 的最佳 locality
Shared KV + NUMA OFFShared KV 对 NUMA 的敏感性

如果结果呈现:

正确 NUMA  >  自动 NUMA  >  Remote NUMA

基本就能证明:HiCache 的性能明显受 NUMA locality 影响——而这正是 --numa-node 0 0 2 2 这类参数存在的意义。

4. 一句话总结

PCIe 解决「P900 怎么和 Host / CPU 传数据」,NUMA 解决「这些 Host 数据放在哪个 CPU 内存节点、离 P900 够不够近」,NIC 在 PD / Mooncake 时也要就近。

所以你最终优化的是一整条链路:

P900  ↔  PCIe Root Complex  ↔  NUMA Node  ↔  Host DRAM  ↔  Host KV

而不是单独一个 --numa-node 参数。

觉得有用?欢迎点赞、收藏,或请作者喝咖啡 ☕️

支付宝收款码

支付宝

微信收款码

微信

💬 留言

评论由 Giscus 驱动(基于 GitHub Discussions)。 当前仓库 NaphJohn/LLM-blog 尚未启用 Discussions:请在 GitHub 仓库 Settings → General → Features 勾选 Discussions 后刷新本页,评论区即自动显示。