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.ChatGPT与传统聊天机器人的不同之处chatgpt文章ChatGPT与传统聊天机器人的不同之处主要体现在模型架构、训练数据、对话连贯性、适应性和功能方面。 1. 模型架构: ChatGPT是基于深度学习的模型,使用了Transformer架构,这种架构可以处理长文本,同时具有较好的并行计算能力。 传统聊天机器人则多采用基于规则或基于统计的机器学习模型,需要手工设计规则,过程繁琐。 https://www.chatgptzc.com/chatgptwenzhang/49093.html
2.Neurips2024解读系列之——IlyaSutskever快速回顾了大家熟知的预训练的几个历史阶段以及scale law究竟scale在哪里,law是什么的经典结果图。 但是,尽管计算设备(更好的GPU,比如H200)还能提升,数据用完了,预训练似乎走到头了? 此处又给出了几种可能得解决办法, 发展Agent代理提高模型性能(时下比较火,又是一个大的方向) https://zhuanlan.zhihu.com/p/12741832800
3.机器学习中的在线学习与离线学习离线训练是什么意思离线学习:一个batch训练完才更新权重,这样的话要求所有的数据必须在每一个训练操作中(batch中)都是可用的,个人理解,这样不会因为偶然的错误把网络带向极端。 这种理解方式在国外论文中出现比较多,国外称为online and batch learning.离线就是对应batch learning.这两种方式各有优点,在线学习比较快,但是有比较高的残差https://blog.csdn.net/a493823882/article/details/83240496
4.大模型是什么意思大模型的应用嘲有哪些→MAIGOO知识大模型通常具有更多的参数和更复杂的结构,这使得大模型在实时性要求较低的场景下具有优势,例如离线批处理、离线训练、离线预测等。小模型通常具有较少的参数和简单的结构,这使得小模型在实时性要求较高的场景下具有优势。 复杂程度: 大模型通常具有更复杂的结构和更多的参数,这使得大模型能够处理更复杂的数据模式和关https://www.maigoo.com/goomai/315161.html
5.相比于离线训练,在线训练的好处有什么?问答离线训练毕竟使用的是 T-1 或者 T-2 的数据去做的,没有对线上实时产生的行为数据进行利用,对于数据的时效性利用相对较差。 比如说,有这样的一个场景,今天我的整个平台只对 14 岁以下的少女做某个运营活动,而平台上充斥了大量的年龄段的客户,整个平台的交互行为都变了,这个时候你的模型还是 T-1 去做的,将https://developer.aliyun.com/ask/446535
6.亭台楼阁范文10篇(全文)1. 鉴赏是什么意思? 提示:评品欣赏 2. 我们来评品欣赏一下本文的美主要体现在哪些方面? (讨论) 提示:归纳鉴赏散文的方法 通常可以从两个大的方面来评价欣赏一篇散文: 1) 语言, 作者的遣词造句是否具有美感, 这叫言内之美, 本文的语言之美体现在修辞美、诗意美、联想美等方面; https://www.99xueshu.com/w/ikeybm7iw2tp.html
7.淘宝推荐嘲的利器:融合复杂目标且支持实时调控的重排模型一个重排模型在线上能为一个权重生成好的序列,一定是因为它在离线训练的时候就已经见过这套权重或者相似的权重了。所以在离线训练的时候,对于每一个 training 的 sample 或者每一个 training 的 batch,都是采样一个 w 做训练的,因为不知道线上真实会遇到什么样的 w,进行采样。https://www.51cto.com/article/773581.html
8.GitHubShaoQiBNU/Google论文对比了上述所有结构的MTL在腾讯视频VCR和VTR两个任务上相对单任务模型的离线训练结果: 可以看到,几乎所有的网络结构都是在一个任务上表现优于单任务模型,而在另一个任务上表现差于单任务模型。尽管MMoE有了一定的改进,在VTR上取得了不错的收益,但在VCR上的收益接近于0。 https://github.com/ShaoQiBNU/Google_MTL
9.推荐模型离线评测效果好,线上效果却不佳的原因推荐系统里非常常见,并且往往非常的隐蔽的一种数据分布不一致的情况被称之为冰山效应,也就是说离线训练用的是有偏的冰山上的数据,而在线上预估的时候,需要预测的是整个冰山的数据,包括大量冰面以下的数据!我们看下面这张图。左边是我们的Baseline,绿色的表示正样本,红色表示负样本,灰色部分表示线上由于推荐系统的“https://www.jianshu.com/p/34489b31c783
10.系统回顾深度强化学习预训练,在线离线等研究这一篇就够了为了追求更少监督的大规模预训练,无监督 RL 领域发展迅速,它允许智能体在没有奖励信号的情况下从与环境的互动中学习。此外,离线强化学习 (offline RL) 发展迅猛,又促使研究人员进一步考虑如何利用无标签和次优的离线数据进行预训练。最后,基于多任务和多模态数据的离线训练方法进一步为通用的预训练范式铺平了道路。https://m.thepaper.cn/newsDetail_forward_20718623
11.如何在本地(离线)使用PrivateGPT训练自定义AI聊天机器人2. PrivateGPT可以离线使用,无需连接任何在线服务器,也无需从OpenAI或Pinecone添加任何API密钥。为了便于使用,它在你的电脑上本地运行一个LLM模型。因此,你必须在你的电脑上下载一个与GPT4All-J兼容的LLM模型。我在下面添加了详细的步骤供你参考。 设置环境来训练一个私人的AI聊天机器人 https://www.wbolt.com/how-train-ai-chatbot-using-privategpt-offline.html
12.chapter111.md·StarTogether/mlopsbook用户T-1 时刻发生的行为(播放某首歌、观看某个主播、打赏/付费),需要在T时刻实时反馈到训练数据中,提供模型学习 下图2-4一个比较常见的特征实时化的实现框架图,主要包括日志系统、离线画像、实时画像,通过 storm、flink、kafka 完成实时数据的处理和传输, 并存储在 hbase 和 redis 中,最后落盘到 hdfs 中。实时https://api.gitee.com/StarTogether/mlops-book/blob/master/chapter-11-1.md
13.蚂蚁金服核心技术:百亿特征实时推荐算法揭秘备注:弹性特征带来一个显著的优势:只要用足够强的L1稀疏性约束,在单机上就能调试任意大规模的特征训练,带来很多方便。我们的hashmap实现是KV化的,key是特征,value是vector的首地址。 离线训练优化 经过这样的改造后,在离线批量学习上,带来了以下变化: 在线训练优化 https://maimai.cn/article/detail?fid=1010621115&efid=mIQCHnkj0zjxlpygUmo5mg
14.基于多时间尺度多智能体深度强化学习无功电压控制方法与流程8.(2)将有载调压分接头(oltc)、电容器组(cb)和储能(es)均定义为智能体,在第一时间尺度阶段,搭建环境和智能体交互的马尔科夫决策过程的交互训练环境;在该过程的交互训练中,输入光伏、风机和负荷的预测数据,采用ddqn算法(double q network)进行离线训练无功优化离散动作策略;训练完毕,得到智能体oltc、cb和es的调https://www.xjishu.com/zhuanli/60/202110597000.html
15.曾真论大模型预训练数据的信息披露另一方面,数据缺乏时效性。模型通常是离线完成预训练后加载到系统中,在与用户交互时通常也不像搜索引擎那样联网寻找答案,因而信息的时效性欠缺;有的系统搭载了检索增强模块,允许模型访问特定的在线知识数据库,但当模型从多个来源聚合信息,结果可能还是从不同文档截取出部分合成一个仍有错误的回答。https://www.jfdaily.com/sgh/detail?id=1258325