DLRover 如何拯救算力浪费?10 分钟自动定位故障机,1 秒内保存 Checkpoint!

news2024/12/25 13:31:18

欢迎大家在 GitHub 上 Star 我们:

分布式全链路因果学习系统 OpenASCE: https://github.com/Open-All-Scale-Causal-Engine/OpenASCE

大模型驱动的知识图谱 OpenSPG: https://github.com/OpenSPG/openspg

大规模图学习系统 OpenAGL: https://github.com/TuGraph-family/TuGraph-AntGraphLearning

4 月 25、26 日,全球机器学习技术大会在上海环球港凯悦大酒店举行!蚂蚁集团 DLRover 开源负责人王勤龙在大会上发表了《DLRover 训练故障自愈:大幅提升大规模 AI 训练的算力效率》主题演讲,分享如何在千卡规模大模型训练作业下,快速故障自愈,王勤龙介绍了 DLRover 背后的技术原理和使用案例,以及 DLRover 在社区大模型的实战效果。

王勤龙,长期在蚂蚁从事 AI 基础设施的研发,主导了蚂蚁分布式训练的弹性容错与自动扩缩容项目的建设。先后参与多个开源项目,如 ElasticDL 和 DLRover,开放原子基金会 2023 活力开源贡献者,蚂蚁集团 2022 T-Star 优秀工程师。目前为蚂蚁 AI Infra 开源项目 DLRover 的架构师,专注于打造稳定、可扩展和高效的大规模分布式训练系统。

大模型训练及挑战

大模型训练基本流程如上图所示,需要经过训练样本数据集的准备,Transformer 模型的构造,预训练,模型微调,最终构建成为用户 AI 应用。随着大模型从十亿参数迈向万亿参数,训练规模的增长导致了集群成本的飙升,同时也影响了系统的稳定性。如此规模的系统带来的高额运维成本,成为了大模型训练过程中亟需解决的问题。

  1. 节点规模预越大,作业的故障率越高,如何快速容错
  2. 节点规模越大,通信开销越大,如何提升训练速度
  3. 节点规模越大,显存需求越大,如何提升显存利用率

蚂蚁 AI 工程技术栈

上图展示了蚂蚁 AI 训练的工程技术栈,分布式训练引擎 DLRover 支持了蚂蚁的对话、代码、视频和多模态等模型的多样训练任务。以下是 DLRover 提供的主要功能:

  • 训练故障自愈:将千卡分布式训练有效时间占比 >97%,降低大规模训练故障的算力成本;
  • 训练优化 ATorch:自动根据模型和硬件选择最优的分布式训练策略。将千卡(A100)集群硬件算力利用率 >60% ;
  • 训练优化器:优化器相当于是模型迭代的导航,能帮助我们以最短的路径达到目标。我们的优化器相比 AdamW 提升 1.5x 的收敛加速。相关成果分别发表在 ECML PKDD ’21 ,KDD’23,NeurIPS ’23;
  • 显存与传输优化 GLake:在大模型训练过程中,会产生很多显存碎片,大大降低显存资源的利用率。我们通过显存+传输一体化优化和全局显存优化,将训练显存需求降低 2-10 倍。成果发布在 ASPLOS’24。

为什么故障导致算力浪费

蚂蚁之所以会特别关注训练故障的问题,主要因为训练过程中的机器故障大幅增加了训练成本。例如,Meta 在 2022 年公布了其大模型训练的实际数据,在训练 OPT-175B 模型时,使用了 992 80GB A100 GPU,共 124 台 8 卡机器,按照 AWS 的 GPU 价格,每天需要耗费约 70 万。因故障导致训练周期延长 20 多天,从而增加了上千万元的算力成本。

下面的图片展示了在阿里云集群进行大模型训练时遇到的故障分布情况,这些故障有的可以通过重启解决,而另一些则无法通过重启修复。例如,掉卡问题,因为重启后故障卡仍然是损坏的。必须要先更换损坏的机器,才能重新启动并恢复系统。

