从《字节万卡训练论文》看ModelArts的异曲同工

举报
tsjsdbd 发表于 2024/03/08 19:13:57 2024/03/08
【摘要】 总结《字节万卡训练论文》讲了些什么,并对比了华为云ModelArts这个AI平台在做大规模AI训练努力上的一些差异。

 

最近字节发布了一篇《万卡训练论文》,介绍了他们的MegaScale系统如何支撑万卡级的AI训练规模,堪比AI平台建设的采坑指南。其内容强调了AI-Infrastructure平台的重要性,对唐老师这种同样搞AI平台(华为云ModelArts)的人来说,非常认同。这里小结一下这篇论文讲了些什么,并反观我们自己的AI平台,有何异同。


Ps,其原文是这么描述:现有的技术报告主要集中在模型性能比较上,忽略了使这种训练成为可能的系统基础设施的具体细节。本文通过从系统的角度分享我们在超过10,000GPU规模上进行端到端LLM预训练的经验,填补了这一空白。

 

一、论文讲了什么

全文讲的是关于他们如何支撑大规模的AI训练,总结起来主要2个主题:高效+稳定。(正如文章开始所述的2大挑战一样)。接着就从高效+稳定两方面,分别展开介绍,如何实现AI训练的提速,以及确保训练任务的稳定可靠。最后分享了这些努力的结果:基于Megatron-LM增强后,算力利用率达到开源的1.34倍。

其多次提到整个系统的设计理念:算法-系统共同设计来优化训练效率。这跟咱们提的IaaS4AI的思路一致。(虽然IaaS4AI在落地上存在一丢丢不足,但至少理念是一致的,后面分析异同章节会说)。

1.    各章节小结

章节1+章节2谈背景:重点介绍了大规模AI训练所需要的各种并行模式,如数据并行(DP),模型并行方式1-流水线并行(PP),模型并行方式2-张量并行(TP)。并强调了故障的常态性和故障的代价极高。

章节3谈高效,章节4谈稳定。这两块是该论文的主体价值部分,我总结到下图:


高效主要是从训练框架,或者说分布式训练的原理角度进行的。着重介绍了各种并行模式下,如何将计算与通信在时间上进行重叠。即实现一边算一边传,而不是算完再传,这样不用让GPU出现空闲等待。

而稳定性则是从平台角度来做增强,特别是故障的感知+故障的恢复,以及整个训练过程如何可视化来帮助故障的发现。

 

5章谈监控+可视化的运维面能力。第6章介绍各个维度的优化的测试效果。

 

二、与ModelArts的异同

ModelArts作为华为云的AI平台服务,肯定与MegaScale存在一些差异。比如MA重点关注的是平台能力,而训练框架(如PytorchMindSpore等)层的改进(如各种并行策略的选择),则由盘古大模型配合完成。

所以广义上的ModelArts平台范围如下:


同时,由于在云服务中,基础设置也是一个云服务。服务都是service on service的,因此狭义上的ModelArts会不包含基础设施。但是基础设施的配置,仍然是由MA下发控制的。

总的来说,字节论文中提到的优化点,ModelArts基本都有类似的实现,那些咱就不一条一条列出来了。挑一些不一样的差异点,分别总结如下:

 

1.    推理+训练

这里就是ModelArts(简称MA)这个AI平台与MegaScale不太一样的地方,由于MA是一个AI平台的云服务,它不仅要支持各种AI训练任务,还得支持各种AI推理应用。因此对于训推一体的场景下,资源调度分组+隔离的能力上,要求会更高。即一个集群里面,可以支持多个「逻辑子池」来运行不同AI业务。同时对于AI推理的优化,也同样需要做增强,这一点MegaScale论文中未提及AI推理场景。

2.    多租云服务

同样的由于MA是一个云服务,所以它还需要支持云服务的基本能力。即多租户使用,以及各种按需或者包周期的商业形态。因此,当一个超大规模的集群里面,同时运行多个租户的训练作业时,其面临的挑战(如ECMP哈希冲突)会更严峻。同时,由于各个租户的使用时长不一致,对资源的分配要求更高,要求不能出现“资源空洞”,导致分布式任务资源无法满足,比如整柜下发任务这种。

3.    故障模拟

从字节论文里可以看出,其对故障的感知和发现能力有做大幅的投入,这些维度ModelArts也都有投入。毕竟日志、监控、诊断是常见的手段嘛,各家AI平台应该都不会落下。

