专为大模型训练优化,百度集合通信库 BCCL 万卡集群快速定位故障

news2024/11/6 7:34:25

1    集合通信对分布式训练至关重要

在分布式训练中,每一块 GPU 只负责处理部分模型或者数据。集群中不同 GPU 之间通过集合通信的方式,完成梯度同步和参数更新等操作,使得所有 GPU 能够作为一个整体加速模型训练。

如果有一块 GPU 在集合通信中出了状况,将会导致其他 GPU 处于等待状态,直到这块 GPU 完成数据同步,集群中所有 GPU 才会开始后续工作。

所以,集合通信性能直接影响了分布式任务的速度,决定了集群中所有 GPU 能否形成合力加速模型训练。

为了最大提升集合通信的性能,在基础设施层面,集群通常采用基于 RDMA 的高性能物理网络,在任务运行时使用集合通信库进行加速。

2    大模型对系统的运维能力和稳定性提出新要求

我们知道,大模型的训练任务时长以周或月为周期,集群规模在千卡甚至万卡以上规模。这导致在整个任务过程中会发生各种故障,导致资源利用率不高或者任务中断。这使得大模型的训练任务,不能只看重集群规模和性能,更需要关注系统的运维能力和稳定性。

如果系统的运维能力和稳定性不够好,将会降低集群的「有效训练时长」,延长项目时间产生昂贵的时间成本。比如完成整个训练任务花了 30 天,结果有 10 天是在排除各类故障,这是不可接受的。

在分布式训练任务中,作为系统核心组件之一的集合通信库,同样需要面向大模型场景,在系统的运维能力和稳定性上进行优化。

3    百度集合通信库 BCCL 概述

百度集合通信库 BCCL(Baidu Collective Communication Library)是百度智能云推出的一款面向大模型训练场景优化的集合通信库,是百度百舸 3.0中的重要组件。

BCCL 基于开源的 NCCL 进行了功能扩展和能力增强,针对大模型训练场景在可观测性、故障诊断、稳定性等方面进行优化,进一步提升集合通信库的可运维能力。同时,BCCL 针对百度智能云的特定 GPU 芯片进行了集合通信性能优化,进一步提升资源利用率。相比 NCCL,BCCL 的关键特性如下:

  • 可观测性:新增集合通信带宽实时统计能力;
  • 故障诊断:新增集合通信 hang 时的故障诊断能力;
  • 稳定性:增强网络稳定性和故障容错能力;
  • 性能优化:提升大模型训练主流 GPU 芯片的集合通信性能。

接下来,我们将介绍 BCCL 在以上 4 个方面的能力。

4    可观测性:集合通信带宽实时统计

4.1    背景

在训练过程中,有时候会出现任务正常运行,但是集群的端到端性能下降的情况。出现这类问题,可能是集群中任一组件导致的。这时候就需要运维工程师对集群进行全面的检查。

4.2    问题

其中,存储系统、RDMA 网络、GPU 卡等通常都配有实时可观测性平台,可以在不中断任务运行的情况下判断是否存在异常。相比之下,针对集合通信性能的判断,则缺乏实时和直接的手段。目前,若怀疑集合通信存在性能问题,只能使用如下 2 种手段:

  • 使用 RDMA 流量监控平台进行故障排查。这种方法仅能间接推测出跨机集合通信性能是否有异常。
  • 停止训练任务释放 GPU 资源,使用 nccl-test 进行二分查找,最终锁定出现故障的设备。

虽然第 2 种方法可以完成集合通信异常的诊断,但是测试场景比较有限,只能判断是否有常规的硬件异常问题。同时整个过程中会导致训练中断,产生昂贵的时间成本。

4.3    特性和效果

BCCL 的实时集合通信带宽统计功能,可以在训练过程中对集合通信性能进行实时观测,准确地展示集合通信在不同阶段的性能表现,为故障诊断排除、训练性能调优等提供数据支撑。即使在复杂通信模式下,BCCL 通过精确的打点技术依然能提供准确的带宽统计的能力。

在集合通信性能异常的故障排除方面,可以进一步根据不同通信组的性能缩小故障范围。在混合并行模式下,可以通过多个性能异常的通信组的交集进一步确认故障节点。

在训练性能优化方面,可以评估该带宽是否打满硬件上限,是否有其他的优化策略,为模型调优提供更多的监控数据支撑。

5    故障诊断:集合通信故障诊断

5.1    背景

设备故障导致的训练任务异常停止,也是大模型训练任务时常发生的状况。故障发生后,一般都会有报错日志或者巡检异常告警,比如可以发现某个 GPU 存在异常。在训练任务异常时,我们只需要匹配异常时间点是否有相关异常事件或告警,即可确认故障 root cause。

除此之外,还存在着一类不告警的「静默故障」。当发生故障时,整个训练任务 hang 住,无法继续训练,但是进程不会异常退出,也无法确认是哪个 GPU 或哪个故障节点导致训练任务 hang。然而,此类问题的排查难点在于,该类故障不会立刻发生,训练任务可以正常启动并正常训练,但是在训练超过一定时间后(可能是几个小时或者数天)突然 hang 住。排查时很难稳定复现该故障,导致排查难度进一步提高。

