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.train和offlinetrain需要交互的训练是online吗离线学习适用于处理大数据和复杂模型,需要所有训练数据在训练前可用,训练完成后模型才用于预测。在线学习则侧重实时性,数据以流式到达,模型会随新数据不断更新。两种方式常结合使用,如离线训练后在线微调。在线学习关注当前数据,离线学习则能看到全局。 摘要由CSDN通过智能技术生成 https://blog.csdn.net/qq_45104603/article/details/126052925
2.关于训练神经网路的诸多技巧Tricks(完全总结版)很多人都说训练神经网络和炼金术师炼药的过程相像,难以破解其中的黑盒子。其实不然,在训练的时候我们依然可以通过大量的技巧去最大化我们的训练效果,从而帮助我们的任务取得不错的精度,这些技巧是训练神经网络不可缺少的一环。 本文尽可能说明训练过程中所需要的各种小技巧,会有不完善的地方,限于篇幅每个点不会说很https://cloud.tencent.com/developer/article/2346565
3.如何构建高效的离线机器学习模型训练平台?袋鼠社区此外,离线训练还能够有效减少对网络带宽的依赖,提升训练的稳定性和效率。 二、离线机器学习模型训练平台的核心组成部分1. 硬件环境: 离线机器学习训练平台的硬件环境是基础,包括计算机硬件(CPU、GPU等)、存储设备(HDD、SSD)和网络设施等。合适的硬件配置对模型训练速度和性能起着至关重要的作用。比如,GPU在处理大型https://www.dtstack.com/bbs/article/15769
4.相比于离线训练,在线训练的好处有什么?问答离线训练毕竟使用的是 T-1 或者 T-2 的数据去做的,没有对线上实时产生的行为数据进行利用,对于数据的时效性利用相对较差。 比如说,有这样的一个场景,今天我的整个平台只对 14 岁以下的少女做某个运营活动,而平台上充斥了大量的年龄段的客户,整个平台的交互行为都变了,这个时候你的模型还是 T-1 去做的,将https://developer.aliyun.com/ask/446535
5.模型也可以上网课?!一文看懂服务型蒸馏训练方案同时由于Teacher模型可以弹性调度,不用担心高峰时线上实例被抢占造成的任务失败。相当于把teacher对训练卡的资源需求转移到了在线GPU卡上,在v100等离线训练资源受限的情况下,使用在线卡对训练进行加速,以节约宝贵的训练资源。 此外,在离线集群上,结合调度策略,还可以将Teacher模型部署到集群碎片资源,或者如k40等使用率https://www.thepaper.cn/newsDetail_forward_8071575
6.谁说RL智能体只能在线训练?谷歌发布离线强化学习新范式为了避免 distribution mismatch,强化学习的训练一定要在线与环境进行交互吗?谷歌的这项最新研究从优化角度,为我们提供了离线强化学习研究新思路,即鲁棒的 RL 算法在足够大且多样化的离线数据集中训练可产生高质量的行为。 为了避免 distribution mismatch,强化学习的训练一定要在线与环境进行交互吗?谷歌的这项最新研究从优化https://www.51cto.com/article/614512.html
7.深度学习模型在线训练排序策略离线排序模型华为云帮助中心为你分享云计算行业信息,包含产品介绍、用户指南、开发指南、最佳实践和常见问题等文档,方便快速查找定位问题与能力成长,并提供相关资料和解决方案。本页面关键词:深度学习模型 在线训练。https://support.huaweicloud.com/topic/985668-2-S
8.科学网—[转载]群视角下的多智能体强化学习方法综述基于学习(深度学习、强化学习)设计的迭代式问题求解方法是离线策略学习的基础范式。由于环境及对手的非平稳性,离线训练的蓝图策略通常很难直接运用于在线对抗。在线博弈对抗过程与离线利用模拟多次对抗学习博弈过程不同,博弈各方处于策略解耦合状态,与离线批(batch)式策略学习方法不同,在线博弈对抗策略的求解本质是一个流https://blog.sciencenet.cn/home.php?mod=space&uid=3472670&do=blog&id=1422698
9.蚂蚁金服核心技术:百亿特征实时推荐算法揭秘备注:弹性特征带来一个显著的优势:只要用足够强的L1稀疏性约束,在单机上就能调试任意大规模的特征训练,带来很多方便。我们的hashmap实现是KV化的,key是特征,value是vector的首地址。 离线训练优化 经过这样的改造后,在离线批量学习上,带来了以下变化: 在线训练优化 https://maimai.cn/article/detail?fid=1010621115&efid=mIQCHnkj0zjxlpygUmo5mg
10.构建容器镜像部署nnae软件(支持离线推理在线推理训练)本文档基于镜像树结构来构建容器镜像,具有可扩展性。 镜像树示意图如图1所示。 图1镜像树示意图 表1 昇腾基础镜像树说明 镜像名 说明 ascendbase-train 安装系统组件及python第三方依赖等。 ascend-train 安装深度学习引擎包nnae(支持离线推理、在线推理、训练)等。 https://www.hiascend.com/document/detail/zh/mindx-dl/2046/dluserguide/toolboxug/toolboxug_000121.html
11.机器学习术语表:机器学习基础知识MachineLearningGoogle动态模型(或在线模型)是一种模型, 。 动态训练(或在线训练)是训练 频繁或持续不断 动态推理(即在线推理)是 根据需求生成预测。 动态模型 #fundamentals 一个模型经常出现(甚至可能会持续) 重新训练。动态模型是一个“终身学习者”那个 适应不断演变的数据。动态模型也称为在线模型。 https://developers.google.cn/machine-learning/glossary/fundamentals?hl=zh-cn
12.基于Kmeans聚类的CSI室内定位AET对于单个天线对得到fin,对于m个天线的每个天线对使用Kmeans算法,得到训练向量: 2.2 在线定位阶段 在线定位阶段采用与离线训练阶段相同的方法提取到m个天线对的指纹: 将提取到的指纹与训练阶段建立的数据库中的指纹作比较,即将获取到的第i个天线对的指纹矩阵与数据库中的第i个天线对的指纹矩阵,进行两个指纹矩阵中任http://www.chinaaet.com/article/3000057028
13.粗排优化探讨得物技术离线在线一致性分析 待补充实际效果 四 样本设计 粗排相较于精排样本选择偏差(SSB)的问题更加严重,借鉴召回经验,可以通过适当采样减少偏差。采样设计的目的也是希望离线训练样本尽可能与线上分布一致。 样本选择方法 负样本可选范围: 曝光未点击样本; 全库除转化外样本; https://blog.itpub.net/70027824/viewspace-3000851/
14.推荐模型离线评测效果好,线上效果却不佳的原因推荐系统里非常常见,并且往往非常的隐蔽的一种数据分布不一致的情况被称之为冰山效应,也就是说离线训练用的是有偏的冰山上的数据,而在线上预估的时候,需要预测的是整个冰山的数据,包括大量冰面以下的数据!我们看下面这张图。左边是我们的Baseline,绿色的表示正样本,红色表示负样本,灰色部分表示线上由于推荐系统的“https://www.jianshu.com/p/34489b31c783
15.微软亚洲研究院解密:AISuphx是如何成为麻将十段的?科技当初始的手牌发到麻将AI手中时,通过模拟来调整离线训练好的策略,使其更适应这个给定的初始手牌。微软亚洲研究院的实验表明,相对麻将隐藏信息集的平均大小10的48+次方倍而言,模拟的次数不需要很大,pMCPA也并不需要为这一局手牌收集所有可能后续状态的统计数据。由于pMCPA是一种参数化的方法,所以微调更新后的策略可以帮https://www.whb.cn/zhuzhan/kjwz/20200412/340072.html
16.推荐算法中的在线学习和离线学习有何区别,各自的优缺点是什么在线学习和离线学习是推荐算法中常见的训练方式,各自有不同的优缺点。在实际应用中可以根据需求选择合适的方式或结合两者优势。https://www.mbalib.com/ask/question-ec5c1bbee149c6534d0a725ffdb15235.html
17.2019机器之心人工智能年度奖项正式公布:关注创业先锋,聚焦产品2019 年,天泽智云发布无忧机加解决方案,基于 CPS 信息物理系统架构,融合高频振动数据和加工运行数据,结合机理、数据的智能分析,离线训练算法模型,在线评估刀具健康状态,实现刀具失效预警、刀具寿命预测和主轴健康管理。截止 2019 年 12 月底,已服务 2 家机床厂商,为其增强产品竞争力,提升服务价值;助力 4 家制造商将https://www.zhuanzhi.ai/document/2abfb47db9cd9ab70b4144f329e147b8