但是对于故障模拟这个功能并未提及,这一点MA是可以提供NPU卡的全量故障模拟能力的,这一点可以帮助测试&开发人员分析整个AI训练的鲁棒性,以及故障恢复对整体影响如何改进。

4.    训练任务管理框架

可以看到字节管理训练任务的框架如下:


我提炼一下,字节的训练任务管理框架:


就是把管理逻辑,和训练逻辑明显的分开。但是ModelArts由于是个云服务,一般出于安全考虑,会不让数据面可以这么自由的连通管理面。因此管理训练任务的模式稍有微调:


MA的一个分布式训练任务,会让参与训练的所有“选手”,先选出一个“老大”(通常是1号),然后其他选手都把信息发给这个老大。后面的管理决策逻辑,就跟字节大差不差的了。可以看出整体“管理训练任务”的思路其实差别不大,无非这个「Driver」程序放哪里执行有一点点不同。

5.    故障恢复

在分布式训练中,有一个成员发生故障,如何恢复的问题上。字节的论文中只提及:替换故障节点后,重新恢复任务,并利用checkpoint恢复训练。这里并没有提及参与训练的其他worker的详细过程。


MA这故障恢复的时候,提供了多种恢复策略:原地恢复、Pod级恢复、Job级恢复。

  • 原地恢复:

根据故障的来源,判断出只需要进行一些reset动作,即可恢复的(如ECC错误、磁盘满等等)故障。那么只需要对本地进行reset行为后,重启该进程就行。

  • Pod级恢复:

这个GPU坏了,那么所有其他的worker不用退出。只需要单独等这个坏卡的Pod重新调度后,即可恢复训练。


  • Job级恢复:

隔离坏卡后,重新投递本次训练任务。因为它会自动从checkpoint处恢复继续训练。

 

6.    CKPT的加速

先将训练状态(checkpoint)保存到内存,然后异步将内存数据,保存到外部存储。这个思路确实可以大幅提升CKPT的保存&恢复。当前MA也正在进行这条路径的优化实现,虽然稍有落后,但是也会在今年年中提供该能力。

CKPT的加载上,思路也差不多。MA会先让部分worker(比如前面提到的1号选手)先加载CKPT,然后通过高速RDMA网络,同步至其他选手。同时做分布式的加载,即多个worker分别加载CKPT的一部分来合成。这样有一个明显的好处是:不会大家同时去读外部存储,导致存储带宽成为瓶颈。

7.    日志聚合&分析

字节论文中提到,所有参与训练的worker日志,会被聚合后进行实时分析过滤。这一点MA稍有不同,训练worker的日志,会在采集时就进行过滤分析。如果有异常就会第一时间发现。同时也会对其他信息进行聚合由参与训练的“老大”执行分析。

相对字节的由外部聚合后再过滤分析,虽然MA直接在采集处就进行过滤分析,会增加一点点性能损耗,但是与训练时间相比,开销微不足道,并且与阿里云的PAI里面的AI-Master思路也是一致的。

所以各家的思路方向仍然是大同小异。

8.    CUDA采集

这块因为要修改用户CUDA调用入口进行埋点,MA作为云服务有时候无法主动提供该能力(需要用户的训练任务配合)。不过在昇腾NPU场景下可以考虑提供该能力。

可以提供训练任务全局角度的CUDA时长视图,并从中观察到多个worker之间的依赖关系+处理时长,是一个非常好的特性。

 

三、小结

感谢字节这种Open的精神,与大家分享其万卡训练的经验,一起推动大规模AI训练的进展。ModelArts作为华为云的AI平台服务,也提供了其论文中提及的大部分的能力,虽然实现细节上不完全一样,但是目的是一致的:即追求训练的“高效+稳定”。特别是对故障的管理,如故障感知、故障恢复、故障排查等,亦是作为一个重要特性进行开发的。

有些字节提到的优秀的思路,后续ModelArts也会借鉴。同时,ModelArts也有一些自己特有的场景和能力来帮助训练出更好的AI模型。希望同领域的人一起多多交流,共同进步J

 

Ps,鉴于AI的火热,ModelArts今年有不少招人指标哦。对AI平台有兴趣的人,可以联系我们。过来和唐老师一起冲这一波AI的浪潮吧~

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。