彻底解决网络哈希冲突,百度百舸的高性能网络 HPN 落地实践

GPU 的通信性能对于大模型的训练有着至关重要的影响。在 HPN 网络工程实践中,我们的核心关注点是如何充分利用网络硬件资源的能力,将通信性能最大化,从而提升大模型端到端的训练性能。

1    HPN 网络  AIPod

下图是百度百舸的高性能网络 HPN — AIPod 的架构示意图。AIPod 使用 8 导轨网络架构,以 GPU A800 服务器为例,它配有 8 张网卡,然后每张网卡分别连到一个 TOR 汇聚组的 8 个 TOR 上。在 TOR 和 LEAF 层面,我们是通过 Full Mesh 的方式进行互联。如果是三层 RDMA 网络,我们在 LEAF 和 SPINE 层面也是采用 Full Mesh 的互联方式。

图片

值得一提的是,在大模型训练场景下,考虑到不同的并行策略,我们在跨机通信组产生的大多数都是同号卡流量。同号卡通信情况下最佳情况可以只经过一跳 TOR,最差情况只经过 LEAF。只有异号卡流量才可能经过 SPINE 中转。

我们的多导轨架构已经尽可能的把跨机流量放在同 TOR 下进行通信,期望将网络尽可能地打满。但是在实际过程中,我们发现 100 Gbps 的网络链路经常只能达到 70 Gbps 左右。

引起降速问题发生原因有很多,其中一项主要因素就是「哈希冲突」。接下来,我们就讲一下百度智能云的 AIPod 是如何解决网络哈希冲突,最终实现 95% 的「物理网络带宽有效性」。

2    哈希冲突

哈希冲突其实是 HPN 网络(高性能网络)中非常典型的问题,主要是因为 LEAF 和 SPINE 层都是通过 ECMP 来进行报文的转发。然而 RDMA 本身采用 Kernel Bypass 和 CPU Bypass 等操作,它很容易瞬间打满物理网络的硬件带宽。在这种情况下,很容易产生哈希冲突。

我们对哈希冲突进行了深入的分析,主要分为上行冲突和下行冲突两种情况。

  • 上行冲突

机器 A 发起了一个集合通信操作,在网络上发送 message 的时候,它会尽可能以满带宽 100 Gbps 发送给 TOR 1。当 TOR 1 将流量转发给 LEAF 层时,会根据哈希策略去随机选择 LEAF 1 和 LEAF 2。

与此同时,机器 B 它如果也需要向其他机器进行通信,它也会把相关的流量发送给 TOR 1。此时,TOR 1 也会根据哈希结果来选择把流量转发给 LEAF 1 或者 LEAF 2。在这种情况下,在 TOR 1 的上行方向就会产生概率性的哈希冲突。比如双方都哈希到了 TOR 1 到 LEAF 1 这条链路,TOR 1 到 LEAF 2 这条链路相对空闲。此时机器 A 和机器 B 就会因为出口流量哈希不均的原因,导致各自只有 50 Gbps 的网络带宽,这样就会对通信的性能乃至端到端的性能产生很大的影响。

图片

  • 下行冲突

机器 A 如果要向机器 C 发送数据,同时机器 E 要向机器 D 发送数据。在哈希过程中,如果 A 机器走了 TOR 1 ->  LEAF 1-> TOR 2 -> C 的链路 ,而机器 E 走了 TOR 3 -> LEAF 1 -> TOR 2 -> D 的链路,那么也会导致这两条流出现下行冲突,也会导致网络流量减半,让端到端的集合通信的性能下降。

图片

在大模型训练的场景下,集合通信具有典型的同步特征,如果一个 GPU 通信降速,会导致同通信组的其他 GPU 同步等待,进而导致全集群的 GPU 通信降速。这种同步特征会导致哈希冲突的影响被进一步放大。

我们用大模型的流量特征图来举个例子。在下图中的每一根线代表的是交换机上的某一条物理链路的流量特征。在该 case 中,端到端的扩展效率从 90% 以上降到了 70% 左右。我们可以看到,物理交换机上面的物理链路的流量负载情况有很大差距。有些链路的带宽非常的低,有些链路的带宽非常的高。这也意味着我们物理网络的带宽没有得到充分的利用。

这一些流量负载非常高的物理链路,说明从 TOR 到 LEAF 的方向上出现了哈希冲突,导致集合通信的性能下降。

图片

3    解决方案 1 — 增加 RDMA 流

针对上述哈希冲突的问题,我们自然而然想到的一个解决方案是:增加 RDMA 的流数。

