DLRover:蚂蚁开源大规模智能分布式训练系统·SOFAStack

文|沙剑蚂蚁集团高级技术专家专注分布式深度学习领域主要负责蚂蚁大规模分布式训练引擎的设计和开发

本文4491字阅读12分钟

2022年6月,蚂蚁集团决定全面引入ESG框架,启动并确立了“数字普惠”、“绿色低碳”、“科技创新”、“开放生态”四位一体的可持续发展战略。针对“绿色低碳”,设立了4个子议题,包括绿色运营、科技助力产业碳中和、生态保护与修复绿色低碳生活。

在此背景下,绿色AI也成为蚂蚁AIInfra团队的一个重要工作方向。作为绿色AI的重要板块,工程提效项目致力于打造高性能离在线AI工程体系,通过提升算力效率和资源利用率,最终达到节省资源降低碳排放的目的。

当前,用户提交分布式训练作业的工具有Yarn或者KubeFlow/Training-Operator。在提交作业时,用户需要在作业中指定作业资源,包括不同角色的节点数量和资源规格(CPU核数、内存、GPU等)。

在训练作业提交后,作业可能遇到如下问题:-集群资源不足以启动作业的所有节点,作业只能等待。-训练作业的节点可能会出错,比如被高优任务抢占、机器故障、IO故障等,导致作业失败。

出现这些问题后,用户只能修改作业资源来重新提交作业。

针对这两个问题,蚂蚁集团早期基于Kubernetes开源了ElasticDL项目来支持K8s上TF2.x分布式训练的弹性容错。在项目落地过程中我们又发现了如下问题:-用户配置的资源可能过少引起OOM和训练性能差。-用户为了保障作业成功率和速度,通常会配置超额资源导致利用率低。-越来越多的用户使用PyTorch或其他TF之外的框架来开发和训练模型。-越来越多的分布式集群开始支持AI作业,比如Ray、Spark集群,能否适配任意计算集群?-在线学习越来越被广泛采用的情况下,如何运用一套系统同时解决兼容离在线训练?

前两个问题使得集群CPU利用率通常只有20%上下,同时算法开发人员需要投入很多人工运维成本,为了解决训练端资源提效的需求,支持在不同集群上针对在离线多种训练模式,给不同框架的分布式训练作业自动地寻找最优资源配置。

蚂蚁AIInfra团队基于ElasticDL弹性容错的思路,升级扩展并开源了DLRover,其目标在于提升分布式模型训练的智能性,目前很多公司的训练作业都是跑在混部的集群中,运行环境复杂多变,正如其名,DLRover作为分布式训练领域的“路虎”,不管多么崎岖的地形,都可以轻松驾驭。

DLRover提出了“MLforSystem”的理念来提升分布式训练的智能性,那么这样的系统应该具备哪些能力呢?

我们认为主要体现在如下几个方面:-解耦:不和底层训练框架耦合在一起,只依赖接口抽象,遵循依赖倒置原则。(*i.e.ElasticRuntime*)-资源调度:具备上帝视角的资源调度管控能力。和建立在对作业精准画像的决策能力。-数据驱动:同时收集掌握集群资源数据,也掌握训练作业数据。以数据驱动智能。-作业交互:以对训练作业以及模型白盒化的理解,动态根据实际情况,对训练作业进行优化调整。超越简单机械的弹性容错!-智能:通过对集群以及作业信息的收集,结合算法模型+固定策略产出精准的作业优化策略。

我们希望设计并实现一个系统,让用户完全摆脱资源配置的束缚,专注于模型训练本身。在没有任何资源配置输入的情况下,DLRover仍然可以为每个训练作业提供最佳资源配置。考虑到用户可能会以不同的方式运行他们的训练作业,DLRover除了面向训练平台进行作业统一管理的ClusterMode,也提供Single-JobMode方便独立的算法开发者也能享受到弹性容错等基本特性。

DLRover由四个主要组件组成:ElasticJob、ElasticTrainer、Brain服务和ClusterMonitor。

