GPU互联技术
大规模AI训练依赖于高效的GPU互联技术。 本文将详细介绍NVLink、NVSwitch、PCIe等互联技术的原理和应用。
预计阅读时间:50分钟·难度:高级·更新时间:2024年4月
互联技术概述
在多GPU训练场景中,GPU间的通信带宽成为性能瓶颈。 高效的互联技术是分布式训练系统的基础设施核心。
互联技术层次
GPU互联技术层次:
├── 节点内互联
│ ├── NVLink
│ │ └── GPU间高速直连
│ ├── NVSwitch
│ │ └── 全互联交换网络
│ └── PCIe
│ └── 通用互联接口
│
├── 节点间互联
│ ├── InfiniBand
│ │ └── 高性能计算网络
│ ├── RoCE
│ │ └── 以太网RDMA
│ └── 以太网
│ └── 通用网络
│
└── 关键指标
├── 带宽 (GB/s或Gb/s)
├── 延迟 (μs)
└── 拓扑效率NVLink技术
技术架构
NVLink发展历程
NVLink技术演进:
├── NVLink 1.0 (Pascal - 2016)
│ ├── 带宽: 40 GB/s (双向)
│ ├── 链路: 4通道
│ └── 代表产品: P100
│
├── NVLink 2.0 (Volta - 2017)
│ ├── 带宽: 50 GB/s (双向)
│ ├── 统一内存支持
│ └── 代表产品: V100
│
├── NVLink 3.0 (Ampere - 2020)
│ ├── 带宽: 50 GB/s per link
│ ├── 12链路, 总带宽 600 GB/s
│ └── 代表产品: A100
│
├── NVLink 4.0 (Hopper - 2022)
│ ├── 带宽: 50 GB/s per link
│ ├── 18链路, 总带宽 900 GB/s
│ └── 代表产品: H100
│
└── NVLink 5.0 (Blackwell - 2024)
├── 带宽: 100 GB/s per link
├── 总带宽: 1.8 TB/s
└── 代表产品: B200
NVLink技术优势:
├── 高带宽: 远超PCIe
├── 低延迟: GPU直连
├── 内存一致性: 统一寻址
└── 拓扑灵活: 全互联可能拓扑结构
NVLink拓扑对比
| 拓扑类型 | 连接方式 | 优点 | 缺点 |
|---|---|---|---|
| Mesh | 相邻互联 | 链路数少 | 非全互联 |
| Ring | 环形连接 | 简单 | 延迟高 |
| Fully Connected | 全互联 | 最优带宽 | 链路数多 |
| NVSwitch | 交换互联 | 扩展性强 | 成本高 |
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/s | 2010 |
| PCIe 4.0 | ~2 GB/s | ~32 GB/s | 2017 |
| PCIe 5.0 | ~4 GB/s | ~64 GB/s | 2019 |
| PCIe 6.0 | ~8 GB/s | ~128 GB/s | 2022 |
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