比如说目前的网络中只有 2 条流,那这  2 条流可能很容易就哈希到同一个链路上。如果我们增加 RDMA 的 QP 数,比如说 16 条流、64 条流,那相应的哈希冲突的概率就会减少很多,从而减少交换机哈希冲突的现象。

下图是一个开启多 QP 之后的网络监控图。可以看到 RDMA 的流量相对均匀地哈希到不同的网络链路上,哈希冲突概率大大降低。

图片

但是在实际的集合通信过程中,增加 QP 会带来一些额外的开销。比如网卡侧可能会因为多 QP 带来额外的调度上的开销。在完全没有哈希冲突的情况下,多 QP 的性能其实是不如单 QP 的。但是因为哈希冲突问题存在,在这种场景下,我们只能选择多流来减轻哈希冲突问题。

4    解决方案 — 和性调度

前一种方案的核心思路是围绕交换机展开的,此时网络流量已经送到了 LEAF 交换机上。如果出现了哈希冲突,交换机通过多流的方式来减轻哈希冲突的概率。

第二种方案的思路则是围绕减少流量上送 LEAF 展开的。

通过前面的分析,我们知道哈希冲突主要是在 TOR 到 LEAF 的上行链路和 LEAF 到 TOR 的下行链路中产生的。所以我们可以通过减少流量上送到 LEAF,或者上送到 SPINE 的方式,从而减少交换机哈希冲突的概率。

我们以一个简单场景为例。在下图中我们将 4 个 Trainer 建立为一个通信组 。在当前通信组内,实际的通信顺序为 Trainer 1 -> Trainer 2 -> Trainer 3 -> Trainer 4 -> Trainer 1 。

但是由于当前的接线顺序,Trainer 1 和 Trainer 3 连在同一个 TOR 下,Trainer 2 和 Trainer 4 连在同一个 TOR 下。那么实际 Trainer 1 产生的流量,需要上送到 TOR 绕行 LEAF 才能到达 Trainer 2,然后 Trainer 2 的流量再次绕行 LEAF 来到 Trainer 3,Trainer 3 再绕行 LEAF 转发给 Trainer 4。

我们可以看到在物理网络层面这是一个无序的调度,很有可能导致集合通信产生的流量都要上送到 LEAF,这就大大增加了交换机产生哈希冲突的概率。

图片

为了解决该问题,我们可以采用一种很简单的方式。在组建通信组的时候,让 Trainer 1 和 Trainer 2,Trainer 3 和 Trainer 4 在同一个 TOR 下,做为相邻的 Trainer。

此时,只有 Trainer 2 发给 Trainer 3 的时候需要绕行,有一半的流量都可以直接在 TOR 内进行转发。这其实就启发了我们在做任务 Trainer 排序的时候要尽可能做好 TOR 亲和性的调度。具体我们可以从两个方面入手:

  • 在提交任务的过程中,尽可能在同一个 TOR 上去调度机器,来提交相应的训练任务。
  • 在启动任务的时候,尽可能的把相邻的 Trainer 调度到同一个 TOR 上面。

图片

5    解决方案 3 — DLB 动态负载均衡

上述两种方案都是从概率的视角来解决哈希冲突,某种意义上来说都是在撞运气。网络哈希冲突不可避免,我们只能减少发生的概率。那有没有什么终极办法能够从根本上去解决交换机的哈希冲突呢?

第三种方法就是 DLB 动态负载均衡。

哈希冲突产生的根源在于如果某一条流根据其五元组特性,哈希到了某一条链路中,后续如果产生了其他五元组的流哈希到同一条链路来争抢物理带宽,每条链路的流量将会减半。如果可以允许同一条流的报文转发到不同的物理链路中去,交换机根据链路实时负载来转发报文,那么就可以解决上述的问题,这也是我们 DLB 的核心思路。

我们看下面这个例子。Trainer 1 和 Trainer 2 要发送数据给到 Trainer 3,在 TOR  到 LEAF 上存在两条物理链路,其中,Trainer 1 中需要通信的报文为黄色的 1234,Trainer 2 中则是为橙色的 1234。

接下来,我们介绍下在 DLB 场景下的完整的转发过程。DLB 功能本质上是基于 InfiniBand 的 AR 扩展实现的。

用 Trainer 1 来举例,网卡在发送报文的时候,对发送的报文做了特殊的 AR bit 标记。当 TOR 识别到了该标记之后,就会对该报文走 DLB 转发逻辑,在转发给 LEAF 的时候会根据链路的实际负载来进行转发,将报文送到相对空闲的物理链路上,从而保证两条链路上的流量相对均衡。在这种情况下,由于同一条流的不同报文走了不同的转发路径,自然会发生乱序,因此当 Trainer 3 收到后,需要收到的乱序的报文进行重组。