上图显示了DLRover如何在K8s集群上管理深度学习训练作业。DLRover以ElasticJobCRD的形式将作业提交到集群。收到CRD后,ElasticJobOperator会拉起一个MasterPod作为ElasticTrainer。其从Brain服务中获取初始资源计划。ElasticTrainer用它来创建ScaleCRD,并应用ScaleCRD通知ElasticJobController启动所需的Pod,每个Pod将在其上启动一个ElasticAgent。

在训练过程中,ElasticTrainer的TrainingMaster将数据分片分发给Worker。同时,ClusterMonitor监控每个作业的运行状态(*i.e.每个节点的Workload*)和集群状态(*i.e.资源水位*)。这些数据将定期报告给Brain,Brain将数据持久化到数据库中。

然后DLRoverBrain根据作业的运行状态,选择合适的算法生成新的资源计划,并通知ElasticTrainer开始资源调整。

用户提交分布式作业时无需提供任何资源信息,DLRover会自动对作业进行画像,推导出最优的资源配置,同时运行时可以根据实际情况(*集群资源、样本流量、当前利用率、…*)自动对资源进行调整。下面展示了两种提交脚本的配置对比:

DLRover支持单点恢复ParameterServer和Worker角色的失败退出而不需要整体作业重启,对于非用户代码和数据类型的错误可以实现用户无感的重启。例如集群中,很常见的一类错误是由于用户配置了不足的内存,导致训练OOM。在DLRover的帮助下,我们可以自动拉起一个优化配置的节点来恢复失败的Node。在真实环境下,DLRover管理的训练作业,相比基线的KubeflowTF-Operator作业,训练成功率从84%提升到了95%以上。

DLRover针对ParameterServer和Worker级别都支持在训练运行时进行自动的调节训练资源以提升训练性能。通过监控作业节点的Workload,DLRover可以分析资源配置的瓶颈。常见的资源瓶颈有:节点抢占、Workload不平衡、CPU不足导致算力低下、节点数目不足。DLRover可以通过动态的资源热更新来持续优化训练性能。

通常不同的模型训练作业,需要不同的资源配置。然而用户倾向于超额配置作业的资源以保障作业的成功率。这通常会导致大量的资源浪费。DLRover的自动扩缩容能力,可以自动根据作业的真实需求配置资源,以最少的资源达到最优的训练性能,从而减少资源浪费。下图显示了自动资源对比手动资源的资源利用率曲线对比:

混部集群存在资源超卖和抢占的情况,部分节点消费数据慢,快节点需要等待慢节点,降低训练速度。DLRover可以通过数据动态分发给慢节点少分发一些数据,减少等待。此外DLRover应该保证训练任务尽可能按照用户配置参数消费数据,避免重复消费/丢失数据,这会给训练带来不确定性,影响模型性能。

当扩容或者缩容时,需要有个全局协调者知道记录节点当前消费数据详情。当节点失败重启后,全局协调者需要知道节点已经消费和尚未消费的数据。如果这些逻辑让训练节点来做,训练节点和训练节点之间需要交互,增加训练节点逻辑的复杂性。DLRoverMaster充当了这个全局协调者的角色。

总而言之,在我们看来,通过动态数据可以简化训练节点逻辑的复杂性,训练节点只管从DLRoverMaster获取Shard,然后读取数据,不需要处理其他的逻辑。

上述动态数据分片特性,实际上帮助我们将DataSource和训练作业进行了解耦,在此基础上DLRover可以同时支持离线训练,也可以支持消费实时样本流的在线学习作业。(*可以通过Dlrover.trainer直接对接样本流,也可以作为流计算引擎的训练Sink节点*)

在蚂蚁的实践中,DLRover可以作为一个理想的组件,来帮助我们构建出一个端到端的在线学习系统。DLRover可以提供数据源消费位点记录与恢复,在线学习长跑作业稳定性与性能保障,资源利用率保障等一系列实际问题。我们的开源仓库中也提供了简单的范例,后续我们也会开放更多周边组件。

