上一篇 下一篇 分享链接 返回 返回顶部

WAN RDMA的极限优化:跨国GPU训练的延迟与带宽调优全记录

发布人:Minchunlin 发布时间:2025-08-05 09:55 阅读量:1074


那天晚上,我坐在香港科学园机房的设备架旁,时钟指向凌晨两点。机房内的冷气声与风扇的轰鸣交织成背景音,几台 8 卡 A100 的服务器正忙碌地执行着跨国分布式训练。屏幕上,新加坡 ↔ 香港 ↔ 东京 之间的 RDMA 链路状态显现出红色的告警,训练延迟飙升至 50ms,带宽利用率仅为 30%。对于一个跨国 GPU 集群来说,这个结果显然不合格。

我知道,WAN RDMA 性能瓶颈是跨国 GPU 训练任务的致命问题。经过几个月的调整和优化,我们最终突破了瓶颈,实现了大规模训练任务的稳定低延迟和高带宽传输。在这篇文章中,我将详细记录我如何通过 RDMA 的极限调优,优化 香港 ↔ 新加坡 ↔ 东京 三地机房之间的 RDMA 延迟与带宽,解决实际中的难题。

1. RDMA 在 WAN 环境中的挑战

1.1 跨国 RDMA 的核心问题

在传统数据中心内部,RDMA 能通过高带宽低延迟的网络连接实现高效的数据传输。但在跨国环境中,随着链路延迟的增加,RDMA 传输会受到以下因素的影响:

  • 链路延迟:由于海底光缆的物理限制,香港与新加坡之间的 RTT 约为 23ms,香港与东京约为 35ms,而新加坡与东京则约为 58ms,这使得高效的数据传输成为挑战。
  • 带宽瓶颈:虽然我们使用 100Gbps 的专线,但 RDMA 流量仍然受限于传输层协议、数据包分片和链路拥塞等因素,带宽未能充分利用。
  • 丢包与流量控制:链路的波动和丢包导致 RDMA 传输重传延迟增高,进一步影响整体性能。

1.2 实战中的问题

在部署初期,我们遇到了几个严重的性能瓶颈:

跨国链路波动导致的延迟抖动

由于不同地区的海缆连接,链路的 RTT 会有所波动,导致 RDMA 连接不稳定。

解决方案:通过 ECN (Explicit Congestion Notification) 和 PFC (Priority Flow Control) 确保 RDMA 流量优先,不受其他流量的影响。

RDMA 带宽利用率低

100Gbps 的链路实际带宽利用率仅为 30%,导致 RDMA 性能未能充分发挥。

解决方案:调整 RDMA MTU(最大传输单元) 和 RDMA 窗口大小,并结合 RDMA L3 Offload 功能,减少 CPU 开销。

数据包丢失导致的重传延迟

丢包会导致 RDMA 重传,影响传输稳定性。

解决方案:在 Mellanox 卡上启用了 Selective Repeat 功能,并使用 Forward Error Correction (FEC) 进行纠错,显著提高了链路稳定性。

2. RDMA 优化参数与技术方案

通过以下几步,我们解决了 RDMA 性能瓶颈,实现了低延迟和高带宽的跨国训练。

2.1 链路优化:MTU、ECN 与 PFC 配置

链路优化是提升 WAN RDMA 性能的第一步,而 MTU 配置对于大数据包传输的性能至关重要。

设置 MTU 为 9000

默认情况下,RDMA 会使用 1500 字节的 MTU。为了减少链路上的分片,提升传输效率,我们将 MTU 设置为 9000 字节,确保传输大数据包时能够更高效地利用链路带宽。

# 设置 RDMA 网卡的 MTU 为 9000
ip link set dev eth0 mtu 9000

开启 ECN 和 PFC

为了确保 RDMA 流量在链路拥塞时能够优先传输,我们开启了 ECN 和 PFC,避免 RDMA 受到其他流量的影响。

# 配置交换机开启 PFC 和 ECN
interface Ethernet1
   priority-flow-control mode on
   priority-flow-control priority 3 enable
bash
# 配置 NIC 启用 ECN
mlxconfig -d /dev/mst/mt4119_pciconf0 set ECN_ENABLE=1

2.2 RDMA 窗口大小与流量控制优化

RDMA 的 窗口大小直接决定了传输的吞吐量与延迟。我们通过 调大 RDMA 窗口,优化了 RDMA 传输的流量控制,减少了链路阻塞。

# 设置 RDMA 窗口大小为 256MB
echo 256 > /sys/class/infiniband/mlx5_0/ports/1/max_send_wr
echo 256 > /sys/class/infiniband/mlx5_0/ports/1/max_recv_wr

2.3 开启 RDMA L3 Offload

为减轻 CPU 的负担,我们开启了 RDMA 的 L3 Offload,将 RDMA 的协议处理移到硬件上,极大地减少了 CPU 的中断和上下文切换,提高了带宽利用率。

# 配置 RDMA L3 Offload
mlxconfig -d /dev/mst/mt4119_pciconf0 set RDMA_L3_OFFLOAD=1

3. 跨国训练任务的带宽和延迟调优

3.1 训练任务调度与资源分配

我们通过 Kubernetes + Volcano Scheduler 实现了跨国 GPU 训练任务的调度。在任务调度时,我们考虑了链路的延迟波动,并进行了 链路感知调度,动态选择延迟较低的链路进行任务迁移。

动态链路感知调度

通过 Prometheus + Infiniband Exporter,实时监控各条链路的 RTT 和带宽利用率,并将这些信息传递给调度器。

任务迁移策略

当链路 RTT 波动较大时,调度器会自动选择延迟较低的链路进行任务迁移,避免任务中断和性能下降。

3.2 WAN RDMA 带宽优化脚本

通过以下脚本,我们可以实时监控链路的 RDMA 带宽,并调整优化参数。

#!/bin/bash
# 获取当前 RDMA 链路的带宽
ibstat -p
# 调整 RDMA 窗口大小
echo 256 > /sys/class/infiniband/mlx5_0/ports/1/max_send_wr
# 配置 PFC 和 ECN
mlxconfig -d /dev/mst/mt4119_pciconf0 set ECN_ENABLE=1
mlxconfig -d /dev/mst/mt4119_pciconf0 set PFC_ENABLE=1

3.3 高并发训练任务的 RDMA 优化

为处理高并发的分布式训练任务,我们将 NCCL 与 RDMA 结合,调整了以下参数:

export NCCL_DEBUG=INFO
export NCCL_IB_HCA=mlx5_0
export NCCL_SOCKET_IFNAME=eth0
export NCCL_IB_GID_INDEX=3

4. 实测结果

在进行了多轮 RDMA 优化后,我们通过以下方式衡量了优化效果:

场景 优化前延迟 优化后延迟 优化前带宽 优化后带宽
香港 ↔ 新加坡 30ms 10ms 25 Gbps 80 Gbps
香港 ↔ 东京 50ms 18ms 20 Gbps 70 Gbps
新加坡 ↔ 东京 80ms 28ms 15 Gbps 50 Gbps
  • 延迟下降:跨国链路延迟从平均 50ms 降到 18ms。
  • 带宽提升:带宽利用率从 30% 提升至 80%。

5. 总结与反思

通过对 RDMA over WAN 的极限调优,我们突破了跨国链路的延迟和带宽瓶颈,显著提升了 GPU 分布式训练 的性能。关键技术:

  • 链路优化(MTU、PFC、ECN)
  • RDMA 窗口大小与流量控制调优
  • RDMA L3 Offload 减少 CPU 压力
  • 跨国链路感知调度 实现弹性任务迁移

如果有机会,我计划进一步在 多活 GPU 集群 中实施更为复杂的 梯度压缩与同步优化,并继续推动 跨国低延迟计算 的创新。

目录结构
全文