为什么训练故障会造成这么大的影响呢?首先,分布式训练是多个节点协同工作的,任一节点发生故障(无论是软件、硬件、网卡或 GPU 问题),整个训练流程均需暂停。其次,训练故障发生后,排查费时费力,比如现在大家常用的手动检查方式二分法,查一次至少需要 1-2 个小时。最后,训练是有状态的,训练重启需要从之前的训练状态里面恢复再继续,隔一段时间就要保存训练状态。而保存的过程耗时很长,而且故障回滚也会造成计算的浪费。上方的右图展示了我们上线故障自愈之前的训练耗时分布,可以看到 Checkpoint 的相关时间占比大概是 8%,手动节点检测的时间占比大概是 5%,网络故障导致停机时间约 7%, 硬件故障导致停机时间约 8%,最终有效训练时间大概只有 72%。

DLRover 训练故障自愈功能总览

上图是 DLRover 在故障自愈技术上的两大核心功能。首先,通过 Flash Checkpoint 能够在几乎不停止训练流程的前提下快速保存状态,实现高频备份。这意味着一旦遇到故障,系统能够立即从最近的检查点恢复,减少数据丢失和训练时间损耗。其次,DLRover 利用 Kubernetes 实现了智能化的弹性调度机制。该机制能够自动化应对节点故障,例如在 100 台机器的集群中若有一台失效,系统会自动调整至 99 台机器继续训练,无需人工介入。此外,它兼容Kubeflow 和 PyTorchJob,强化了节点健康监测能力,确保在 10 分钟内迅速识别并响应任何故障,维持训练作业的连续性和稳定性。

DLRover 弹性容错训练

DLRover 采用了 master-worker 的架构,这在机器学习的初期并不常见。在此设计中,master 作为控制中心,负责关键任务如节点调度、状态监控、网络配置管理和故障日志分析,而不会运行训练代码。通常部署于 CPU 节点上。worker承担实际训练负荷,每个节点会运行多个子进程来利用节点的多块 GPU,以加速计算任务。另外,为了加强系统的健壮性,我们对 worker 上的 Elastic Agent 进行了定制化增强,使其能更有效地进行故障检测与定位,确保训练过程中的稳定性和效率。

接下来是故障检测流程。当训练过程中遭遇故障导致任务中断时,直观表现是训练暂停,但具体原因及故障源头并不直接显现,因为一旦发生故障,所有相关机器会同步停止。为解决这一问题,故障发生后,我们立即在所有机器上执行检测脚本。一旦检测到某节点未通过检验,会立即通知 Kubernetes 集群移除该故障节点,并重新部署一个新的替代节点。新节点与现有节点共同完成进一步的健康检查,一切无误后,自动重启训练任务。值得注意的是,若故障节点隔离后导致资源不足,我们将执行缩容策略(后面会具体介绍)。而当原先的故障机器恢复正常,系统将自动执行扩容操作,确保训练高效持续进行。

接下来是故障诊断流程,通过以下综合手段,实现快速准确地故障定位与处理:

  • 首先,Agent 收集各训练进程的错误信息,将这些错误栈汇总至 master 节点。随后,master 节点分析汇总的错误数据,以准确定位问题所在机器。例如,若某机器日志显示 ECC 错误,则直接判定该机器故障并将其排除。
  • 此外,Kubernetes 的退出码也可以用来辅助诊断,如退出码 137 通常指示底层计算平台因检测到问题而终止该机器运行;退出码 128 则意味着设备不被识别,可能是 GPU 驱动存在故障。还有大量的故障是不能通过退出码来检测的,常见的比如说网络抖动的 timeout。
  • 还有许多故障,如网络波动导致的超时,无法仅凭退出码识别。我们会采用更通用的策略:无论故障具体性质,首要目标是迅速识别并踢掉故障节点,然后通知 master 去具体检测问题出在哪里。

首先,在所有节点上执行矩阵乘法运算。随后,将节点配对分组,例如在含 6 个节点的 Pod 中,节点被分为(0,1),(2,3),(4,5) 三组,并进行 AllGather 通信检测。若 4 和 5 之间有通信故障,而其他组通信正常,则可断定故障存在于节点 4 或 5。接下来,将疑似故障节点与已知正常节点重新配对以进一步测试,例如将 0 与 5 组合检测。通过对比结果,确切识别出故障节点。此自动化检测流程能在十分钟内准确诊断出故障机器。