训练集群中每天都运行着不同业务域性质各异的训练作业:推荐系统的大规模稀疏模型通常运行在PS/Worker架构的训练模式下进行异步参数更新,资源也多以CPU计算为主。CV/NLP领域的稠密模型则多以数据并行的方式在GPU服务器上进行同步训练,这时只有Worker一种角色。

DLRover在设计上,可以同时支持同步和异步更新模式,做到针对各种训练范式的统一。

DLRover支持用户使用任何自己的训练框架,底层训练代码通过提供约定的API接口以实现自动弹性扩缩等需要同底层分布式代码深度交互。集群中部署完成后,终端算法同学基本可以无感接入。

DLRover目前已经在蚂蚁大规模落地,集群资源利用率相对于基线稳定获得了15%以上的提升。同时也有效解决了由于资源配置不合理造成的训练吞吐不及预期的问题。我们希望通过DLRover的开源可以帮助更多同行一起推行低碳、绿色、AI的理念。同时也切实降低模型开发中的运维成本,释放更多的生产力去解决业务的问题。

当前DLRover的调优算法,以及资源,作业画像策略主要针对蚂蚁内部技术栈优化。考虑到不同机构实际技术栈的多样性,在设计上,DLRover在API层做了统一接口抽象,具体调优算法与作业画像策略则可灵活自定义。我们欢迎不同机构的开发者也能根据自身特点,同我们一起共建DLRover项目,将其发展壮大。