5.2    问题

由于集合通信的同步性,当某个 GPU 出现故障时,其他 GPU 仍会认为自己处于正常地等待状态。因此,当通信过程中断时,没有 GPU 会输出异常日志,使得我们很难迅速定位到具体的故障 GPU。当上层应用程序在某一多 GPU 的集合通信操作中 hang 时,应用程序也只能感知到某个集合通信组(故障 comm)出现了问题,却无法精确地判断是哪个 GPU 导致了此次集合通信的异常。

运维工程师通常使用 nccl-test 来尝试复现和定位问题,但是由于压测时间短、测试场景简单,很难复现集合通信 hang。

在百度集团内部排查此类问题时,首先停止线上的训练任务,然后进行长时间的压测,比如对于现有训练任务模型进行切分,对集群机器进行分批次压测,不断缩小故障范围,从而确认故障机。排查代价通常需要 2 天甚至更多。这类故障排查的时间,将带来巨大的集群停机成本。

5.3    特性和效果

为了应对这一挑战,在训练任务正常运行时,BCCL 实时记录集合通信内部的通信状态。当任务 hang 时,BCCL 会输出各个 rank 的集合通信状态。运维工程师可以根据这些数据特征来进一步缩小故障 GPU 的范围。通过这种方法,BCCL 通过一种近乎无损的方式实现了故障机的快速定位,大幅度提高了问题排查的效率。

6    稳定性:网络稳定性和容错增强

6.1    背景

在模型训练过程中,单个网络端口偶发性的 updown 会导致当前进程异常,进而引起整个训练任务退出。然而,单端口的偶发性 updown 在物理网络是不可避免的。

6.2    特性和效果

BCCL 针对此类偶发性的异常场景,进行了故障容错以避免任务退出,提升训练任务的稳定性。

  • 控制面容错能力提升:在训练任务启动时,通常会由于偶发性的网络故障或其他故障导致训练任务启动失败。BCCL 针对常见的偶发性异常故障增加相应的重试机制,确保训练任务正常启动。
  • 数据面容错能力提升:在训练任务正常运行时,偶发性的网络抖动可能导致 RDMA 重传超次,从而导致整个训练任务异常。BCCL 优化了 RDMA 重传超次机制,提升训练任务的健壮性。

7    性能优化:集合通信性能优化

针对大模型训练场景的主流 GPU 芯片,集合通信性能还存在继续提升的空间,进一步对任务进行加速。

BCCL 针对百度智能云提供的主流的 GPU 芯片进行了深度优化。以双机 H800 测试环境为例,BCCL 相比 NCCL 带宽利用率可提升 10%。

图片

图片

图片

8    总结

2023 年 12 月 20 日,百度百舸·AI 异构计算平台 3.0 发布,它是专为大模型优化的智能基础设施。

借助 BCCL 在运维能力和稳定性进行的优化,使得百度百舸平台的有效训练时长达到 98%,带宽的有效利用率可以达到 95%。

大家可以访问 安装BCCL库 - 百舸异构计算平台AIHC | 百度智能云文档​​​​​​​,了解更多 BCCL 的相关信息。

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

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

相关文章

基于BP-Adaboost的预测与分类,附MATLAB代码免费获取

今天为大家带来一期基于BP-Adaboost的预测与分类。代码中的BP可以替换为任意的机器学习算法。 原理详解 BP-AdaBoos模型先通过 AdaBoost集成算法串行训练多个基学习器并计算每个基学习 器的权重系数,接着将各个基学习器的预测结果进行线性组合,生成最终的预测结果。关于更多的原…

Ps:历史记录面板

Ps菜单:窗口/历史记录 Window/History 历史记录 History面板提供了对图像编辑过程中所进行更改的深入控制,可以让用户回溯并查看每一步操作,从而允许用户轻松撤销错误或比较不同的编辑效果。 ◆ ◆ ◆ 常用操作方法与技巧 “历史记录”面板…

解决 MySQL 未运行但锁文件存在的问题

查看mysql状态时,显示错误信息"ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists"。 解决步骤 1、检查 MySQL 进程是否正在运行 在继续之前,我们首先需要确定 MySQL 进程是否正在运行。我们可以使用以下命令检查…

【Mybatis】多表映射 第二期

文章目录 一、多表映射概念二、对一映射三、对多映射四、多表映射总结4.1 多表映射优化4.2 多表映射总结 一、多表映射概念 多表关系: 一对一一对多 | 多对一多对多 一个 客户 对应 多个订单一个订单 对应 一个客户 举例: 对一 实体类设计&#xff1a…

2024最新算法:鹦鹉优化算法(Parrot optimizer,PO)求解23个基准函数(提供MATLAB代码)

一、鹦鹉优化算法 鹦鹉优化算法(Parrot optimizer,PO)由Junbo Lian等人于2024年提出的一种高效的元启发式算法,该算法从驯养的鹦鹉中观察到的觅食、停留、交流和对陌生人行为的恐惧中汲取灵感。这些行为被封装在四个不同的公式中…