前面讨论了系统中断与故障检测的情况,但还需解决机器卡死的识别问题。NCCL 设置的默认超时时间为 30 分钟,允许数据重传以减少误报,然而这可能导致实际卡顿时,每张卡白白等待 30 分钟,累计起来损失巨大。为精确诊断卡死,建议采用一种精细化的 profiling 工具。当监测到程序暂停推进,例如一分钟内程序栈无变化,即记录各卡的栈信息,对比分析差异。例如,若发现 4 台 rank 中有 3 台执行 Sync 操作,而 1 台执行 wait 操作,即可定位该设备存在问题。进一步,我们将关键的 CUDA 通信 kernel 和计算 kernel 进行劫持,在其执行前后插入 event 监控,通过计算事件间隔来判断运算是否正常进行。例如,若某运算超过预期的 30 秒仍未完成,可视为卡死,并自动输出相关日志及调用栈,提交至 master 进行对比,迅速定位故障机器。

故障机器确定后,考虑到成本与效率,以往训练中虽有备份机制,但数量有限。此时,引入弹性扩缩容策略显得尤为重要。假设原集群有 100 个节点,一旦某节点故障,剩余 99 节点能继续训练任务;待故障节点修复后,系统能自动恢复至 100 节点运行,且此过程无需人工介入,确保高效稳定的训练环境。

DLRover Flash Checkpoint

训练故障恢复过程中,关键在于模型状态的保存与恢复。传统的 Checkpoint 方法由于保存耗时较长,往往导致训练效率低下。为解决这一问题,DLRover 创新性地提出了 Flash Checkpoint 方案,能够在训练过程中近乎实时地将模型状态从 GPU 显存导出至内存,同时辅以内存间的备份机制,确保即使节点故障,也能迅速从备份节点内存中恢复训练状态,极大地缩短了故障恢复时间。针对现在大家常用的 Megatron-LM,Checkpoint 的导出过程需要一个集中式的进程来协调完成,这不仅引入了额外的通信负担和内存消耗,还导致了较高的时间成本。而 DLRover 经过优化采取了一种创新方法,利用分布式导出策略,使得每个计算节点(rank)能够独立保存和加载自己的 Checkpoint,从而有效避免了额外的通信和内存需求,大大提升了效率。

在进行模型 Checkpoint 的创建时,还有一个细节值得留意。模型的训练基于数据,假设我们在训练进程的第 1000 步保存了 Checkpoint。如果之后重新启动训练但未考虑数据进度,直接从头开始重新消费数据将导致两个问题:后续新数据可能被遗漏,同时前期数据可能会被重复使用。为解决这一问题,我们引入了 Distributed Sampler 策略。该策略在保存 Checkpoint 时,不仅记录模型状态,还会一并保存数据读取的偏移位置。这样一来,当加载 Checkpoint 恢复训练时,数据集会从之前保存的偏移点继续加载,继而推进训练,从而确保模型训练数据的连续性和一致性,避免了数据的错漏或重复处理。

在上述图表中,我们展示了一项单机多 GPU(A100)环境下的实验结果,旨在比较不同存储方案对训练过程中 Checkpoint 保存所造成阻塞时间的影响。实验表明,存储系统的性能直接影响效率:采用较低效的存储方式直接将 Checkpoint 写入磁盘时,训练会被显著阻塞,时间延长。具体而言,针对约 20GB 大小的 1.5B 模型 Checkpoint,若使用 NAS 存储,写入时间大约在 2-3 分钟;而采取一种优化策略,即异步先将数据暂存于内存中,能大幅缩短该过程,平均只需约 1 秒钟,显著提升了训练的连续性和效率。

DLRover 的 Flash Checkpoint 特性广泛兼容各大主流大模型训练框架,包括 DDP、FSDP、DeepSpeed、Megatron-LM、transformers.Trainer 以及 Ascend-DDP,为每种框架定制了专属 API,确保了极高的易用性——用户几乎无需调整现有的训练代码,开箱即用。具体而言,DeepSpeed 框架的用户仅需在执行 Checkpoint 时,通过调用 DLRover 的 save 接口来进行,而 Megatron-LM 的集成更为简便,仅需将原生的 Checkpoint 导入语句替换为 DLRover 提供的导入方式即可。

