测试多机效率 多机训练multi-node
一、测试gpu 拓扑
nvidia-smi topo -m
nvidia-smi topo -m
GPU0 GPU1 GPU2 GPU3 GPU4 GPU5 GPU6 GPU7 NIC0 NIC1 NIC2 NIC3 NIC4 NIC5 NIC6 CPU Affinity NUMA Affinity GPU NUMA ID
GPU0 X NV18 NV18 NV18 NV18 NV18 NV18 NV18 PIX NODE SYS SYSSYS SYS NODE 0-55,112-167 0 N/A
GPU1 NV18 X NV18 NV18 NV18 NV18 NV18 NV18 NODE NODE SYS SYSSYS SYS NODE 0-55,112-167 0 N/A
GPU2 NV18 NV18 X NV18 NV18 NV18 NV18 NV18 NODE PIX SYS SYSSYS SYS NODE 0-55,112-167 0 N/A
GPU3 NV18 NV18 NV18 X NV18 NV18 NV18 NV18 NODE NODE SYS SYSSYS SYS NODE 0-55,112-167 0 N/A
GPU4 NV18 NV18 NV18 NV18 X NV18 NV18 NV18 SYS SYS PIX NODE NODE NODE SYS 56-111,168-223 1 N/A
GPU5 NV18 NV18 NV18 NV18 NV18 X NV18 NV18 SYS SYS NODE NODE NODE NODE SYS 56-111,168-223 1 N/A
GPU6 NV18 NV18 NV18 NV18 NV18 NV18 X NV18 SYS SYS NODE NODE NODE PIX SYS 56-111,168-223 1 N/A
GPU7 NV18 NV18 NV18 NV18 NV18 NV18 NV18 X SYS SYS NODE NODE NODE NODE SYS 56-111,168-223 1 N/A
NIC0 PIX NODE NODE NODE SYS SYS SYS SYS X NODE SYS SYSSYS SYS NODE
NIC1 NODE NODE PIX NODE SYS SYS SYS SYS NODE X SYS SYSSYS SYS NODE
NIC2 SYS SYS SYS SYS PIX NODE NODE NODE SYS SYS X NODE NODE NODE SYS
NIC3 SYS SYS SYS SYS NODE NODE NODE NODE SYS SYS NODE X PIX NODE SYS
NIC4 SYS SYS SYS SYS NODE NODE NODE NODE SYS SYS NODE PIX X NODE SYS
NIC5 SYS SYS SYS SYS NODE NODE PIX NODE SYS SYS NODE NODE NODE X SYS
NIC6 NODE NODE NODE NODE SYS SYS SYS SYS NODE NODE SYS SYSSYS SYS X
Legend:
X = Self
SYS = Connection traversing PCIe as well as the SMP interconnect between NUMA nodes (e.g., QPI/UPI)
NODE = Connection traversing PCIe as well as the interconnect between PCIe Host Bridges within a NUMA node
PHB = Connection traversing PCIe as well as a PCIe Host Bridge (typically the CPU)
PXB = Connection traversing multiple PCIe bridges (without traversing the PCIe Host Bridge)
PIX = Connection traversing at most a single PCIe bridge
NV# = Connection traversing a bonded set of # NVLinks
NIC Legend:
NIC0: mlx5_0
NIC1: mlx5_3
NIC2: mlx5_4
NIC3: mlx5_5
NIC4: mlx5_6
NIC5: mlx5_7
NIC6: mlx5_bond_0
非常感谢您提供这些详细的 GPU 拓扑信息。让我为您详细解释这个 GPU 拓扑结构:
GPU 数量和互联:
- 系统中有 8 个 GPU(GPU0 到 GPU7)。
- 所有 GPU 之间都通过 NVLink 互联,具体是 NV18,表示每两个 GPU 之间有 18 个 NVLink 连接。
- 这是一个全连接的 GPU 拓扑,每个 GPU 都与其他所有 GPU 直接相连。
GPU NUMA 亲和性:
- GPU0 到 GPU3 与 NUMA 节点 0 相关联(CPU Affinity: 0-55,112-167)
- GPU4 到 GPU7 与 NUMA 节点 1 相关联(CPU Affinity: 56-111,168-223)
NVLink 连接:
- NV18 表示每对 GPU 之间有 18 个 NVLink 连接。这是一个非常高带宽的互连,远超过 PCIe 的带宽。
- 所有 GPU 对之间都是 NV18 连接,表明这是一个均匀的全连接拓扑。
网络接口卡(NIC)连接:
- NIC0 (mlx5_0) 和 NIC1 (mlx5_3) 与 NUMA 节点 0 的 GPU 更紧密相连。
- NIC2 (mlx5_4) 到 NIC5 (mlx5_7) 与 NUMA 节点 1 的 GPU 更紧密相连。
- NIC6 (mlx5_bond_0) 可能是一个绑定接口,与两个 NUMA 节点都有连接。
PCIe 连接:
- GPU 与不同 NUMA 节点上的设备之间的连接通常是 SYS,表示需要跨越 NUMA 节点。
- 同一 NUMA 节点内的连接通常是 NODE 或 PIX,表示更快的连接。
GPU 分组:
- GPU0-3 形成一组,与 NUMA 节点 0 相关。
- GPU4-7 形成另一组,与 NUMA 节点 1 相关。
总结:
- 这是一个高度对称和优化的 GPU 配置,共有 8 个 GPU。
- 所有 GPU 通过高带宽的 NVLink (NV18) 全连接,形成了一个网格拓扑。
- GPU 分为两组,每组 4 个,对应不同的 NUMA 节点,这有利于平衡计算负载和内存访问。
- NIC 的分布也与 GPU 和 NUMA 节点的分组相对应,有助于优化网络通信。
这种配置非常适合大规模并行计算和深度学习任务,特别是那些需要频繁 GPU 间通信的应用。在编程和任务调度时,考虑这种拓扑结构可以显著提高性能,尤其是在需要跨 GPU 通信的场景中。
二、ib_write_bw
节点0
ib_write_bw
ib_write_bw 172.31.0.xxx
---------------------------------------------------------------------------------------
RDMA_Write BW Test
Dual-port : OFF Device : mlx5_0
Number of qps : 1 Transport type : IB
Connection type : RC Using SRQ : OFF
PCIe relax order: ON
ibv_wr* API : ON
TX depth : 128
CQ Moderation : 1
Mtu : 4096[B]
Link type : IB
Max inline data : 0[B]
rdma_cm QPs : OFF
Data ex. method : Ethernet
---------------------------------------------------------------------------------------
local address: LID 0x1be QPN 0x0a21 PSN 0x9ee41 RKey 0x11e900 VAddr 0x007faf7f316000
remote address: LID 0x1bd QPN 0x0cd2 PSN 0x70c04d RKey 0x20bc00 VAddr 0x007f9fe3494000
---------------------------------------------------------------------------------------
#bytes #iterations BW peak[MB/sec] BW average[MB/sec] MsgRate[Mpps]
Conflicting CPU frequency values detected: 2000.000000 != 3799.997000. CPU Frequency is not max.
65536 5000 43890.45 41959.16 0.671346
---------------------------------------------------------------------------------------
这个输出提供了关于您的InfiniBand网络性能测试的详细信息。让我为您解析这些结果:
配置信息:
- 设备:mlx5_0(Mellanox ConnectX-5或更高版本的网卡)
- 传输类型:IB(InfiniBand)
- 连接类型:RC(Reliable Connection)
- MTU:4096字节
- TX深度:128(发送队列深度)
性能结果:
- 测试数据包大小:65536字节(64KB)
- 迭代次数:5000
- 峰值带宽:43890.45 MB/sec(约42.86 GB/s)
- 平均带宽:41959.16 MB/sec(约41.00 GB/s)
- 消息率:0.671346 Mpps(每秒百万包)
性能分析:
- 带宽性能相当不错。41-43 GB/s的带宽表明您可能使用的是EDR(100Gbps)或HDR(200Gbps)InfiniBand网络。
- 平均带宽略低于峰值带宽,这是正常的,表明性能相当稳定。
注意事项:
- 系统检测到CPU频率冲突:"Conflicting CPU frequency values detected: 2000.000000 != 3799.997000. CPU Frequency is not max."
这表明CPU可能没有运行在最大频率,可能会影响性能测试结果。
潜在优化:
- 确保CPU运行在最大频率,可能需要检查电源管理设置。
- 考虑增加TX深度(如果硬件支持)可能会略微提高性能。
- 测试不同的MTU大小,看是否能进一步提升性能。
对多机训练的影响:
- 这个带宽足以支持大多数分布式训练工作负载。
- 如果您的训练作业没有达到预期的速度,网络带宽可能不是主要瓶颈。
下一步:
- 监控实际训练过程中的网络使用情况。
- 检查GPU利用率,确保GPU得到充分利用。
- 分析数据加载和预处理过程,确保它们不会成为瓶颈。
总的来说,您的InfiniBand网络性能看起来很好。如果多机训练性能不佳,可能需要查看其他因素,如数据加载、模型结构、或者工作负载分配等。
需要更多信息或有其他问题吗?
numactl --hardware
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
node 0 size: 1031675 MB
node 0 free: 236088 MB
node 1 cpus: 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
node 1 size: 1032151 MB
node 1 free: 377292 MB
node distances:
node 0 1
0: 10 21
1: 21 10
非常好,让我详细解释这个 numactl --hardware
命令及其输出:
命令解释:numactl --hardware
是一个用于显示系统 NUMA (Non-Uniform Memory Access) 硬件配置的命令。它提供了有关 NUMA 节点、CPU 分配、内存大小和节点间距离的详细信息。
输出解析:
a. NUMA 节点数量:
复制
available: 2 nodes (0-1)
- 系统有 2 个 NUMA 节点,编号为 0 和 1。
b. 节点 0 的 CPU 分配:
复制
node 0 cpus: 0 1 2 3 ... 164 165 166 167
- NUMA 节点 0 拥有 112 个逻辑 CPU 核心。
- 包括 CPU 0-55 和 CPU 112-167。
c. 节点 0 的内存信息:
复制
node 0 size: 1031675 MB
node 0 free: 236088 MB
- 节点 0 总内存约 1TB (1031675 MB)。
- 当前有 236088 MB(约 230 GB)空闲内存。
d. 节点 1 的 CPU 分配:
复制
node 1 cpus: 56 57 58 59 ... 220 221 222 223
- NUMA 节点 1 也拥有 112 个逻辑 CPU 核心。
- 包括 CPU 56-111 和 CPU 168-223。
e. 节点 1 的内存信息:
复制
node 1 size: 1032151 MB
node 1 free: 377292 MB
- 节点 1 总内存略多于节点 0,约 1TB (1032151 MB)。
- 当前有 377292 MB(约 368 GB)空闲内存。
f. 节点距离矩阵:
复制
node distances:
node 0 1
0: 10 21
1: 21 10
- 这个矩阵显示了 NUMA 节点之间的相对访问延迟。
- 对角线上的 10 表示节点内访问的基准延迟。
- 21 表示跨节点访问的延迟大约是本地访问的 2.1 倍。
重要观察:
- CPU 分布:系统总共有 224 个逻辑 CPU 核心,均匀分布在两个 NUMA 节点上。
- 内存分布:两个节点的内存容量几乎相同,每个节点约 1TB。
- 内存使用:节点 1 比节点 0 有更多的空闲内存。
- NUMA 效应:跨节点访问的延迟是本地访问的 2.1 倍,这对性能有显著影响。
性能影响:
- 本地访问优先:应用程序应尽可能使用同一 NUMA 节点的 CPU 和内存,以减少跨节点访问。
- 内存分配策略:大型应用程序应考虑在两个节点间平衡内存使用。
- CPU 亲和性:任务调度时应考虑 NUMA 拓扑,尽量将相关任务绑定到同一节点。
优化建议:
- 使用
numactl
命令运行应用程序,指定 CPU 和内存绑定。 - 在多线程应用中,考虑 NUMA 感知的线程分配。
- 监控跨 NUMA 节点的内存访问,尽量减少这种情况。
这些信息对于优化大规模计算任务、数据库操作和高性能计算应用程序非常重要。正确利用 NUMA 架构可以显著提高系统性能和效率。