vs code更新后json文件无法识别通配符 ,编译多文件失败的解决办法

问题描述 在Mac或者LInux上,进行C/C相同路径下进行多文件编译时,之前设置好的json文件突然不能解释通配符,并且将带有单引号的地址传给clang,由于*.c被扩在单引号中,clang找不到文件导致失败。 如果将命令端中的指令复…

Mysql标量子查询

目录 子查询标量子查询数据准备 子查询 SQL语句中嵌套select语句,称为嵌套查询,又称子查询。 SELECT * FROM t1 WHERE column1 ( SELECT column1 FROM t2 ... );子查询外部的语句可以是insert / update / delete / select 的任何一个&…

如何将一个远程git的所有分支推到另一个远程分支上

如何将一个远程git的所有分支推到另一个远程分支上 最初有 12 个分支 执行 git remote add 远程名 远程git地址 git push 远程名 --tags "refs/remotes/origin/*:refs/heads/*"之后就变成 26个分支

Visual Studio C++项目远程断点调试客户现场程序方法

前言 程序开发一个很常见的场景,就是程序在自己本地部署调试明明一点问题都没有,但是部署到客户现场就问题百出,要调试起来还很困难,在自己本地也没有条件复现,很多时候只能靠日志一点点排查和猜测,耗费大…

基于springboot+vue的智能无人仓库管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

数据挖掘:航空公司的客户价值分析

需求分析 理解并掌握聚类分析方法,掌握数据的标准化,掌握寻找最佳聚类数,掌握聚类的绘图,掌握聚类分析的应用场景。 系统实现 实验流程分析 借助航空公司数据,对客户进行分类对不同类别的客户进行特征分析&#xf…

2024最新算法:美洲狮优化算法(Puma Optimizar Algorithm ,POA)求解23个基准函数(提供MATLAB代码)

一、美洲狮优化算法 美洲狮优化算法(Puma Optimizar Algorithm ,POA)由Benyamin Abdollahzadeh等人于2024年提出,其灵感来自美洲狮的智慧和生活。在该算法中,在探索和开发的每个阶段都提出了独特而强大的机制&#xf…

亚信安慧AntDB:数据管理的创新先锋

在亚信安慧AntDB数据库中,其卓越的创新能力得以充分体现,其独特之处在于融合统一与实时处理这两大关键领域。AntDB以其独特的技术和理念,引领着数据库领域的发展潮流,成为众多企业和机构首选的数据库解决方案。在这个信息化时代&a…

OXK3添加字段以及Coding Block Dump

用OXK3为MSEG以及ACDOCA添加字段 SE11激活MSEG发生Coding Black Dump 用CDS视图为结构NSDM_V_MSEG添加字段 CDS相关操作详见eclipse 创建SAP CDS视图事前准备_多喝开水丶的博客-CSDN博客 SAP eclipse创建简单的CDS视图_多喝开水丶的博客-CSDN博客 SE14调整表 AbapCatalog.sql…

什么是微前端

微前端是一种web应用构建方式。 微前端在2016年ThoughtWorks Technology Radar正式被提出。微服务这个被广泛应用于服务端的技术范式扩展到前端领域。现代的前端应用的发展趋势正在变得越来越富功能化,富交互化,也就是SPA应用;这样越来越复杂…

Muduo库编译学习(1)

1.muduo库简介 muduo是由Google大佬陈硕开发,是一个基于非阻塞IO和事件驱动的现代C网络库,原生支持one loop per thread这种IO模型,该库只支持Linux系统,网上大佬对其褒贬不一,作为小白用来学习就无可厚非了。 git仓库…

java枚举类总结

java枚举类总结 一、枚举类的使用1. 定义2. 属性和方法3. 使用 总结 本文记录一下java枚举类的使用与枚举实现原理。 一、枚举类的使用 枚举类是Java中一种特殊的数据类型,用于定义一组常量。下面一起看看枚举类的相关语法吧。 1. 定义 枚举类使用 enum 关键字来定…

SDL基础使用01( 项目创建,绘制矩形)

SDL在VS编译环境下的使用 创建一个VS项目将下载的sdl库include和lib文件夹放到项目工程下添加附加包含目录路径 添加依赖路径 1. 项目创建 #include <iostream> /* SDL项目基本使用 */// 1. 在cpp文件中调用C函数包含头文件时需要用extern "C"包一下…

信息检索(七):Transformer Memory as a Differentiable Search Index

Transformer Memory as a Differentiable Search Index 摘要1. 引言2. 相关工作3. 可微搜索索引3.1 索引策略3.1.1 索引方法3.1.2 文档表示策略 3.2 用于检索的 Docids 表示3.3 训练和优化 4. 实验4.1 基线4.2 实验结果 5. 结论参考资料 原文链接&#xff1a;https://proceedin…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的口罩识别系统(Python+PySide6界面+训练代码)

摘要&#xff1a;开发口罩识别系统对于提升公共卫生安全和疫情防控具有重要意义。本篇博客详细介绍了如何利用深度学习构建一个口罩识别系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并结合了YOLOv7、YOLOv6、YOLOv5的对比&#xff0c;给出…