DLRover 分布式训练实践

我们对每个故障场景进行了一系列实验,以评估系统的容错能力、处理慢节点的能力以及扩缩容的灵活性。具体实验如下:

  1. 节点容错实验:通过手动关闭一些节点,测试集群是否能够快速恢复;
  2. 慢节点实验:使用 chaosblade 工具将节点的 CPU 负载提高至 90%,从而模拟出耗时较高的慢节点情况;

  1. 扩缩容实验:模拟了机器资源紧张的场景。例如,一个作业配置了 4 个节点,但实际只启动了 3 个,这 3 个节点仍然可以正常训练。过一段时间后,我们模拟将一个节点隔离,此时可用于训练的 Pod 数减少为 3 个。当这台机器重新回到调度队列中,可用的 Pods 数量又能增加至 4 个,此时 Dataloader 将从上一次的 Checkpoint 继续训练,而不是重新开始。

DLRover 在国产卡的实践

除了支持 GPU,DLRover 故障自愈还支持国产加速卡的分布式训练。例如,我们在华为 Ascend 910 平台上运行 LLama-7B 模型时,采用了 256 张卡进行大规模训练。起初,我们采用的是 KubeFlow 的 PyTorchJob,但该工具不具备容错功能,导致训练进程在持续约十几个小时后会自动终止,一旦发生这种情况,用户必须手动重新提交任务;否则,集群资源将处于闲置状态。第二个图表描绘了在启用训练故障自愈功能后的整个训练过程。在训练进行到 20 小时的时候,出现了一次通信 timeout 故障,此时系统自动重启了训练进程并恢复训练。大约四十多个小时后,遇到一次机器硬件故障,系统迅速隔离故障机器并重启了一个 pod 继续训练。除了对华为 Ascend 910 的支持,我们还兼容了阿里的含光 PPU,并与沐曦科技合作,在其自主研发的 千卡 GPU 上运用 DLRover 进行训练 LLAMA2-65B 模型。

DLRover 千卡千亿模型训练实践

上图展示了 DLRover 训练故障自愈在千卡训练上的实践效果:使用 1000 多张 H800 卡运行大型模型训练,在故障频率为每天一次的情况下,引入训练故障自愈功能后,有效训练时间占比超过了 97%。右侧对比表格显示,在采用阿里云高性能存储 FSDP 的情况下,单次保存仍需大约五分钟的时间,而我们的 Flash Checkpoint 技术仅需 0.3 秒即可完成。此外,通过优化,节点效率提升了近一分钟左右。在导出间隔方面,原先每 2 小时执行一次导出操作,而在上线 Flash Checkpoint 功能后,可以实现每 10 分钟一次的高频导出。一周内 save 操作的累计耗时几乎可以忽略不计。同时,回滚时间相较于之前降低了 5 倍左右。

DLRover 计划&社区共建

DLRover 目前已经对外发布了 3 个大的版本,预计在 6 月份会发布 V0.4.0,发布基于 CUDA Event 的运行时故障检测。

  • V0.1.0(2023/07):k8s/ray 上 TensorFlow PS 的弹性容错和自动扩缩容;
  • V0.2.0(2023/09) :k8s 上 PyTorch 同步训练的节点检测和弹性容错;
  • V0.3.5(2024/03):Flash Checkpoint 与国产卡故障检测;

未来规划方面,DLRover 会持续在节点调度与管理、编译优化 lynx、训练优化框架 ATorch 和国产卡训练几个方向持续优化和改进 DLRover 的功能:

  • 节点调度与管理:通信拓扑感知调度,降低 Ring-based AllReduce 通信时顶层交换机的通信流量;硬件 Metric 收集与故障预测;
  • 编译优化 lynx:计算图调度优化,达到最优的通信与计算重叠, 隐藏通信时延;SPMD 自动分布式训练;
  • 训练优化框架 ATorch:RLHF 训练优化;分布式训练的初始化加速;自动训练加速配置 auto_accelerate;
  • 国产卡训练:将故障自愈、训练加速等功能扩展到国产卡上;提供国产卡训练的最佳实践;

