3. 网络基础回顾:TCP/IP协议栈、以太网、InfiniBand、RoCE等网络技术概述
3.1 为什么GPU集群需要重新审视网络协议
在构建GPU集群时,我们面对的第一个基础问题不是“用哪家交换机”,而是“网络协议栈如何影响分布式训练效率”。传统数据中心网络以TCP/IP为绝对核心,但GPU集群的通信模式——尤其是AllReduce、AllGather等集合通信——具有高吞吐、低延迟、多对一并发的特征。TCP/IP协议栈在应对这类流量时,会暴露出中断开销大、内存拷贝多、拥塞控制反应慢等问题。
理解这一背景,是后续选择RoCE或InfiniBand的前提。本节不追求协议细节的穷举,而是聚焦于:当数据从GPU显存出发,经过网卡、线缆、交换机,到达另一块GPU显存时,不同协议栈各自做了什么、牺牲了什么、换来了什么。
3.2 TCP/IP协议栈:通用但“重”
TCP/IP的设计目标是可靠、互联、异构网络兼容,它并不假设底层物理链路的质量。在GPU集群中,TCP/IP通常作为控制面协议(如SSH、配置下发)或兜底数据面(当RDMA不可用时)存在。
一次典型的TCP传输路径如下:
- 应用程序调用
send(),数据从用户态缓冲区拷贝到内核态Socket缓冲区。 - 内核TCP协议栈进行分段、添加TCP头、计算校验和,交给IP层。
- IP层添加IP头,查询路由,交给链路层驱动。
- 网卡DMA读取数据并发送;接收端网卡产生中断,CPU处理中断并将数据从内核缓冲区拷贝到用户态。
这条路径中,至少发生两次内存拷贝、一次中断处理、一次上下文切换。对于单流吞吐要求高、但并发流数量少的HPC场景,TCP的CPU开销占比过高。例如,在100Gbps速率下,TCP协议栈处理本身就可能消耗2~4个物理核心,留给GPU数据搬运的资源被挤占。
3.3 以太网与InfiniBand:两种设计哲学
以太网与InfiniBand的差异,本质上是“尽力而为”与“绝不丢包”两种设计哲学的碰撞。
| 维度 | 传统以太网 | InfiniBand | RoCE v2(基于以太网) |
|---|---|---|---|
| 丢包处理 | 允许丢包,TCP重传 | 无损,链路级流控 | 依赖PFC流控实现无损 |
| 寻址方式 | IP地址 + MAC地址 | LID(局部ID)+ GID | IP + MAC + GID |
| 路由粒度 | 逐跳IP路由 | 子网内LID交换 | IP路由 + 以太网交换 |
| CPU卸载 | 弱(依赖内核协议栈) | 强(HCA硬件卸载) | 强(RNIC硬件卸载) |
| 拥塞控制 | TCP滑动窗口 | 端到端基于信用的流控 | DCQCN(RoCE专用) |
| 生态成本 | 低,通用 | 高,专用线缆/交换机 | 中,复用以太网交换机 |
InfiniBand的子网管理器(Subnet Manager)是其核心组件,负责分配LID、建立路由表、监控链路状态。每个IB端口在子网内拥有唯一的LID,数据包在子网内通过LID交换转发,无需IP路由。这种集中式管理带来了极低的转发延迟,但也意味着子网管理器成为单点故障——生产环境必须部署主备SM。
3.4 RoCE:在以太网上“模拟”InfiniBand
RoCE(RDMA over Converged Ethernet)的出现,是为了在保留以太网生态的同时获得RDMA能力。RoCE v2将InfiniBand的RDMA报文封装在UDP/IP中,使得报文可以跨越三层网络路由。但代价是:以太网本身不提供无损保证,因此RoCE网络必须依赖额外的机制来避免丢包。
RoCE部署中最关键的三个参数:
- PFC(优先级流控):在以太网交换机上为RoCE流量设置专用队列,当队列超过阈值时,交换机向对端发送暂停帧,防止缓冲区溢出。
- ECN(显式拥塞通知):交换机在检测到拥塞时,在IP头中标记ECN位,接收端通知发送端降低发送速率。
- DCQCN:结合ECN标记和速率恢复算法的拥塞控制协议,是RoCE v2的主流方案。
3.5 实操视角:如何为GPU集群选择网络技术
选择网络技术时,需要结合集群规模、GPU型号、应用通信模式综合判断。以下是一个典型的决策流程:
- 确认GPU是否支持GPU Direct RDMA:NVIDIA A100/H100等均支持,但需要检查驱动和CUDA版本。
- 评估通信占比:若训练模型以稠密Transformer为主(如GPT类),通信占比约30%~50%,RoCE即可满足;若涉及稀疏模型或大规模专家并行(MoE),通信占比可能超过70%,建议InfiniBand。
- 检查交换机能力:RoCE需要交换机支持PFC、ECN、大缓冲区(至少8MB/端口)。
- 验证线缆与光模块:RoCE对信号质量敏感,劣质光模块会导致FEC(前向纠错)开销剧增。
一个典型的RoCE v2部署检查清单如下:
# 1. 确认网卡支持RoCE
rdma link show
# 输出示例: link mlx5_0/1 state ACTIVE physical_state LINK_UP
# 2. 检查PFC优先级配置(交换机侧)
# 通常为RoCE流量分配优先级3或4
dcb pfc show
# 3. 验证无损队列是否生效
ethtool -S eth0 | grep -E "tx_pause|rx_pause"
# 4. 测试RDMA连通性
ib_write_bw -d mlx5_0 -x 3 --report_gbits
3.6 误区复盘:TCP/IP经验直接迁移到RoCE
很多工程师初次搭建RoCE网络时,会沿用TCP/IP时代的运维习惯,结果遇到各种“玄学”问题。以下是三个典型误区: