尽管 BGP 支持传统的基于流的第 3 层等价多路径 (ECMP) 流量负载均衡方法,但它并不是最适合基于 RoCEv2 的 AI 后端网络。这是因为 GPU 到 GPU 通信会产生大量的大象流,支持 RDMA 的 NIC 以线速传输这些流。这些流很容易导致后端网络拥塞。在 ECMP 中,单个流的所有数据包都遵循相同的路径。如果该路径变得拥塞,ECMP 不会调整或重新路由流量。这会导致整个网络的带宽使用不均衡。一些链接过载,而另一些链接保持空闲状态。在 AI 工作负载中,多个高带宽流同时发生,这种不平衡会降低性能。深度学习模型在很大程度上依赖于 all-reduce、all-gather 和 broadcast 等集体作。这些会在 GPU 之间生成密集的流量模式,通常以每秒 TB 的速度。如果这些流分布不均匀,则单个拥塞路径可能会减慢整个训练作业的速度。本章介绍了传统基于流的第 3 层 ECMP 的两种替代负载均衡方法:1) 具有自适应路由的基于 Flowlet 的负载均衡,以及 2) 具有数据包喷射的基于数据包的负载均衡。两者都旨在改善基于 RoCEv2 的 AI 后端网络中的流量分配,其中传统的基于流的路由通常会导致拥塞和未充分利用的链路。这些高级方法旨在更高效地处理 AI 工作负载的独特流量模式。RDMA WRITE作在探索负载平衡解决方案之前,我们首先演练一个简化的示例,了解 RDMA WRITE 内存复制作的工作原理。在图 12-1 中,我们有两台 GPU 服务器:主机 1 和主机 2,每台服务器都有一个 GPU。此时,内存已经分配和注册,并且已经在两端创建了队列对 (QP),因此可以开始数据传输。在主机 1 的 GPU-0 上,渐变存储在以绿色、橙色和蓝色突出显示的内存区域中。每个彩色部分表示将写入主机 2 上的 GPU-0 的本地内存的一部分。为了传输数据,主机 1 上的 RDMA NIC 将写入作拆分为三个 flowlet(绿色、橙色和蓝色)。每个 flowlet 都被视为同一 RDMA 写入作的一个段,而不是将整个数据块作为单个连续流发送。RDMA 先写第一条消息的有效负载中包含 RDMA 扩展传输标头 (RETH)。此标头告诉接收 RDMA NIC 传入数据应在远程内存中的哪个位置写入。在我们的示例中,来自主机 1 上 GPU-0 的内存块 1B 的数据被写入主机 2 上 GPU-0 的内存块 2C。RETH 包含 R_Key,它授予写入远程内存区域的权限。它还包括正在传输的数据的长度和 Host 2 上目标内存位置的虚拟地址。InfiniBand Base Transport Header (IBTH) 中的作代码设置为 RDMA Write First,表示这是序列中的第一条消息。IBTH 还描述了分区键(接口标识符)、目标队列对编号和数据包序列号 (PSN),这有助于确保以正确的顺序处理数据包。当第一个数据包到达主机 2 时,RDMA NIC 使用 RETH 标头中的虚拟地址信息将有效负载直接写入内存块 2C。图 12-1:RDMA WRITE First。RDMA 写入中间第二条消息的作码为 RDMA Write Middle 和 PSN 2,它告诉接收方此数据包位于 PSN 为 1 的第一个数据包之后。此 Flowlet 的有效负载紧跟在前一个块之后写入主机 2 上的内存块 2D 中。RDMA NIC 确保根据 PSN 维护顺序,并且由于第一个数据包的原始偏移量,它确切地知道将数据放置在何处。图 12-2:RDMA WRITE 中间。RDMA 上次写入第三条消息的作码为 RDMA Write Last,表示这是序列中的最后一条消息。在 PSN 3 中,它紧跟在 PSN 2 之后。此数据包中的有效负载被写入内存块 2E,该块紧跟在 2D 之后。图 12-3:RDMA WRITE Last。在多数据包 RDMA 写入作中,每个 Flowlet 表示从源 GPU 传输到目标 GPU 的连续数据块。数据包中的数据必须以正确的顺序到达,因为只有第一个数据包包含 RDMA 扩展传输标头 (RETH) 中的完整寻址信息。此标头告诉接收方应将数据写入内存中的哪个位置。标记为 RDMA Write Middle 和 RDMA Write Last 的数据包取决于此信息,并且必须遵循数据包序列号 (PSN) 定义的顺序。如果数据包的传输顺序不正确,则接收 RDMA NIC 无法立即处理它们。相反,它必须将它们保存在内存中并等待缺少的早期数据包到达。这种缓冲会增加内存使用量和处理开销。在高速环境中,这可能会导致性能下降甚至丢包,尤其是当缓冲区在重负载下填满时。使用第 3 层 ECMP 进行基于流的负载均衡图 12-4 描述了在 AI Fabric 后端网络中使用基于流的负载均衡的问题。在我们的示例中,我们有四台主机,每台主机都配备了两个 GPU:GPU-1 和 GPU-2。连接到 GPU-1 的 RDMA NIC 链接到交换机 Rail-1,连接到 GPU-2 的 RDMA NIC 链接到 Rail-2。Rail-1 和 Rail-2 上的 NIC 之间的流量通过主干 1 或主干 2 转发。我们使用基本的数据并行化策略,其中训练数据集被分成小批量并分布在所有八个 GPU 上。为简化示例,图 12-4 仅显示了从主机 1、2 和 3 上的 GPU-1 到主机 4 上的 GPU-2 的全减少梯度同步流。在实际训练中,所有 GPU 之间都会发生全网格 all-reduce作。首先,最左侧的三个主机上的 GPU-1 开始 RDMA 进程,将数据从其内存复制到主机 4 上 GPU-2 的内存。这些 GPU-1 都连接到 Rail-1。RDMA NIC 不是发送一个大流,而是将数据拆分为 flowlet,即来自较大传输的小批量数据。这些 flowlet 到达 Rail-1 交换机,不幸的是,5 元组 L3 ECMP 哈希算法为所有三个流选择了相同的上行链路。由于交换机无法以线速转发所有数据,因此它将一些数据包存储在缓冲区中,从而导致拥塞。类似的拥塞也可能发生在主干交换机上。如前面的第 12 章所述,出口缓冲区溢出可能会触发 ECN(显式拥塞通知)和 PFC(优先级流量控制)机制,以防止数据包丢失。图 12-4 第 3 层负载均衡。使用 Adaptive Routing 实现基于 Flowlet 的负载均衡自适应路由是一种动态方法,可主动监控链路利用率并实时响应网络拥塞。在图 12-5 中,5 元组哈希算法最初为所有 flowlet 选择相同的上行链路,就像前面的例子一样。但是,一旦 Rail-1 和 Spine-1 之间的交换机间链路利用率超过阈值,自适应路由机制就会检测到负载增加,并开始通过 Spine-2 将一些 flowlet 重定向到拥塞较少的备用路径。通过将 flowlet 分布在多个路径上,自适应路由有助于减少缓冲区积累并避免潜在的数据包丢弃。这不仅提高了整个结构的链路利用率,还有助于为时间敏感型作(如基于 RDMA 的梯度同步)保持一致的吞吐量。在 AI 工作负载中,延迟或丢包可能会减慢甚至中断训练,自适应路由在维护系统性能方面发挥着关键作用。图 12-5:动态流平衡。基于数据包的负载均衡和数据包喷射数据包喷洒是一种负载平衡方法,其中来自同一流的单个数据包分布在多个等价路径上。这个想法是均匀地使用所有可用的链接,并减少任何单个路径上出现拥塞的可能性。然而,在基于 RoCEv2 的 AI 后端网络中,数据包喷洒带来了严峻的挑战。RoCEv2 依赖于无损和按顺序交付数据包。当数据包通过不同的路径喷射时,它们可能会无序地到达目的地。这种数据包重新排序可能会中断 RDMA作并降低 GPU 到 GPU 通信的整体性能。图 12-6 喷包:OpCode:RDMA 写入 first、middle、last。RDMA 只写从 ConnectX-5 开始的 NVIDIA RDMA NIC 支持 RDMA 只写作,其中每个数据包中都包含一个 RETH 标头。图 12-7 显示了 RDMA 网卡如何在每条消息的 IBTH 标头中使用 OpCode: RDMA Write Only。使用此 OpCode,每条消息还包括一个 RETH 标头,其中包含有关为有效负载中携带的数据保留的目标内存块的信息。这允许接收 RDMA NIC 将数据直接写入正确的内存位置,而无需依赖传输序列中的先前消息。RDMA 只写与使用 Packet Spraying 的基于数据包的负载平衡相结合时,会带来显著的好处。由于每个数据包都是自包含的,并且包含完整的内存寻址信息,因此网络结构可以通过不同的路径转发单个数据包,而无需担心数据包排序或上下文丢失。这实现了真正的 Flowlet 甚至每个数据包的负载均衡,这有助于在可用链路之间更均匀地分配流量,避免热点,并减少排队延迟。图 12-7 喷包:OpCode:TDMA Write Only。在 Cisco Nexus 交换机上配置每数据包负载均衡在撰写本文时,Cisco Nexus 9000 系列云扩展交换机(9300-FX3、GX、GX2 和 HX-TOR)从 NX-OS 版本 10.5(1)F 开始,支持动态负载均衡 (DLB),包括基于流的负载均衡和按数据包(数据包喷射)负载均衡。DLB 在 IP 路由和 VXLAN 交换矩阵中的第 3 层物理接口上支持单播 IPv4 和 IPv6 流量。启用 DLB 后,出口 QoS 和访问策略不会应用于使用 DLB 的流。同样,在出口接口上配置的 TX SPAN 不会捕获 DLB 流量。有关硬件和软件支持的详细信息,请参阅 Cisco 的官方文档。示例 12-1 显示了启用每数据包负载均衡的基本配置:switch(config)# 硬件配置文件 DLBswitch(config-dlb)# dlb-interface Eth1/1switch(config-dlb)# dlb-interface Eth1/2switch(config-dlb)# mac-address aa:bb:cc:dd:ee:ffswitch(config-dlb)# 模式每数据包示例 12-1:配置每数据包负载平衡数据包喷涂。注意: DLB MAC 充当虚拟下一跃点 MAC 地址。它不绑定到任何特定的物理接口。这会将 MAC 与物理路径分离,从而允许交换机为每个数据包选择不同的出口端口。必须在所有参与的交换机上配置相同的 DLB MAC 地址。如果未指定 DLB MAC,则应用默认的 DLB MAC 00:CC:CC:CC:CC:CC。
内容中包含的图片若涉及版权问题,请及时与我们联系删除
评论
沙发等你来抢