技术进步始于开放合作,欢迎大家到 GitHub 上关注和参与我们的开源项目。

DLRover:

https://github.com/intelligent-machine-learning/dlrover

GLake:

https://github.com/intelligent-machine-learning/glake

我们的微信公众号“AI Infra”,也会定期发布有关 AI 基础设施的前沿技术文章,旨在分享最新的研究成果和技术洞察。同时,为了促进进一步的交流与讨论,我们还设立了钉钉群组,欢迎大家加入,在此提问、探讨相关技术问题。谢谢大家!

文章推荐

提高 AI 训练算力效率:蚂蚁 DLRover 故障自愈技术的创新实践

走近 AI Infra 架构师:在高速飞驰的大模型“赛车”上“换轮子”的人

【在线回放】NVIDIA GTC 2024 大会 | 如何降低 AI 工程成本?蚂蚁从训练到推理的全栈实践

“可信 AI 进展 “ 公众号致力于最新可信人工智能技术的传播和开源技术的培育,覆盖大规模图学习,因果推理,知识图谱,大模型等技术领域,欢迎扫码关注,解锁更多 AI 资讯~

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

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

相关文章

flink cdc,读取datetime类型

:flink cdc,读取datetime类型,全都变成了时间戳 Flink CDC读取MySQL的datetime类型时会转换为时间戳的问题,可以通过在Flink CDC任务中添加相应的转换器来解决。具体来说,可以在MySQL数据源的debezium.source.converter配置项中指…

欢乐钓鱼大师攻略大全,稀有鱼介绍!

在《欢乐钓鱼大师》的广袤海域中,隐藏着无数神秘的鱼类,等待玩家们的探索。这不仅仅是一场钓鱼的冒险,更是一次心灵的洗礼。每一次挥杆都可能揭开一个新的秘密,让我们一起踏上这场奇妙的钓鱼之旅。 寻觅海域明珠:星光闪…

综合模型及应用(图论学习总结部分内容)

文章目录 前言六、综合模型及应用(以题目总结为主)分层图思想(包括拆点建图) e g 1 : 通信线路 eg1:通信线路 eg1:通信线路​​​[A-Telephone Lines](https://ac.nowcoder.com/acm/contest/1055/A)(蓝书例题) e g 2 : 小雨坐地铁 eg2:小雨坐地铁 eg2:小雨坐地铁​ [1012-小雨坐…

【手势操作-复习前一天的内容-预习今天的内容 Objective-C语言】

一、昨天呢,我们学习的是这个,事件 1.事件这一块儿呢,iOS事件,分为三大类, 1)触摸事件 2)加速计事件 3)远程控制事件 2.这个里边呢,我们主要学习的是这个触摸事件,触摸事件里边,就是Touch,touchesBegan:方法里边,有一个touches参数,它是set类型的, 3.Set,…

疯狂为你省钱 - Al一键虚拟试衣整合包

在今天的数字时代,中小服装商家以及各种带货人,面临着各种挑战,其中之一就是模特拍摄的高成本。为此,一个名为OMS-Diffusion的新开源项目应运而生,旨在帮助大家通过虚拟试衣来降低成本。使用这个工具,只需要…

PSFR-GAN复现

写在前面:本博客仅作记录学习之用,部分图片来自网络,如需引用请注明出处,同时如有侵犯您的权益,请联系删除! 文章目录 前言快速开始安装依赖权重下载及复原 训练网络数据集训练脚本 代码详解训练BaseOptio…

【GD32F470紫藤派使用手册】第五讲 PMU-低功耗实验

5.1 实验内容 通过本实验主要学习以下内容: PMU原理; 低功耗的进入以及退出操作; 5.2 实验原理 5.2.1 PMU结构原理 PMU即电源管理单元,其内部结构下图所示,由该图可知,GD32F4xx系列MCU具有三个电源域…

软件设计师笔记(三)-设计模式和算法设计

本文内容来自笔者学习zst 留下的笔记,都是零碎的要点,查缺补漏,希望大家都能通过,记得加上免费的关注!谢谢!本章主要以下午题出现形式为主! 文章编辑于:2024-5-13 13:43:47 目录 1…