以上就是整体 DLB 的实现策略。核心思想是基于链路负载选择相应的转发路径,支持对报文的 per-packet 转发逻辑。

目前 DLB 方案基于百度自研的交换机实现。我们可以实现均衡的把所有接收到的流量分发到不同的物理链路中,从根源上解决哈希冲突的问题。在百度内部的大模型训练场景中,网络带宽有效性可以提升 10% 左右。

图片

在百度智能云 HPN 集群 AIPod 中,使用「亲和性调度」配合「DLB 动态负载均衡」的方案,可以彻底解决物理网络集群哈希冲突的难题,这使得物理网络「带宽有效性」达到了 95% 。

此外,我们推出的自研的百度集合通信库 BCCL,联合框架层做了进一步的性能调优。针对特殊的业务流量特征,比如局部二打一等问题,进行通信层面的深度优化,大模型训练任务的端到端性能提升 1.5%。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/39933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue如何使用封装接口

在Vue项目中封装接口(API)是一个常见的需求,特别是在与后端服务进行交互时。封装接口的目的是为了将请求逻辑与组件逻辑分离,提高代码的可维护性和复用性。以下是一个简单的步骤和示例,说明如何在Vue项目中封装接口。 …

洛谷 P1020 [NOIP1999 提高组] 导弹拦截

题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统…

下拉菜单显示年份选项(月份也适用)

项目场景&#xff1a; 下拉菜单显示年份选项&#xff08;月份也适用&#xff09; 前段语言Vue 问题描述 在列表的搜索栏常常需要提供年份、月份选择&#xff0c;此文记录一种简单的年份下拉菜单的展示方式&#xff1a; <el-form-item label"年份" prop"yea…

战略资讯 | TapData 牵手思想科技,开启数据管理新篇章!

在这个数字化飞速发展的时代&#xff0c;数据已成为企业最宝贵的资产之一。为了更好地迎接新时代的诉求与挑战&#xff0c;TapData 现已与思想科技达成了一项具有里程碑意义的战略合作协议。这不仅是两个企业之间的合作&#xff0c;更是对整个数据管理行业的一次重大推动。 思…

兴业严选|北京市户籍 多子女家庭买二套房个贷算首套

6月26日&#xff0c;北京市住房和城乡建设委员会、中国人民银行北京市分行、国家金融监督管理总局北京监管局、北京住房公积金管理中心联合印发《关于优化本市房地产市场平稳健康发展政策措施的通知》。 明确支持多子女家庭改善性住房需求&#xff0c;对北京市户籍二孩及以上的…

ode45的例程|MATLAB例程|四阶龙格库塔定步长节微分方程

ode45自己编的程序和测试代码 模型 模拟一个卫星绕大行星飞行的轨迹计算。 结果 轨迹图如下: 源代码 以下代码复制到MATLAB上即可运行,并得到上面的图像: % ode45自己编的程序和测试代码 % Evand©2024 % 2024-7-2/Ver1 clear;clc;close all; rng(0); % 参数设定…

C++Primer Plus 第十四章代码重用:编程练习,第5题

CPrimer Plus 第十四章代码重用&#xff1a;编程练习,第5题 CPrimer Plus 第十四章代码重用&#xff1a;编程练习,第5题 文章目录 CPrimer Plus 第十四章代码重用&#xff1a;编程练习,第5题前言5. 一、方法二、解答 前言 5. 下面是一些类声明: //emp.h--header file for ab…

OpenSSL EVP详解

OpenSSL EVP详解 Chapter1 OpenSSL EVP详解一、EVP基本介绍1. EVP 加密和解密2. EVP 签名和验证3. EVP 加解密文件 二、源码结构2.1 全局函数2.2 BIO扩充2.3 摘要算法EVP封装2.4 对称算法EVP封装2.5 非对称算法EVP封装2.6 基于口令的加密 三、开发实例3.1 示例13.2 示例23.3 示…

【MySQL】数据库——备份与恢复,日志管理

一、数据备份的重要性 1.备份的主要目的是灾难恢复 在生产环境中&#xff0c;数据的安全性至关重要 任何数据的丢失都可能产生严重的后果造成数据丢失的原因&#xff1a; 程序错误人为,操作错误运算错误磁盘故障灾难&#xff08;如火灾、地震&#xff09;和盗窃 2.数据库备份…

