PaddlePaddle Fluid: Elastic Deep Learning on Kubernetes

原创
2017/12/14 20:06
阅读数 124

近期,源自百度的深度学习框架PaddlePaddle和最著名的容器化应用的调度器Kubernetes两个开源社区在PaddlePaddle 最新版本(开发代号Fluid)中联合发布了“弹性深度学习(EDL)”的功能。

 

Fluid EDL 包含一个 Kubernetes ControllerPaddlePaddleauto-scaler(可以根据集群中的空闲硬件资源改变分布式任务进程的数目)以及一个新的容错计算架构(PaddlePaddle设计文档有其介绍)。


0?wx_fmt=png

长按并识别二维码进入Kubernetes Controller


0?wx_fmt=png

长按并识别二维码进入PaddlePaddle设计文档


工业级深度学习需要极大的计算能力。实验室和企业通常会建立 SLURM,MPI或者SGE管理的 GPU 集群。这些集群如果有足够的资源运行一个任务,那么就会运行这个提交的任务,否则就会让此任务推迟到不确定时间再运行。这样的方式其实有其弱点:比如有99 个空闲节点和一个需要 100 节点才可运行的任务,则这个任务必须等待,并不能使用到这些节点的资源。Fluid和 Kubernetes 一起支持深度学习任务弹性的在资源通常不足的生产环境集群执行,尽可能早地帮助深度学习开发者分析出潜在算法问题。

 

另一个挑战是工业应用场景中倾向于将深度学习任务当成完整的数据工作流中的一环,数据流通常会包含Web 服务器和日志收集。这样的通用计算集群通常需要基于优先级的弹性资源调度。这就让Web在高访问量时增加更多的进程处理 Web 请求,并降低用于深度学习任务使用的资源。Fluid 会与 Kubernetes 的API 进行交互,以理解集群全局状态,并据此调整不同的任务的进程数量。

 

在上述两个场景中,PaddlePaddle任务能够在进程的高峰和低谷仍然保持运行而不中断。我们通过实现新的设计,在前面介绍的PaddlePaddle 的架构上引入master进程。在新的设计中,只要在任务中有三个以上的进程,它就能够继续执行。在极端情况下,所有的进程都被杀死,这个任务仍然能从断点继续执行。

 

我们测试了两个用例:1)只运行 PaddlePaddle 任务的Kubernetes集群;2)运行PaddlePaddle和 Nginx 任务的集群。

 

在第一个测试中,我们在 10 秒时间段内启动 20 个 PaddlePaddle 任务。每个任务有 60 个trainer和 10 个parameter server进程,并且会持续运行数个小时。我们重复试验 20 次:10 次关闭 Fluid EDL ;另外10 次开启 Fluid EDL。图 1 中,实线代表前10 个实验,虚线是后 10 个实验。在图的上部,我们可以看等待任务的数量持续增加。但是在Fluid EDL 开启后,资源会均匀分布到所有的任务上。Fluid EDL 杀死了某些已有的进程以服务新的任务和后来的一些任务。在两个场景中,集群是同等被使用的(参看图的下部分)。

 

第二个测试,每个实验运行 400 个 Nginx pod,这些pod其实比 6 个 PaddlePaddle 任务有更高的优先级。初始时,每个 PaddlePaddle 任务有 15 个 trainer和10个parameter server。我们每隔 90 秒杀死 100 个 Nginx pod直到 100 个剩余,然后每 90 秒再增加 100 个Nginx pod。图 2 上部分展示了这个过程。中间的图反映了 Fluid EDL 在Nginx pod减少时自动启动PaddlePaddle 进程,然后随着Nginx pod增加再杀死 PaddlePaddle 进程。整体来看,集群保持在 90% 的利用率,如图的下部所示。当 Fluid EDL 关闭时,就没有PaddlePaddle 进程自动增加了,而利用率就会随着 Nginx pods 的数量变化而波动。

 

我们将持续推进 FluidEDL,欢迎评论和贡献。访问 PaddlePaddle repo你可以看到设计文档教程实验细节

0?wx_fmt=png

长按并识别二维码进入PaddlePaddle repo


0?wx_fmt=png

长按并识别二维码进入【设计文档】


0?wx_fmt=png

长按并识别二维码进入【教程】


0?wx_fmt=png

长按并识别二维码进入【实验细节】


附文中蓝体字链接:


●  Kubernetes Controller

https://github.com/kubernetes/community/blob/master/contributors/devel/controllers.md

●  PaddlePaddle设计文档

https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/cluster_train/README.md

●  PaddlePaddle repo

https://github.com/PaddlePaddle/cloud

●  设计文档

https://github.com/PaddlePaddle/cloud/blob/develop/doc/autoscale/README.md

●  教程

https://github.com/PaddlePaddle/cloud/blob/develop/doc/autoscale/example/autoscale.md

●  实验细节

https://github.com/PaddlePaddle/cloud/tree/develop/doc/autoscale/experiment

本文分享 CSDN - 飞桨PaddlePaddle。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部