聚焦光量子应用开发!Quandela 发布新版量子计算云服务

内容来源:量子前哨(ID:Qforepost) 文丨浪味仙 排版丨沛贤 深度好文:1200字丨5分钟阅读 摘要:法国光量子计算公司 Quandela宣布推出新版量子计算云服务 Quandela Cloud 2.0,通过创新技术确保量…

C++初阶:8.list

list 一.list的介绍及使用 1. list的介绍 list的文档介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中…

AXI Interconnect IP核的连接模式简介

AXI Interconnect IP核内部包含一个 Crossbar IP核,用于在 Slave Interfaces(SI)和 Master Interfaces(MI)之间路由传输。在连接 SI 或 MI 到 Crossbar 的每条路径上,可以选择性地添加一系列 AXI Infrastru…

3389端口报SSL_TLS协议信息泄露漏洞(CVE-2016-2183)【原理扫描】漏洞

1、win+R运行,输入gpedit.msc进入本地计算机策略 2、本地计算机组策略——>计算机配置——>管理模板——>网络——>ssl配置设置 3、打开ssl密码套件顺序 4、点击已开启,把密码套件替换为下一步中的套件内容。 套件内容 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_…

韵搜坊(全栈开发)-- 项目介绍

文章目录 项目介绍技术栈前端后端 业务流程 后端地址: https://github.com/IMZHEYA/zhesou-backend 前端地址: https://github.com/IMZHEYA/zhesou-frontend 图标设计(AI生成): 项目介绍 一个聚合搜素平台&#xff…

火山引擎A/B测试平台的实验管理重构与DDD实践

本次分享的主题是火山引擎数智平台VeDI旗下的A/B测试平台 DataTester 实验管理架构升级与DDD实践。这里说明的一点是,代码的第一目标肯定是满足产品需求,能够满足产品需求的代码都是好代码。而本文中对代码的好坏的评价完全是从架构的视角,结…

机器人增量学习研究综述

源自:控制与决策 作者:马旭淼 徐德 “人工智能技术与咨询” 发布 摘 要 机器人的应用场景正在不断更新换代,数据量也在日益增长.传统的机器学习方法难以适应动态的环境,而增量学习技术能够模拟人类的学习过程,使机器人能利用旧知识来加快新任务的…

维护祖传项目Tomcat部署war包

文章目录 1. 安装tomcat2. 解决Tomcat启动日志乱码3. idea配置启动war包 1. 安装tomcat 选择免安装版本,只需要在系统变量里面配置一下。 新增系统变量 CATALINA_HOME D:\Users\common\tomcat\apache-tomcat-8.5.97-windows-x64\apache-tomcat-8.5.97 编辑追加Path…

ROS2入门21讲__第03讲__ROS2安装方法

目录 前言 Linux系统简介 Ubuntu系统简介 Ubuntu虚拟机安装 1. 下载系统镜像 2. 在虚拟机中创建系统 3. 设置虚拟机硬盘大小 4. 设置Ubuntu镜像路径 5. 启动虚拟机 6. 设置用户名和密码 7. 等待系统安装 8. 完成安装 ROS2系统安装 1. 设置编码 2. 添加源 3. 安装…

利用香港多IP服务器进行大数据分析的潜在优势?

利用香港多IP服务器进行大数据分析的潜在优势? 在当今数据驱动的时代,大数据分析已经成为企业获取竞争优势的不二选择。而香港作为一个拥有世界级通信基础设施的城市,提供了理想的环境来部署多IP服务器,从而为大数据分析提供了独特的优势。…

文档解析与向量化技术加速多模态大模型训练与应用

前言 随着人工智能技术的不断发展,多模态大模型作为一种新型的机器学习技术,逐渐成为人工智能领域的热点话题。多模态大模型能够处理多种媒体数据,如文本、图像、音频和视频等,并通过学习不同模态之间的关联,实现更加…

Mac安装jadx

1、使用命令brew安装 : brew install jadx 输入完命令,等待安装完毕 备注(关于Homebrew ): Homebrew 是 MacOS 下的包管理工具,类似 apt-get/apt 之于 Linux,yum 之于 CentOS。如果一款软件发布时支持了 homebrew 安…