一、概述
在使用 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 设备拓扑。
1658

被折叠的 条评论
为什么被折叠?



