首页/AI/大模型部署与运维速查/NUMA 与 GPU 亲和性检查
推理环境与 GPU50 条

NUMA 与 GPU 亲和性检查

多路 CPU 机器上每张 GPU 挂在特定 NUMA 节点下:进程跨节点访问会引入额外开销;单机多实例部署按拓扑分配 CPU 与卡,行为更可预期。

为什么关心 NUMA

多路 CPU 的机器上,每张显卡都挂在某个 NUMA 节点下面,进程如果跨节点取内存、跨节点搬数据,就会多出延迟与带宽开销。单机多实例部署时,把进程与它使用的卡、内存绑在同一个节点,行为会稳定得多。低负载下这种差异往往看不出来,高负载时才会暴露成带宽争用。

基本信息

适用平台多路 CPU 的 Linux 服务器
常用工具lscpu、numactl、显卡拓扑查询
关键前提先确认机器确实是多 NUMA 节点,单节点机器不必强绑
权限要求查询免权限,绑定运行需要 root 或相应能力

典型使用场景

  • 单机多实例:每个实例绑到不同节点,减少互相抢内存带宽
  • 排查带宽瓶颈:跨节点访问会体现在性能计数与延迟曲线上
  • 容器部署:通过 CPU 集合与 numactl 把亲和性传进容器
  • 基线对比:绑定与不绑定各测一次,再决定是否作为默认配置
  • 容量规划:新机型 NUMA 布局不同,容量结论要重新实测

查看拓扑与绑定运行

查看拓扑与绑定运行
lscpu | grep -i numa                  # 查看 NUMA 节点数
numactl --hardware                    # 查看节点与内存分布
nvidia-smi topo -m                    # 显卡互联与 CPU 亲和矩阵
numactl --cpunodebind=0 --membind=0 python serve.py   # 绑定到节点零运行

输出逐项读法

命令看什么注意
lscpu节点数与每节点 CPU 核数单节点机器无需绑定
numactl --hardware各节点内存容量与距离距离越大跨节点代价越高
nvidia-smi topo -m卡间互联与卡到 CPU 的亲和重点看 CPU 亲和那一列
容器场景通过 CPU 集合与 numactl 传递亲和性;先测基线,再决定绑定是否真的带来收益。
绑定不是默认最优:低并发下把进程限制在单个节点会降低调度灵活性,验证过收益再固定成默认。
同机多卡并行时,每个进程最好与所用显卡处于同一节点;跨节点扩展要按拓扑数据核对,而不是按卡序号猜。

易错点

  • 低负载下跨节点访问表现正常:高负载时才暴露带宽争用,压测阶段更容易复现
  • 只绑 CPU 不绑内存:跨节点取内存的代价同样存在,两者要一起绑
  • 绑错节点:显卡挂在一号节点而进程绑到零号,结果比不绑更差
  • 把绑定写死进镜像:机型变化后拓扑不同,配置应随部署环境参数化

数据来源与参考

  • Linux numactl 手册页(man7.org)
  • NVIDIA nvidia-smi topo 文档(docs.nvidia.com/deploy/nvidia-smi)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