作者:Yan Liu
审阅:Zhankun Tang,WangDa Tan
Hadoop Submarine这个项目是很少被人知道的,因为想去了解他的这个群体本身就非常的小。但是它其实在尝试解决一个很关键的问题,就是如何更高效的让分布式的DL负载跑在不同的资源框架下。
如果你是一个Data Scientist,你可能不会关注这个话题,因为你不关心怎么去把你写的东西扔到一个更大的资源池里去运行,你更擅长的是读或者写论文,建模型以及评价结果。试验在哪里跑,怎么跑,如何对外提供服务等等这种事你也期望有更专业的人帮你解决。更不用说暂停分布式的训练过程,修正一些超参数,存储每个Epoch结果等等这些问题。
如果你是DevOps,你可能不知道Deep Learning的框架,甚至连Deep Learning和Machine Learning 有啥区别都不知道。
这就产生了一个问题,Data Scientist在小环境做了一些实验,会需要借助Devops把它搞到大平台上去,而Devops Team可能根本就不知道你写的这个东西怎么跑在大平台上。如果是Spark ML/DL,这个情况会好很多,因为至少双方都有清楚的认识。但是如果是TF, Pytorch这些呢?我知道你想说TF 有 Distributed Mode,但是你可能也只是听说,至少大头在TFUG活动的时候几乎很少听到有Data Scientist去讨论用哪种Distributed Mode,当然可能有些人说Distribueted Mode不就是参数服务器嘛?大兄弟,PS是2012年的事了,世界早就变了。
猜猜上面哪个是Mirrored Strategy?
这就意味着,即便Data Scientist捣鼓出来的一些东西,需要Performance Boost的时候,Devops人员是大概率搞不定的。
Data Scientist,同样也大概率搞不定,比如扔到Yarn上或K8S这种大资源池去跑,她可能会问你Yarn是什么,有几层,能吃么之类的。
可能有同学会问,等一下,你提到了Yarn,我实在没看出来Deep Learning和Hadoop 有啥关系,你搞这个是不是为了蹭热点刷下存在感?
其实,Deep Learning和Hadoop这二者的关系非常的大!
01 | Deep Learning 与 Hadoop Eco System 的关系 |
---|
在云上的业务,一般海量数据都是放在S3上的,不过GCS, OSS和Azure可能会不同意。
在云下的业务,一般海量数据都是放在HDFS上的,这个应该没有人不同意。
同时,在Data Engineering这个层面,也是Hadoop类Workload 莫属,这正如TFX 对接了 Apache Beam 进而在调用Spark/Flink一样,为TF做前期的数据清洗加工等等。
这时,你才发现你真的需要一个能上通TF或者其他DL框架, 下通K8S或者Yarn的人和技术来帮你把这种看似两个世界的东西连在一起。解决这个问题的办法也不是没有,一种是你可以找到懂Devops的Data Scientist,或者Devops懂Data Science,比如参考数据库有DBA团队,数据科学可以有DSA团队。
这种人存在么?存在的,但是那种人比较贵。
那技术呢?存在的,就是比较贵的那种人写的。
大头贵么?土狗来着,所以只配写朋友圈吹水
02 | DL/ML框架的复杂性和多样性 |
---|
深度学习的框架不止Tensorflow, 还有很多其他的框架。但是火热程度来说,Tensorflow无疑是当下最火的。不过最近也有个现象,有很多学校更倾向Pytorch,也因此这些学校毕业出来的学生基本都是Pytorch流派的。不同的流派自然还有个鄙视链的存在,不过这个是题外话了。
为数众多的DL框架大部分或多或少带了分布式执行的方案,但是毕竟是DL项目,重点不在多租户,跨平台等等这些技术点上,也因此在异构任务,异构调度和资源共享等方面都做得不够好。这就是Submarine项目的意义。
03 | Apache Submarine |
---|
为了使分布式深度学习/机器学习应用程序易于启动,管理和监控,Hadoop社区发起了Submarine项目以及其他改进,设计之初是为了对这类任务提供一流的GPU支持,Docker容器支持,容器DNS支持,调度优化等等功能。随着诉求的变化和越来越多的人的加入,现在Submarine从Workbench,Core Engine Support和Scheduler都在逐步的完善之中。进而形成一个成体系的独立项目。
(点击查看大图)
Submarine的Workbench层提供了对外的一个统一界面,DS可以通过它来开发Notebook,提交和管理任务,创建模型和访问数据等等。
Submarine的Service层提供了对各种开发环境的支持,以及一些可选的嵌入式的SDK开发包,以及向用户提供了提交及管理Yarn 或K8S平台应用的支持,使得这些业务系统可以在这两种环境中运行。
通过这样的一个形态,Submarine最终形成了一个统一的,泛用性的数据科学开发平台,以期望能够降低数据科学的整体开发周期和成本。
04 | 结束语 |
---|
社区也有很多类似的衔接框架或者产品来优化这个方面,例如大的产品有Anaconda等,K8S生态的Kubeflow, Horovod和 Hadoop生态的TensorflowOnYarn, TonY ( TensorflowOnYarn 和 TonY 是两个不同的项目),TensorflowOnSpark,SparkDL 等等,各自的实现有极大的区别。可以看到的是,把DL负载尽可能简单的放在Yarn/K8S上去运行确实是一个需要解决的问题,但是具体的方向每一个技术都有自己的尝试。Apache Submarine也是这一领域里的一种尝试,让我们一起期待它有一个更好的未来。
当前 Submarine 项目地址:
https://hadoop.apache.org/submarine/
社区正在Spinoff 这个项目为Apache 顶级项目,网站上线后地址:
https://submarine.apache.org
Github 地址:
https://github.com/apache/hadoop-submarine
Spinoff后的Github地址:
https://github.com/apache/submarine
在此谨代表我个人致谢网易的数据科学团队对Submarine项目做出的重大核心贡献,同时也让我们期待未来会有更多的力量加入这个社区。