GPU互联技术

大规模AI训练依赖于高效的GPU互联技术。 本文将详细介绍NVLink、NVSwitch、PCIe等互联技术的原理和应用。

预计阅读时间:50分钟·难度:高级·更新时间:2024年4月

互联技术概述

在多GPU训练场景中,GPU间的通信带宽成为性能瓶颈。 高效的互联技术是分布式训练系统的基础设施核心。

互联技术层次

GPU互联技术层次:
├── 节点内互联
│   ├── NVLink
│   │   └── GPU间高速直连
│   ├── NVSwitch
│   │   └── 全互联交换网络
│   └── PCIe
│       └── 通用互联接口
│
├── 节点间互联
│   ├── InfiniBand
│   │   └── 高性能计算网络
│   ├── RoCE
│   │   └── 以太网RDMA
│   └── 以太网
│       └── 通用网络
│
└── 关键指标
    ├── 带宽 (GB/s或Gb/s)
    ├── 延迟 (μs)
    └── 拓扑效率

NVSwitch

NVSwitch技术详解

NVSwitch简介:
┌──────────────────────────────────────────┐
│ NVSwitch是NVIDIA专用的NVLink交换芯片     │
│                                          │
│ 功能:                                    │
│ ├── 多GPU全互联                          │
│ ├── 无阻塞交换                           │
│ └── 支持大规模集群                       │
└──────────────────────────────────────────┘

NVSwitch规格演进:
├── NVSwitch 1.0
│   ├── 端口: 18 NVLink端口
│   ├── 总带宽: 900 GB/s
│   └── 支持: 8 GPU全互联
│
├── NVSwitch 2.0
│   ├── 端口: 36 NVLink端口
│   ├── 总带宽: 1.8 TB/s
│   └── 支持: 8 GPU全互联 (更多链路)
│
├── NVSwitch 3.0
│   ├── 端口: 64 NVLink端口
│   ├── 总带宽: 3.2 TB/s
│   └── 支持: 8 GPU全互联
│
└── NVSwitch 4.0
    ├── 端口: 72 NVLink端口
    ├── 总带宽: 7.2 TB/s
    └── 支持: 8 GPU全互联

NVSwitch拓扑示例 (8 GPU):
┌─────────────────────────────────────────┐
│            NVSwitch                     │
│        ┌─────────────┐                  │
│        │   Switch    │                  │
│        └─────────────┘                  │
│    ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑     │
│    │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │     │
│   GPU0 GPU1 GPU2 GPU3 GPU4 GPU5 GPU6 GPU7│
│                                          │
│   所有GPU对等互联,无阻塞全带宽          │
└──────────────────────────────────────────┘

PCIe互联

PCIe版本性能对比

PCIe版本单通道带宽x16带宽发布年份
PCIe 3.0~1 GB/s~16 GB/s2010
PCIe 4.0~2 GB/s~32 GB/s2017
PCIe 5.0~4 GB/s~64 GB/s2019
PCIe 6.0~8 GB/s~128 GB/s2022

PCIe vs NVLink对比

PCIe vs NVLink:
┌──────────────────────────────────────────┐
│              PCIe 5.0      NVLink 4.0    │
├──────────────────────────────────────────┤
│ 带宽         64 GB/s       900 GB/s      │
│ 延迟         ~2μs          ~1μs          │
│ 成本         低            高            │
│ 通用性       高            NVIDIA专用    │
│ 内存一致性   不支持        支持          │
│ 扩展性       受限          灵活          │
└──────────────────────────────────────────┘

PCIe适用场景:
├── 单GPU系统
├── 消费级GPU (RTX系列)
├── 预算有限的场景
└── 非NVIDIA GPU

NVLink适用场景:
├── 多GPU训练集群
├── 大模型训练
├── 高带宽需求应用
└── 数据中心GPU (A100/H100)

InfiniBand

InfiniBand技术详解

InfiniBand特点:
├── 高带宽: 最高NDR 400Gb/s
├── 低延迟: ~0.5μs
├── 原生RDMA支持
└── 无丢包传输

InfiniBand版本演进:
├── SDR: 2.5 Gbps per lane
├── DDR: 5 Gbps per lane
├── QDR: 10 Gbps per lane
├── FDR: 14 Gbps per lane
├── EDR: 25 Gbps per lane (100Gb/s)
├── HDR: 50 Gbps per lane (200Gb/s)
├── NDR: 100 Gbps per lane (400Gb/s)
└── XDR: 200 Gbps per lane (800Gb/s)

InfiniBand网络组件:
├── HCA (Host Channel Adapter)
│   └── 网卡设备
├── Switch
│   └── 交换机
├── Router
│   └── 路由器
└── Subnet Manager
    └── 网络管理

AI训练集群网络架构:
├── Fat-Tree拓扑
│   ├── 叶交换机连接节点
│   └── 脊交换机连接叶交换机
├── Rail优化
│   ├── 多网络平面
│   └── 同Rail全互联
└── DGX SuperPOD架构
    └── NVIDIA推荐方案

RDMA技术

RDMA技术原理

RDMA (Remote Direct Memory Access):
┌──────────────────────────────────────────┐
│ 特点:                                    │
│ ├── 绕过CPU: 零拷贝                       │
│ ├── 内核旁路: 低延迟                      │
│ ├── 协议卸载: 网卡处理协议               │
│ └── 异步传输: 非阻塞                      │
└──────────────────────────────────────────┘

RDMA实现方式:
├── InfiniBand
│   ├── 原生RDMA
│   ├── 最优性能
│   └── 专用硬件
│
├── RoCE (RDMA over Converged Ethernet)
│   ├── 以太网承载RDMA
│   ├── 需无损网络
│   └── 成本较低
│
└── iWARP
    ├── TCP/IP承载RDMA
    ├── 跨网段支持
    └── 性能较差

RDMA在AI训练中的应用:
├── NCCL通信库
│   ├── All-Reduce优化
│   ├── 自动选择RDMA路径
│   └── 多路径并行
│
├── MPI
│   ├── 分布式计算标准
│   └── RDMA后端支持
│
└── 自定义通信
    ├── 直接使用libibverbs
    └── 极致性能优化

性能测试

互联性能测试工具

# NVLink带宽测试
nvidia-smi nvlink -s                    # 查看NVLink状态
nvidia-smi nvlink -gt db                # 查看拓扑

# NCCL带宽测试
# 安装nccl-tests
git clone https://github.com/NVIDIA/nccl-tests
cd nccl-tests && make

# All-Reduce带宽测试
./build/all_reduce_perf -b 8 -e 256M -f 2 -g 8

# InfiniBand测试
# 安装perftest
yum install perftest

# 带宽测试
ib_write_bw -a -d mlx5_0        # 服务端
ib_write_bw -a -d mlx5_0 <server_ip>  # 客户端

# 延迟测试
ib_write_lat -a -d mlx5_0
ib_write_lat -a -d mlx5_0 <server_ip>

# RDMA测试
rping -s -a <server_ip> -v      # 服务端
rping -c -a <server_ip> -v      # 客户端

# 实际训练通信测试
python -m torch.distributed.launch \
    --nproc_per_node=8 \
    --nnodes=2 \
    --node_rank=0 \
    --master_addr=<master_ip> \
    --master_port=29500 \
    train.py --test_communication
----