蚂蚁开源大模型容错框架DLRover介绍

1.分布式训练基础

https://blog.csdn.net/qq_45808700/article/details/139357814

2.ElasticDL

参考:
ElasticDL 分析
案例分享 | ElasticDL:同时提升集群利用率和研发效率的分布式深度学习框架

2.1 ElasticDL介绍

ElasticDL基于 TensorFlow 2.0 和 Kubernetes 的弹性分布式深度学习框架。不同于 Kubeflow/TF-operator 给每个集群部署一个 Kubernetes Operator 的方式, ElasticDL 为每个作业引入一个 master 进程。通过调用 Kubernetes API,master 进程了解集群情况;同时,作为作业的一部分,master 还了解深度学习作业的特点 —— 包括利用 Python inspection 机制了解上述各个函数的特点,其中调用的 API 函数等。

2.2系统架构

ElasticDL 的 master 会根据数据索引将数据分片,为每个数据分片创建一个 task。然后 master 会调用 Kubernetes API 启动多个 worker 进程。每个 worker 启动后,会向 master 请求 task。worker 收到来自 master 分发的 task 后,会读取 task 对应的数据分片来前向计算和梯度计算。
同时,master 会通过 Kubernetes API 监听集群中每个 worker 的状态。当有 worker 被高优先级作业抢占后,master 会回收该 worker 的未完成 task,然后重新分发给其他的 worker。同时 master 会尝试通过 Kubernetes API重新拉起被抢占的 worker。等到资源充足时,worker 进程会被重新启动,并加入训练作业。
在这里插入图片描述
ElasticDL需要用户填写 forward、loss、optimizer、feed 函数。

2.3弹性训练过程

训练作业运行过程中,进程数量的变化不影响作业进行。具体的说,如果一个或者几个进程被高优先级的作业抢占,剩下的进程不受影响地继续进行。如果将来资源丰沛了,系统可以加几个进程,此时作业仍然不受影响地继续运行。

  1. master节点基于索引动态数据划分,并根据 Kubernetes API 监听worker状态实时回收与分发数据,使数据数=workers运行任务数
  2. 每当一个 worker 启动起来了,master 会收到 Kubernetes 发来的通知;master 在一个 etcd 数据结构里记录“活着”的 workers。
  3. 如果一个 worker 失败了(比如被更高优先级作业抢占了),则 master 的 gRPC call 会 timeout;此时,master 把对应的 task 从 DOING 队列挪回 TODO 队列了。下一次有 worker 完成 task 时,master 会把这个 task 再发出去。
  4. 当一个 worker 处理完了接收到的 task,它通过 gRPC 返回一个表示成功的标记;master 就把这个 task 从 DOING 队列挪到 DONE 队列了。当所有 task 都从 TODO 挪进了 DONE, 则说明一个 epoch 完成了。
    在这里插入图片描述

3.EasyDL-DLRover

参考:
DLRover:蚂蚁开源大规模智能分布式训练系统
ElasticDL遇到的问题:
DLRover希望设计并实现一个系统,让用户完全摆脱资源配置的束缚,专注于模型训练本身。在没有任何资源配置输入的情况下,DLRover 仍然可以为每个训练作业提供最佳资源配置。

3.1系统架构

在这里插入图片描述

● Brain Service:负责资源自动优化。基于实时采集的训练速度和各个节点负载来自动优化作业的资源配置。
● DLRover Master:负责弹性调度。每个训练作业拥有一个 master 节点,master 节点负责训练速度采集、节点负载收集、训练样本管理和弹性调度。
● Elastic Agent:负责与训练框架协调来支持训练的容错和弹性。每个节点上都有一个 Elastic Agent,Agent 从 master 上获取作业当前运行的节点信息,通知训练框架更新分布式训练状态。Agent 还负责从 master 获取训练样本信息来供训练框架迭代模型,从而使训练样本分片支持 worker 的弹性。

3.2功能

DLRover 在 K8s 上千卡级大模型训练稳定性保障的技术实践

  1. 出现故障后,DLRover 在重启训练前在每个 GPU 上启动子进程来运行一个轻量级的检测任务来检查机器。该检测任务包含一个简单的 GEMM 和 allgather 任务。快速执行节点健康检测,定位故障机并将其隔离,然后重启 Pod 来替换故障节点。
    job master 先将所有节点两两划分为多个 group, group 内的节点上执行 allgather 任务并将运行耗时上报给 job master。 如果有 group 里的有节点执行检测任务失败,则此 group 的节点为潜在故障机,否则为正常机器。 然后开始第二轮测试,master 会将潜在故障节点和正常节点再次两两划分 group。每个 group 的节点继续执行 GEMM 和 allgather。 如果某个节点两轮执行都失败了,则该节点为故障节点,或者两轮执行的耗时都明显长于其他节点,则该节点为慢节点。 比如作业有6个节点,第一轮的划分结果为 [{1,2}, {3,4}, {5,6}], {5, 6} 执行检测任务失败了, 那么节点 5 和 6 就是潜在故障节点。为此第二轮的划分为[{1,2}, {3,5}, {4,6}] 。如果{4,6} 失败了, 说明节点 6 就是故障节点。然后,DLRover 会重新拉起一个 Pod,替换节点6。
    在这里插入图片描述

  2. 健康检测通过后,重启训练子进程来自动恢复模型训练,无需重启作业或者所有Pod。
    在这里插入图片描述

  3. 节点故障导致可用机器少于作业配置,自动缩容来继续训练。集群新增机器后,自动扩容来恢复节点数量。
    在这里插入图片描述

  4. 优化 FSDP 并行训练的模型 save/load,支持根据实际卡数 reshard 模型参数,缩短 checkpoint 保存和加载时间。

4 ATorch

ATorch是基于PyTorch框架的高性能扩展加速库,可配合DLRover项目提供大规模训练稳定性保障方案
参考:ATorch:蚂蚁开源PyTorch分布式训练扩展库

4.1系统架构

● Interface层负责用户使用接口,支持极致精简的one api模式和trainer模式。
● IO和预处理层主要负责存储IO等相关的优化。
● 弹性容错层主要负责稳定性保障,主要配合DLRover使用来实现。
● 核心层是ATorch的主要代码,这里我们定义了优化策略的统一接入和表达,保障开源方法和自研策略统一管理,同时也包含了自动策略最优策略组合的功能。
● 最下层分别是PyTorch社区生态系统和底层的AIDC硬件。

4.2ATorch自动训练优化

在这里插入图片描述

4.3ATorch+DLRover训练稳定性保障

● Pod 容错:对于故障机问题,DLRover 可以在机器失败后重新拉起一个新的 Pod 来替换失败的Pod,并让新启的 Pod 加入 PyTorch 训练。
● 进程容错:对于问题2、3、4,DLRover 和 ATorch 支持重启子进程来快速实现训练恢复。

  • 19
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pistachiout

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值