彩神APP官网-彩神8APP官方 - 享受高品质生活上彩神APP官网,彩神8APP官方有限公司最具公信力品牌!美女客服每天24小时为广大游戏玩家提供最优质服务,百家乐玩法网站深受广大游戏爱好者点赞。

ElasticDL:蚂蚁金服开源基于TensorFlow的弹性分布式深度学习系统

  • 时间:
  • 浏览:0

9 月 11 日,蚂蚁金服在2019谷歌开发者大会上海站上开源了 ElasticDL 项目,这是业界首个基于 TensorFlow 实现弹性高度学习的开源系统。

开源地址为:elasticdl.org

开源中国采访了ElasticDL项目负责人王益,对该高度学习系统的技术细节进行了全面介绍。

一、基于 TensorFlow 2.0 和 Kubernetes 实现弹性高度学习

这名基于 Eager Execution 模式的开源项目名为“ElasticDL”,它是从前 Kubernetes 原生高度学习框架,根据介绍,ElasticDL 主要有四大特点:

l 容错性

l 弹性调度

l 易用性

l 高效

其中又以容错与弹性调度底部形态最具特色。

ElasticDL 实现了容错和弹性调度的分布式高度学习,可不让还还可以极大提升集群的总体利用率,一起去显著减少用户提交作业刚刚等待英文作业启动的时间(pending time)。

王益介绍:“ElasticDL 是当当.我 儿知道的第从前基于 TensorFlow 实现弹性高度学习的开源系统。具体地说,ElasticDL 是基于 TensorFlow 2.0 和 Kubernetes 实现弹性高度学习的。”

(一)集群效用从 1/N 到 N/N

在高度学习技术研发的早期,公用从前计算集群的人相对少, 计算作业之间的协调可不让还还可以通过口头交流实现。开发者更关心缩短运行时间,如果 多不要 不要 不要 我从作业启动到现在开始的这段时间。高性能计算技术(HPC)是出理 这名问题图片的有效途径,比如 NVIDIA 的 cuBLAS 和 cuDNN 优化高性能数学计算、NCCL 优化 GPU 之间的通信速率。

随着高度学习技术的大规模应用,在这名工程师和研究员公用从前集群的情況下,通过商量来协调调度显然不可行,于是当当.我 儿现在开始使用集群管理系统调度分布式作业。

Kubernetes 近年来不可能 逐渐成为集群管理的重要工具,目前不可能 在各大公有云中广泛采用。如果,让 TensorFlow 能更好地运行在 Kubernetes 集群上,一起去提升利用集群进行高度学习的速率和资源利用率(效用),显得非常具有实际意义。

关于提升集群资源利用率,王益举了从前比较极端的例子:假设从前集群有 N 个 GPU,而从前任务只使用其中从前,现在有从前任务占用了从前 GPU。当什么什么都这麼弹性调度机制时,从需用求所有 N 个 GPU 的任务需用等待英文前从前任务现在开始不还还可以现在开始,这名等待英文时间不可能 高达数天甚至数周,等待英文英文期间,集群的效用是 1/N;而拥有弹性调度能力刚刚,新的任务可不让还还可以在 N-1 个 GPU 上立即运行,如果 Kubernetes 可不让还还可以在第从前任务完成后将占用的 GPU 赋予这名任务,这名情況下,集群整体效用是 100%。

ElasticDL 在容错与弹性调度上一定会不错的表现,它的现实意义便是高效出理 集群效用问题图片。

(二)ElasticDL 如何实现?

前边讲到集群资源利用率提高的前提其实不要 不要 不要 不要 我 ElasticDL 的“弹性调度”底部形态带来的,而弹性调度依赖于容错能力。

容错是指作业不受其中进程数量变化的影响,在弹性调度过程中,作业里的进程数量会随集群 workload 情況相应增减,不要 不要 不要 不要 作业需用是容错的,不还还可以配合调度系统,实现弹性调度。