THE END
1.推荐几个在线练题平台腾讯云开发者社区最近在刷LeetCode,对于这种刷题平台由衷的喜欢,同时发现了几个非常好的在线练习平台,分别是学习Git、SQL、正则表达式的在线练习平台。 看到有人在评论里面问有没有Python的在线练题平台,想起来我这还是个Python的账号呢,汗颜呀,所以补充一下我之前用过的Python在线练题平台。 https://cloud.tencent.com/developer/article/1667969
2.GitHub中适合新手学习机器学习的项目,以及学习三款工具Keras:Keras 是一个高级神经网络库,建立在 TensorFlow 之上,提供了简洁而灵活的接口。你可以学习如何使用 Keras 构建和训练神经网络模型,包括卷积神经网络、循环神经网络等。项目链接:https://github.com/keras-team/keras Fast.ai:Fast.ai 是一个面向初学者和中级学习者的深度学习教育平台,提供了一系列的课程和教程https://blog.csdn.net/itcast_cn/article/details/131403576
3.GitHublearninghub/learninghub:learningNotifications Fork0 Star1 learning-hub又一个OJ的在线编程学习平台. learning-hub.github.io/learning-hub/ License Apache-2.0 license 1star0forksBranchesTagsActivity Star Notifications master BranchesTags Code Folders and files Latest commit 53 Commits https://github.com/learning-hub/learning-hub
4.24常见渗透测试漏洞靶场列表11. MS08067实战型训练平台: http://bachang. 12. 东塔在线靶场: https://labs./index/course/index 0x03 漏洞靶场 1. DVWA: http://www. 2. BWVS: https://github.com/bugku/BWVS 3. BWAPP: https:///projects/bwapp 4. WAVSEP: https://github.com/sectooladdict/wavsep http://www.360doc.com/content/23/0410/06/77981587_1075837858.shtml
5.Taurus:面向机器学习的数据面架构(下)5.2.3. 在线训练 Taurus 的机器学习模型也可以被更新以优化全局指标,这对于单个交换机无法观察到的行为(如下游拥堵)很有帮助。我们将遥测数据包送入控制面的训练应用程序,并使用流量规则配置时间作为估计,评估更新数据面模型权重所需的时间。 图13 显示,更高的采样率(对应更多的批处理数据)收敛速度更快(几十到几https://developer.aliyun.com/article/1111129
6.线上python哪个平台好?Worktile社区3. 分享和共享:可以将Notebook保存为文件或分享到GitHub等平台。 ### 三、Google Colab Google Colab是一个基于云的Python编程环境,可以免费使用。它提供了一个Jupyter Notebook的界面,并且可以直接在云端运行代码。 ### 优势 1. 云端运行:所有代码和数据都存储在云端,无需担心本地环境的配置和限制。 2https://worktile.com/kb/ask/90158.html
7.超全整理:程序员都在用什么工具?“计算机科学里两件最难的事:缓存失效和命名。” Codelf 通过搜索在线开源平台 Github, Bitbucket, Google Code, Codeplex, Sourceforge, Fedora Project 的项目源码,帮开发者从中找出已有的匹配关键字的变量名,从而帮助为变量名苦恼的开发者命名。这个搜索服务支持直接搜索中文。 https://xie.infoq.cn/article/3808624e50341691b5e44c647
8.线上教学质量监测方案2、课程教学方案二:教师使用班级微信群、QQ群等开展互动教学,疑难解答。各任课教师按照班级课表,及时发布学习计划和资源,微课、作业、课件等,指导学生按时完成学习任务。老师在微信群、QQ群等在线平台通过“语音+图片+文字+小视频”的形式进行教学直播,开展实时讨论、作品点评、小视频分享等活动。 https://www.oh100.com/a/202301/5942245.html
9.从零训练一个多模态LLM:预训练+指令微调+对齐+融合多模态+链接另一种做法参考论文Anthropic LLM ,通过三个阶段的训练,包括语言模型预训练,偏好模型预训练,以及偏好模型微调。首先在大规模语料上进行语言模型的预训练,这一步直接采用指令微调后得到的LLM。然后从StackExchange/Reddit/Wikipedia等获取混合对比数据集,进行偏好模型的预训练。最后在人类反馈对比数据上进行微调,训练符合人类https://www.shangyexinzhi.com/article/10160427.html
10.一步一步教你在线免费训练机器学习模型(启用GPU和TPU)由于我无法在这篇文章中涵盖所有在线训练机器学习模型的服务,因此本文将有第二部分。 所有需要学习和实践机器学习的资源都是开源的,可在线获取。从计算、数据集、算法以及免费在线提供的各种高质量教程,你只需要互联网连接和学习的热情。 我希望这篇文章有用,因为它解决了开始走向机器学习和数据科学之路的业界人士所面https://blog.itpub.net/31545819/viewspace-2216969/
11.卷王都在用!100款宝藏级AIGC工具分享,强烈建议收藏!!用户输入想要润色、修改的文本内容,点击“一键优化”之后,它就能自动识别文本类型、风格以及写作目的,用户还能调整想要修改的幅度,平台就能基于原文一键输出英文改写结果,还支持智能纠错、多样改写等AI功能,使语言表达更加地道、简洁。网页链接:https://www.writingo.nethttps://www.changbiyuan.cn/news/2023/news_0711/69335.html
12.AI资料入门:快速获取与利用AI资源的指南AI工具与平台利用指南 1. 开发工具与环境 Jupyter Notebook:集成Python、R或Julia等语言的交互式环境,方便编写、运行和展示代码。 Google Colab:结合了Jupyter Notebook的便利性和Google云服务的计算能力,支持GPU加速,适合AI模型训练。 2. 社区与论坛 参与具有活跃AI社区的论坛如Stack Overflow的AI版块、Reddit的AI论坛https://www.imooc.com/article/349375
13.私有化部署,开源轻量级的团队在线协作工具——Kooteamkooteam是一款轻量级的在线团队协作工具,提供各类文档工具、在线思维导图、在线流程图、项目管理、任务分发,知识库管理等工具。 介绍 kooteam是一款轻量级的在线团队协作工具,提供各类文档工具、在线思维导图、在线流程图、项目管理、任务分发,知识库管理等工具。 同时也是一个免费开源的产品,遵循Apache Licence 2.0开源协议https://news.51cto.com/art/202005/617354.htm
14.有趣的开源社区微信扫码赞助本站 服务器还剩278天 +1年 : 用户总数 2.6w 开源项目 3533 关于本站 HelloGitHub 是一个发现和分享有趣、入门级开源项目的平台。 希望大家能够在这里找到编程的快乐、 轻松搞定问题的技术方案、 大呼过瘾的开源神器, 顺其自然地开启开源之旅。https://hellogithub.com/