一、概述

在使用 8 卡 RTX 4090 搭建 AI 训练服务器时,合理配置 NUMA 策略,特别是 AMD 平台上的 NPS(NUMA Per Socket)参数,可以显著影响 NCCL 通信效率,进而提升整体训练性能。


二、NPS 简介

1. NPS 定义

NPS(NUMA Per Socket)用于定义每个 AMD EPYC 处理器插槽被划分成多少个 NUMA 节点:

NPS 设置 NUMA 节点数/CPU 描述
NPS=1 1 所有 CCD 合为一个 NUMA 节点,延迟低但拥塞可能高
NPS=2 2 每 4 个 CCD 构成一个 NUMA 节点
NPS=4 4 每 2 个 CCD 构成一个 NUMA 节点,NUMA 粒度最细,隔离好

适用于如 AMD EPYC 7003/9004 系列(如 Milan/Genoa)。


三、设置 NPS=4 的方法

方法一:通过 BIOS 设置(推荐)

进入 BIOS,路径如下(可能略有不同):

Advanced → AMD CBS → DF Common Options → NUMA Nodes per Socket (NPS)

NUMA Nodes per Socket 设置为 NPS4,保存并重启服务器。

方法二:通过 grub 设置(部分平台支持)

编辑 /etc/default/grub

GRUB_CMDLINE_LINUX="... numa=on nps=4"

然后执行:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg
reboot

⚠️ 注意:不是所有平台支持通过 grub 覆盖 BIOS 设置,BIOS 设置优先。


四、NPS 设置对 NCCL 性能的影响

1. NCCL 通信瓶颈来源

  • PCIe/NVLink 拓扑路径长短

  • NUMA 绑定不当导致的跨节点内存访问

  • IB 网卡与 GPU NUMA 不一致

2. NCCL 测试对比(示例)

假设配置:2x AMD EPYC 9654 + 8x RTX 4090,部分典型对比:

NPS 设置 带宽(GB/s) 延迟(us) 说明
NPS=1 较低 较高 所有资源集中,竞争严重
NPS=2 提升 降低 分区减少冲突
NPS=4 最优或次优 最低 NUMA 隔离精细,P2P 绑定更合理

3. 测试命令

nvidia-smi topo -m
numactl -H
NCCL_DEBUG=INFO mpirun -np 8 ./all_reduce_perf -b 8M -e 1G -f 2

4. NUMA 绑定建议

  • GPU 与网络设备(如 IB)应处于同一 NUMA 节点;

  • 使用 numactl 控制绑定,例如:

numactl --cpunodebind=0 --membind=0 ./train.py --gpus 0,1

五、调优建议总结

项目 建议
BIOS 设置 NPS=4
NUMA 绑定 GPU 与 IB 在同 NUMA 节点
NCCL 配置 使用自动拓扑或自定义拓扑文件
测试工具 nvidia-smi, numactl, nccl-tests

六、附录:工具说明

1. nvidia-smi topo -m

查看 GPU 与 CPU、IB 卡间的连接距离与 NUMA 位置。

2. numactl -H

查看当前系统 NUMA 节点数、绑定策略。

3. hwloc-ls

可视化 NUMA 和 PCIe 设备拓扑。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