在这名过程中,容错通常由分布式框架实现,比如 Spark 和 ElasticDL 都可不让还还可以做到当有进程挂掉,不可能 新的进程加入时,作业不让暂停不可能 重启,不要 不要 不要 不要 我平滑地继续。而弹性调度是由分布式框架和分布式操作系统(集群管理系统)一起去实现的。比如,当有进程挂掉的刚刚,分布式框架应该通知集群管理系统新启进程来补位 —— 至于集群管理系统可不让还还可以启动起来,取决于用户剩余 quota 和集群的忙碌情況。

1. 基于 Kubernetes-native

通常使用 Keras 的 model-fit API 和 Estimator,开发者只需用调用 API 即可进行分布式训练或预测,然而 ElasticDL 不依赖于 TensorFlow runtime 实现分布式计算,它的实现在 runtime 之外。

ElasticDL 通过 Kubernetes-native 机制来完成分布式计算,而这也为其带来了容错性与弹性调度的能力。

所谓 Kubernetes-native 指的是从前进程调用 Kubernetes API 来起止进程,它与 Google MapReduce 的机制这名于。MapReduce 是从前 Borg-native 的分布式计算框架,用户通过运行从前 Borg 客户端程度启动从前 MapReduce 作业;Borg 客户端调用 Borg API 提交作业,如果启动从前 master 进程;这名 master 调用 Borg API 启动其它 workers 进程。

在 ElasticDL 中,用户调用 ElasticDL 的命令行客户端进程启动作业;这名客户端进程调用 Kubernetes API 启动 master 进程,master 进程继续调用 Kubernetes API 启动其它进程。

“ElasticDL 的整个容错和弹性调度机制都依赖于 Kubernetes-native 架构”,王益介绍:“不可能 worker 挂了,按照分布式高度学习训练算法的数学底部形态,可不让还还可以不让出理 , 即可确保训练过程继续。不可能 从前 parameter server 进程挂了,master 会选着 从前 worker 进程,让它转换角色替补上挂掉的 parameter server 进程。”

在这某种情況下,master 一定会调用 Kubernetes API,请它再启动从前额外的 worker 进程。不可能 启动成功,master 会带其加入到与其它进程的合作协议协议中。master 进程的情況(主不要 不要 不要 不要 我从前 task queues:todo、doing 与 done)可不让还还可以保留在 Kubernetes 集群的 etcd 存储系统中。

“从前,万一 master 挂了,重启的 master 进程可不让还还可以从 etcd 继承前世的情況。任何进程挂了,master 一定会请 Kubernetes 去启动从前新的进程代替挂掉的进程。而 Kubernetes 是是是否是是能完成使命取决于用户剩余 quota 和集群剩余资源情況。”

2. 基于 TensorFlow 2.0 Eager Execution

为有哪些 ElasticDL 又基于 TensorFlow 2.0 呢?王益介绍,这是不可能 TensorFlow 2.0 带来了 Eager Execution 底部形态,正是针对这名底部形态的尝试,让开发团队实现了 Kubernetes-native 的调度最好的土办法,从而让 ElasticDL 支持容错和弹性调度。

分布式学习需用了解每个进程根据局部训练数据计算得到的 gradients,不还还可以汇总有有哪些 gradients 来更新模型。

TensorFlow 1.x 的执行最好的土办法被称为 Graph Mode —— 高度学习计算步骤被表示成从前 graph 数据底部形态,TensorFlow runtime 会解释执行这名 graph。其中,gradients 的计算过程是 graph 的一累积,不要 不要 不要 不要 为了得到 gradients,分布式高度学习系统需用 hack 进入 graph 的执行过程“偷取”gradients。

这名做法需用用户写进程的刚刚写这名帮助“偷取”的代码,增加了进程的多样化度,也增加了对编程者的要求。

