Skip to content

网络拓扑与训练效率

网络拓扑是分布式训练效率的关键因素。GPU 间的互连方式(NVLink、PCIe、InfiniBand)和拓扑结构直接决定了通信带宽和延迟,进而影响训练吞吐。

网络拓扑与训练效率

互连技术对比

互连带宽延迟距离用途
NVLink 4.0900GB/s 双向~1μs芯片间TP 通信
NVSwitch900GB/s 双向~2μs节点内TP/DP
PCIe 5.064GB/s 双向~5μs节点内低优先级
InfiniBand NDR400Gb/s~2μs节点间DP/PP
Ethernet 400G400Gb/s~5μs节点间辅助网络

拓扑感知训练

bash
# 查看节点内 GPU 拓扑
nvidia-smi topo -m

# 示例输出(8×A100 NVLink 全互联)
#         GPU0  GPU1  GPU2  GPU3  GPU4  GPU5  GPU6  GPU7
# GPU0    X    NV12  NV12  NV12  NV12  NV12  NV12  NV12
# GPU1   NV12   X    NV12  NV12  NV12  NV12  NV12  NV12
# ...(全 NVLink 互联)
python
# 根据 NCCL 拓扑调整并行策略
def optimize_parallelism(topo_matrix):
    """根据拓扑矩阵优化并行度"""
    # NVLink 全互联:支持高 TP 度
    nvlink_groups = find_nvlink_groups(topo_matrix)

    # TP 限制在 NVLink 组内
    tp_size = min(len(nvlink_groups[0]), 8)

    # PP 用于跨 NVLink 组
    pp_size = len(nvlink_groups)

    return tp_size, pp_size

InfiniBand 配置

bash
# IB 链路检查
ibstat                    # HCA 状态
ibping -S                 # IB 连通性测试
ibwritebw <server>        # 带宽测试

# NCCL IB 配置
export NCCL_IB_DISABLE=0
export NCCL_IB_GID_INDEX=3
export NCCL_IB_HCA=mlx5_0,mlx5_1  # 指定 HCA
export NCCL_SOCKET_IFNAME=ib0      # IB 网络接口
export NCCL_NET_GDR_LEVEL=5        # GPUDirect RDMA

胖树拓扑

大规模集群通常采用胖树(Fat-Tree)拓扑:

         Core Switch (NDR400)
        /        |        \
   Spine1    Spine2    Spine3
   /    \    /    \    /    \
Leaf1  Leaf2  Leaf3  Leaf4  ...
 |      |      |      |
Node1  Node2  Node3  Node4
集群规模拓扑交换机跨交换机带宽
32 节点单层1× NDR51.2Tbps
128 节点两层8+151.2Tbps
1024 节点三层64+8+1收敛比 4:1

拓扑感知调度

  1. TP 通信最密集,必须在 NVLink 组内
  2. DP 通信(AllReduce)可跨节点,对带宽要求高
  3. PP 通信(P2P)量最小,适合跨节点
  4. 调度系统应将同一训练任务分配到相同 Leaf 下的节点

胖树收敛比

大规模集群的胖树收敛比通常 >1,意味着跨核心交换机的带宽不足。训练任务应尽量限制在同一 Spine 下。

相关资源

最近更新