文|沙剑
蚂蚁团体高级技术专家
专一分布式深度学习畛域
次要负责蚂蚁大规模分布式训练引擎的设计和开发本文 4491 字 浏览 12 分钟
本文整体介绍了 DLRover 的我的项目动机与外围能力,将来咱们会公布一系列文章,来从同步 / 异步弹性训练,优化策略服务,多种集群和训练框架对接,策略定制开发等多个角度来介绍 DLRover 的更多细节,敬请期待。
01
技术背景
2022 年 6 月,蚂蚁团体决定全面引入 ESG 框架,启动并确立了“数字普惠”、“绿色低碳”、“科技翻新”、“凋谢生态”四位一体的可继续倒退策略。针对“绿色低碳”,设立了 4 个子议题,包含绿色经营、科技助力产业碳中和、生态爱护与修复绿色低碳生存。
在此背景下,绿色 AI 也成为蚂蚁 AI Infra 团队的一个重要工作方向。作为绿色 AI 的重要板块,工程提效我的项目致力于打造高性能离在线 AI 工程体系,通过晋升算力效率和资源利用率,最终达到节俭资源升高碳排放的目标。
以后,用户提交分布式训练作业的工具有 Yarn 或者 KubeFlow/Training-Operator。在提交作业时,用户须要在作业中指定作业资源,包含不同角色的节点数量和资源规格(CPU 核数、内存、GPU 等)。
在训练作业提交后,作业可能遇到如下问题:
- 集群资源不足以启动作业的所有节点,作业只能期待。
- 训练作业的节点可能会出错,比方被高优工作抢占、机器故障、IO 故障等,导致作业失败。
呈现这些问题后,用户只能批改作业资源来从新提交作业。
针对这两个问题,蚂蚁团体晚期基于 Kubernetes 开源了 ElasticDL 我的项目来反对 K8s 上 TF 2.x 分布式训练的弹性容错。在我的项目落地过程中咱们又发现了如下问题:
- 用户配置的资源可能过少引起 OOM 和训练性能差。
- 用户为了保障作业成功率和速度,通常会配置超额资源导致利用率低。
- 越来越多的用户应用 PyTorch 或其余 TF 之外的框架来开发和训练模型。
- 越来越多的分布式集群开始反对 AI 作业,比方 Ray、Spark 集群,是否适配任意计算集群?
- 在线学习越来越被宽泛采纳的状况下,如何使用一套零碎同时解决兼容离在线训练?
前两个问题使得集群 CPU 利用率通常只有 20% 高低,同时算法开发人员须要投入很多人工运维老本,为了解决训练端资源提效的需要,反对在不同集群上针对在离线多种训练模式,给不同框架的分布式训练作业主动地寻找最优资源配置。
蚂蚁 AI Infra 团队基于 ElasticDL 弹性容错的思路,降级扩大并开源了 DLRover,其指标在于晋升分布式模型训练的智能性,目前很多公司的训练作业都是跑在混部的集群中,运行环境复杂多变,正如其名,DLRover 作为分布式训练畛域的“路虎”,不论如许起伏的地形,都能够轻松驾驭。
02
整体计划
DLRover 提出了“ML for System”的理念来晋升分布式训练的智能性,那么这样的零碎应该具备哪些能力呢?
咱们认为次要体现在如下几个方面:
- 解耦:不和底层训练框架耦合在一起,只依赖接口形象,遵循依赖倒置准则。(i.e. Elastic Runtime)
- 资源调度:具备上帝视角的资源调度管控能力。和建设在对作业精准画像的决策能力。
- 数据驱动:同时收集把握集群资源数据,也把握训练作业数据。以数据驱动智能。
- 作业交互:以对训练作业以及模型白盒化的了解,动静依据理论状况,对训练作业进行优化调整。超过简单机械的弹性容错!
- 智能:通过对集群以及作业信息的收集,联合算法模型 + 固定策略产出精准的作业优化策略。
咱们心愿设计并实现一个零碎,让用户齐全解脱资源配置的解放,专一于模型训练自身。在没有任何资源配置输出的状况下,DLRover 依然能够为每个训练作业提供最佳资源配置。思考到用户可能会以不同的形式运行他们的训练作业,DLRover 除了面向训练平台进行作业对立治理的 Cluster Mode,也提供 Single-Job Mode 不便独立的算法开发者也能享受到弹性容错等根本个性。
03
零碎架构
DLRover 由四个次要组件组成:ElasticJob、Elastic Trainer、Brain 服务和 Cluster Monitor。
上图显示了 DLRover 如何在 K8s 集群上治理深度学习训练作业。DLRover 以 ElasticJob CRD 的模式将作业提交到集群。收到 CRD 后,ElasticJob Operator 会拉起一个 Master Pod 作为 Elastic Trainer。其从 Brain 服务中获取初始资源打算。Elastic Trainer 用它来创立 Scale CRD,并利用 Scale CRD 告诉 ElasticJob Controller 启动所需的 Pod,每个 Pod 将在其上启动一个 Elastic Agent。
在训练过程中,Elastic Trainer 的 Training Master 将数据分片分发给 Worker。同时,Cluster Monitor 监控每个作业的运行状态(i.e. 每个节点的 Workload)和集群状态(i.e. 资源水位)。这些数据将定期报告给 Brain,Brain 将数据长久化到数据库中。
而后 DLRover Brain 依据作业的运行状态,抉择适合的算法生成新的资源打算,并告诉 Elastic Trainer 开始资源调整。
总的来讲,DLRover 能够帮忙分布式训练作业自动化运行在集群中,能够看作分布式作业的主动驾驶,模型开发者只须要关注模型的算法设计,DLRover 目前开源版则能够为用户提供如下能力:
- 主动资源推导:帮忙用户主动初始化训练资源,晋升资源利用率与作业稳定性。
- 动静训练数据分片:针对不同 Worker 性能不通造成的木桶效应,依据理论生产速度调配训练数据,可配合 Failover 记录生产位点,数据不失落。
- 单点容错:提供单点容错的能力,不须要残缺重启作业。
- 资源弹性:反对运行时 Pod 级和 CPU/Memory 级的资源弹性扩缩容,动静全局优化决策。
04
DLRover 能带来什么
1. 作业零资源参数配置
用户提交分布式作业时无需提供任何资源信息,DLRover 会主动对作业进行画像,推导出最优的资源配置,同时运行时能够依据理论状况(集群资源、样本流量、以后利用率、…)主动对资源进行调整。上面展现了两种提交脚本的配置比照:
2. 单点容错晋升作业稳定性与复原效率
DLRover 反对单点复原 Parameter Server 和 Worker 角色的失败退出而不须要整体作业重启,对于非用户代码和数据类型的谬误能够实现用户无感的重启。例如集群中,很常见的一类谬误是因为用户配置了有余的内存,导致训练 OOM。在 DLRover 的帮忙下,咱们能够主动拉起一个优化配置的节点来复原失败的 Node。在实在环境下,DLRover 治理的训练作业,相比基线的 Kubeflow TF-Operator 作业,训练成功率从 84% 晋升到了 95% 以上。
3. 主动扩缩容晋升作业训练性能
DLRover 针对 Parameter Server 和 Worker 级别都反对在训练运行时进行主动的调节训练资源以晋升训练性能。通过监控作业节点的 Workload,DLRover 能够剖析资源配置的瓶颈。常见的资源瓶颈有:节点抢占、Workload 不均衡、CPU 有余导致算力低下、节点数目有余。DLRover 能够通过动静的资源热更新来继续优化训练性能。
4. 主动扩缩容晋升作业资源利用率
通常不同的模型训练作业,须要不同的资源配置。然而用户偏向于超额配置作业的资源以保障作业的成功率。这通常会导致大量的资源节约。DLRover 的主动扩缩容能力,能够主动依据作业的实在需要配置资源,以起码的资源达到最优的训练性能,从而缩小资源节约。下图显示了主动资源比照手动资源的资源利用率曲线比照:
5. 动态数据散发解决慢节点问题
混部集群存在资源超卖和抢占的状况,局部节点生产数据慢,快节点须要期待慢节点,升高训练速度。DLRover 能够通过数据动静分发给慢节点少散发一些数据,缩小期待。此外 DLRover 应该保障训练任务尽可能依照用户配置参数生产数据,防止反复生产 / 失落数据,这会给训练带来不确定性,影响模型性能。
当扩容或者缩容时,须要有个全局协调者晓得记录节点以后生产数据详情。当节点失败重启后,全局协调者须要晓得节点曾经生产和尚未生产的数据。如果这些逻辑让训练节点来做,训练节点和训练节点之间须要交互,减少训练节点逻辑的复杂性。DLRover Master 充当了这个全局协调者的角色。
总而言之,在咱们看来,通过动态数据能够简化训练节点逻辑的复杂性,训练节点只管从 DLRover Master 获取 Shard,而后读取数据,不须要解决其余的逻辑。
6. 对立离线与在线学习范式
上述动态数据分片个性,实际上帮忙咱们将 Data Source 和训练作业进行理解耦,在此基础上 DLRover 能够同时反对离线训练,也能够反对生产实时样本流的在线学习作业。(能够通过 Dlrover.trainer 间接对接样本流,也能够作为流计算引擎的训练 Sink 节点)
在蚂蚁的实际中,DLRover 能够作为一个现实的组件,来帮忙咱们构建出一个端到端的在线学习零碎。DLRover 能够提供数据源生产位点记录与复原,在线学习短跑作业稳定性与性能保障,资源利用率保障等一系列理论问题。咱们的开源仓库中也提供了简略的范例,后续咱们也会凋谢更多周边组件。
7. 反对异步和同步训练模式
训练集群中每天都运行着不同业务域性质各异的训练作业:举荐零碎的大规模稠密模型通常运行在 PS/Worker 架构的训练模式下进行异步参数更新,资源也多以 CPU 计算为主。CV/NLP 畛域的浓密模型则多以数据并行的形式在 GPU 服务器上进行同步训练,这时只有 Worker 一种角色。
DLRover 在设计上,能够同时反对同步和异步更新模式,做到针对各种训练范式的对立。
8. 同训 DL 练框架解耦
DLRover 反对用户应用任何本人的训练框架,底层训练代码通过提供约定的 API 接口以实现主动弹性扩缩等须要同底层分布式代码深度交互。集群中部署实现后,终端算法同学根本能够无感接入。
05
总结 & 将来打算
DLRover 目前曾经在蚂蚁大规模落地,集群资源利用率绝对于基线稳固取得了 15% 以上的晋升。同时也无效解决了因为资源配置不合理造成的训练吞吐不迭预期的问题。咱们心愿通过 DLRover 的开源能够帮忙更多同行一起推广低碳、绿色、AI 的理念。同时也切实升高模型开发中的运维老本,开释更多的生产力去解决业务的问题。
以后 DLRover 的调优算法,以及资源,作业画像策略次要针对蚂蚁外部技术栈优化。思考到不同机构理论技术栈的多样性,在设计上,DLRover 在 API 层做了对立接口形象,具体调优算法与作业画像策略则可灵便自定义。咱们欢送不同机构的开发者也能依据本身特点,同咱们一起共建 DLRover 我的项目,将其发展壮大。
理解更多 …
DLRover Star 一下✨:
https://github.com/intelligent-machine-learning
本周举荐浏览
Go 原生插件应用问题全解析
MOSN 构建 Subset 优化思路分享
MOSN 文档使用指南
MOSN 1.0 公布,开启新架构演进