TensorFlow 2.0 提供的 Eager Execution Mode 中,通过从前叫 tape 的数据底部形态,它可不让还还可以把获取 gradients 的能力以 API 的最好的土办法暴露给开发者,ElasticDL 正是以从前的最好的土办法将其实现。

通过这名对比,其实也反映了业界基于 TensroFlow 进行分布式高度学习的不同设计思路。王益介绍,当前基于 TensorFlow 的分布式训练系统大致可不让还还可以分为四类:

其中需用修改 TensorFlow runtime 的工作主要由 Google TensorFlow 团队完成。不可能 TensorFlow runtime 是用 C++ 写的,把网络通信和同步功能实现在这名层次里,运行速率很高。如果,理论上 C++ 代码可不让还还可以通过感知 TCP/IP 链接是是是否是是中断,来判断进程是是是否是是挂掉,从而实现容错。

“如果 TensorFlow runtime 应该是平台无关的,不要 不要 不要 不要 不应该涵盖访问特定集群管理系统,请它重启挂掉的进程的代码,不要 不要 不要 不要 不易实现弹性调度”,王益指出了二者的区别:“与之相对应的,通过调用 TensorFlow API 实现分布式计算的思路,通信性能往往受到 Python 语言性能以及必须在 runtime 外部实现‘微操作’的限制。但它的好处是可不让还还可以自由调用集群管理系统 API 来管理进程。”

很明显,ElasticDL 通过 TensorFlow 2.0 带来的新底部形态实现了 TensorFlow runtime 外直接调用集群管理 API 而完成了弹性调度。

二、ElasticDL 替代 Kubeflow 的使用

Kubernetes 从前是从前用来管理无情況应用的容器平台,如果当前不要 公司用它来运行各种各样的工作负载,很重是使用它来运行机器学习相关任务。

Kubeflow 基于 Kubernetes,它把模型训练、超参数训练与模型部署等机器学习任务类型进行组合并以容器化的最好的土办法部署,提供了整个机器学习流程各个系统的高可用与便捷性,使用 Kubeflow 就可不让还还可以进行各种各样的机器学习任务。

目前 Kubeflow 是在 Kubernetes 上启动分布式 TenosrFlow 作业的主流操作,这不可能 也是开发者更为熟悉的模式。

“具体来讲,Kubeflow 会询问 Kubernetes 计划分配哪几台机器来运行从前分布式作业中的各个进程,如果告知每个进程所有其它进程的 IP 地址和 port,从而保证从前作业里各个进程之间互相知道对方。”

为有哪些需用让所有进程互相知道对方呢?这是 TensorFlow ps-based distribution 最好的土办法要求的。(如果 多不要 不要 不要 我前边提到的对比基于 TensorFlow 的分布式训练系统表格中左上角的类型)

王益解释:“TenosrFlow 1.x 原生的分布式训练功能让从前作业中所有进程都执行 TensorFlow 1.x runtime 进程。有有哪些进程互相通信,互相协调成为从前‘分布式 runtime’来解释执行表示高度学习计算过程的 graph。在现在开始分布式训练之初,graph 被 TensorFlow runtime 拆解成若干子 graph;每个进程负责执行从前子 graph —— 任何从前进程失败 (不可能 是被更高优先级作业抢占),则整个大 graph 的执行就失败了。不要 不要 不要 不要 TensorFlow 原生的分布式训练能力一定会容错的(fault-tolerant)。”

不过,TensorFlow Python API 提供了 checkpoint 的能力:不可能 从前作业失败了,可不让还还可以重启作业,从最近的 checkpoint 现在开始继续执行。不要 不要 不要 不要 它可不让还还可以从错误中恢复(fault-recoverable)。

Kubeflow 可不让还还可以在 Kubernetes 上发挥 TensorFlow 原生的分布式计算能力,如果不可能 后者并必须容错,不要 不要 不要 不要 Kubeflow 并必须无中生有。必须容错,也由于必须弹性调度,而这正是 ElasticDL 的特长。