【5G射频基本架构】

平台框架 平台演进及搭配 5G NR频谱 NSA/SA/ENDC 在双连接中&#xff0c;UE在连接状态下可同时使用至少两个不同基站的无线资源。对于Sprint&#xff0c;ENDC将允许设备在相同的频段&#xff08;41 / 2.5 GHz频段&#xff09;上同时访问LTE和5G。 手机硬件实现ENDC方式—类似LT…

动态住宅代理IP的优势是什么?什么地方用到?

在大数据时代的背景下&#xff0c;代理IP成为了很多企业顺利开展的重要工具。代理IP地址可以分为住宅代理IP地址和数据中心代理IP地址。选择住宅代理IP的好处是可以实现真正的高匿名性&#xff0c;而使用数据中心代理IP可能会暴露自己使用代理的情况。 住宅代理IP是指互联网服务…

数据库系统概论 | 触发器代码 | 行级触发器 | 语句级触发器

触发器 这篇博客拿两个例子来解释一下什么是行级触发器和语句级触发器。 **例子1&#xff1a;**当对表SC的Grade属性进行修改时&#xff0c;若分数增加了10%&#xff0c;则将此次操作记录到另一个表SC_U&#xff08;Sno CHAR(8)、Cno CHAR(5)、Oldgrade SMALLINT、Newgrade S…

Flink 窗口触发器(Trigger)(一)

Flink 窗口触发器(Trigger)(一) Flink 窗口触发器(Trigger)(二) Flink的窗口触发器&#xff08;Trigger&#xff09;是流处理中一个非常关键的概念&#xff0c;它定义了窗口何时被触发并决定触发后的行为&#xff08;如进行窗口数据的计算或清理&#xff09;。 一、基本概念 …

[数据集][目标检测]人员状态跑睡抽烟打电话跌倒检测数据集4943张5类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4943 标注数量(xml文件个数)&#xff1a;4943 标注数量(txt文件个数)&#xff1a;4943 标注…

[Leetcode 136][Easy]-只出现一次的数字

目录 题目描述 具体思路 题目描述 原题链接 具体思路 ①首先看到数组中重复的数字&#xff0c;想到快慢指针&#xff0c;但是数组的元素是乱序的不好求。因此先对数组排序。使用了STL库的sort函数&#xff0c;时间复杂度O(nlogn)不符合题目要求&#xff0c;空间复杂度O(1)。…

Pytorch学习之torch.split函数

Pytorch学习之torch.split函数 一、简介 torch.split用于将一个张量&#xff08;tensor&#xff09;沿指定维度&#xff08;dim&#xff09;拆分为多个子张量。这个函数对于处理需要按块拆分数据的任务非常有用&#xff0c;例如在自然语言处理和图像处理中的数据预处理。 二…

RXMH2 RK223 069 AS大容量中间继电器 板前接线 约瑟JOSEF

RXMH2大容量中间继电器型号&#xff1a; RXMH2 RK 223 067大容量中间继电器&#xff1b; RXMH2 RK 223 068大容量中间继电器&#xff1b; RXMH2 RK 223 069大容量中间继电器&#xff1b; RXMH2 RK 223 070大容量中间继电器&#xff1b; 用途 用于电力系统二次回路及工业自…

基于Hadoop平台的电信客服数据的处理与分析③项目开发:搭建Kafka大数据运算环境---任务11:基础环境准备

任务描述 任务主要是安装配置基础环境&#xff0c;主要内容包括&#xff1a; 1、安装java Kafka和ZooKeeper都需要安装Java环境&#xff0c;推荐至少Java8及以上版本 2、安装ZooKeeper ZooKeeper是Kafka集群的必要组件 3、安装kafka Kafka版本包括使用的scala语言版本和kafka版…

Ubuntu22.04上Docker的安装

1. 使用APT安装 首先安装HTTPS传输的软件包和CA证书&#xff0c;确保软件下载过程中不被篡改。 sudo apt-get updatesudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release -y然后&#xff0c;使用国内源&#xff0c;并添加软件源的 GPG 密钥以防…

Java面试题:讨论持续集成/持续部署的重要性,并描述如何在项目中实施CI/CD流程

持续集成/持续部署&#xff08;CI/CD&#xff09;的重要性 持续集成&#xff08;Continuous Integration, CI&#xff09; 和 持续部署&#xff08;Continuous Deployment, CD&#xff09; 是现代软件开发的重要实践。这些方法通过自动化构建、测试和部署过程&#xff0c;显著…