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传输路径如下:

  1. 应用程序调用 send(),数据从用户态缓冲区拷贝到内核态Socket缓冲区。
  2. 内核TCP协议栈进行分段、添加TCP头、计算校验和,交给IP层。
  3. IP层添加IP头,查询路由,交给链路层驱动。
  4. 网卡DMA读取数据并发送;接收端网卡产生中断,CPU处理中断并将数据从内核缓冲区拷贝到用户态。

这条路径中,至少发生两次内存拷贝、一次中断处理、一次上下文切换。对于单流吞吐要求高、但并发流数量少的HPC场景,TCP的CPU开销占比过高。例如,在100Gbps速率下,TCP协议栈处理本身就可能消耗2~4个物理核心,留给GPU数据搬运的资源被挤占。

关键认知:TCP/IP不是“慢”在带宽,而是“重”在每字节的CPU处理成本。GPU集群追求的是把CPU从数据搬运中解放出来,让GPU直接与网卡交换数据。
GPU集群网络协议栈对比:从TCP/IP到InfiniBand TCP/IP 路径(传统数据中心) GPU显存 CPU内存拷贝 (DMA) 内核TCP/IP栈 (校验/分段) 网卡驱动 物理链路 接收端CPU (中断+拷贝) ✗ 内存拷贝 ×2 ✗ CPU处理 ✗ 中断处理 RoCE v2 路径(GPU Direct RDMA) GPU显存 RDMA网卡 (免CPU拷贝) RoCE封装 (IBoE) 以太网交换 物理链路 RDMA网卡 (直接写GPU) ✓ 零拷贝 ✓ 内核旁路 ✓ 无中断 InfiniBand 路径(专用HCA) GPU显存 HCA卡 (IB协议) IB子网管理 (SM/LID) IB交换机 IB链路 HCA卡 (直接写GPU) ✓ 无损网络 + 自适应路由 ✓ 端到端流控 延迟对比:TCP/IP ~10µs | RoCE ~1.5µs | InfiniBand ~0.8µs(典型值,随硬件变化)

3.3 以太网与InfiniBand:两种设计哲学

以太网与InfiniBand的差异,本质上是“尽力而为”与“绝不丢包”两种设计哲学的碰撞。

维度传统以太网InfiniBandRoCE v2(基于以太网)
丢包处理允许丢包,TCP重传无损,链路级流控依赖PFC流控实现无损
寻址方式IP地址 + MAC地址LID(局部ID)+ GIDIP + 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的主流方案。
常见误区:很多人认为“RoCE就是InfiniBand的廉价替代品”。实际上,RoCE对网络配置的要求极为苛刻——PFC配置不当会导致死锁(多个交换机互相等待暂停帧),ECN阈值设置错误会造成吞吐剧烈抖动。在规模超过200张GPU卡时,RoCE的调优难度会显著上升。

3.5 实操视角:如何为GPU集群选择网络技术

选择网络技术时,需要结合集群规模、GPU型号、应用通信模式综合判断。以下是一个典型的决策流程:

  1. 确认GPU是否支持GPU Direct RDMA:NVIDIA A100/H100等均支持,但需要检查驱动和CUDA版本。
  2. 评估通信占比:若训练模型以稠密Transformer为主(如GPT类),通信占比约30%~50%,RoCE即可满足;若涉及稀疏模型或大规模专家并行(MoE),通信占比可能超过70%,建议InfiniBand。
  3. 检查交换机能力:RoCE需要交换机支持PFC、ECN、大缓冲区(至少8MB/端口)。
  4. 验证线缆与光模块: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时代的运维习惯,结果遇到各种“玄学”问题。以下是三个典型误区:

误区一:忽略PFC死锁风险。在TCP/IP中,交换机缓冲区溢出只会丢包,TCP重传即可恢复。但在RoCE中,PFC暂停帧可能沿着环路传播,形成循环依赖,导致整个网络吞吐归零。解决方案是:确保RoCE流量路径上无环路,或启用PFC的“死锁检测”功能。
误区二:盲目追求“大MTU”。RoCE v2默认MTU 4096,但部分交换机在MTU大于1500时处理性能下降。实测中,MTU从1500提升到4096,吞吐可能只提升5%~10%,但延迟反而增加。建议通过实测决定,而非照搬InfiniBand的4KB MTU设置。
误区三:忽视ECN水线设置。ECN的阈值设置需要参考交换机的缓冲区大小。阈值过低会导致频繁降速,阈值过高则拥塞已发生才标记。一个经验值是:将ECN阈值设为交换机端口缓冲区大小的60%~70%,并配合动态水线调整。