三、与 SQLFlow 联动

前边介绍了 ElasticDL 的实现机制与现实意义,总结起来主不要 不要 不要 不要 我不可能 ElasticDL 通过 TensorFlow 2.0 提供的新底部形态 Eager Execution 实现了 TensroFlow runtime 外直接调用集群管理 API,从而实现了 Kubernetes-native 机制来完成分布式计算,继而实现容错与弹性调度,最终达到极大提升集群总体利用率的目标。

除此之外,ElasticDL 还有从前重要的底部形态——易用性。ElasticDL 的易用性与从前工具密不可分。

几块月前,蚂蚁金服开源了从前机器学习工具 SQLFlow,这名工具旨在让开发者调用 AI 像写 SQL 一样简单。据介绍,SQLFlow 不让还还可以抽象出端到端从数据到模型的研发过程,配合底层的引擎及自动优化,具备基础 SQL 知识的开发者即可完成大累积机器学习模型训练及预测任务。

通过与 SQLFlow 联动,开发者可不让还还可以用扩展后的 SQL 语法,非常精炼地描述整个数据流和 AI 流程。SQLFlow 把从前 SQL 进程翻译成从前实现整个 end-to-end machine learning 的进程,这名进程可不让还还可以调用 xgboost、PyTorch,不可能 ElasticDL、TensorFlow 实现训练任务。

王益举例,在有 SQLFlow 刚刚,不可能 要为从前电子商务网站构造从前推荐系统,需用开发日志派发、在线数据清洗、底部形态工程、模型训练、验证与预测等模块,每个模块不可能 需用投入从前团队数周甚至数月的时间。

而 SQLFlow 再次出现刚刚,这名流程可不让还还可以用 SQL 语言描述成从前很简短的进程,SQLFlow 可不让还还可以把它翻译成上述数据和 AI 流。

不可能 SQL 是某种只描述意图,不描述过程的语言,不要 不要 不要 不要 SQL 进程通常都很简短。如果不要 不要 不要 不要 我可能 这名由于,SQL 进程里涵盖的信息量有限。比如,用户不让通过 SQL 指定分布式调度和训练算法。“有有哪些累积需用 ElasticDL 根据模型特点自主决定”,王益补充:“这也是为有哪些说 ElasticDL 也可不让还还可以反过来为 SQLFlow 提供易用性。”

四、ElasticDL 开源的下一步计划

关于开源后接下来的发展,王益表示,ElasticDL 项目目前趋于稳定早期探索阶段,API 还在演化过程中。“此次开源的版本,尚不包括自动选着 分布策略和算法的代码,相比在 TensorFlow runtime 中实现分布式计算,基于 TensorFlow 2.0 Eager Mode 的 Python API 实现的分布式训练性能差距还很大”,他介绍:“ElasticDL 团队在和 Google Brain 团队合作协议协议,开发上述 asynchronous SGD + delayed model update 能力、以及 Kubernetes-native AllReduce,希望在下从前版本中可不让还还可以提供给当当.我 儿使用。”

如果王益又具体介绍,上述某种分布式训练策略,某种会用于模型涵盖较大的参数的情況,比如分布式 embedding table,另某种用于模型参数较小的情況。而这也是 ElasticDL 自动决断分布式训练算法的从前例子。

个人面,在 SQLFlow 中,不可能 要让用户能提供尽量少的参数,AI 引擎还需用更加智能,提供包括 AutoML 等功能。

王益感叹:“ElasticDL 项目任重道远。”

五、受访嘉宾

王益,目前在蚂蚁金服负责 AI 基础架构工作。他于 1007 年从清华大学计算机系博士毕业,先后在 Google(中国)、腾讯、LinkedIn(美国总部)与百度硅谷研究院工作,期间在硅谷和北京各有一次创业经历。参加工作以来,王益一直专注于 AI 基础架构工作,参与和领导了多个核心 AI 系统的研发。