赞
踩
上一篇 关于spark 和ray整合的文章在这:
祝威廉:Spark整合Ray思路漫谈zhuanlan.zhihu.com另外还讲了讲Spark 和Ray 的对比:
祝威廉:从MR到Spark再到Ray,谈分布式编程的发展zhuanlan.zhihu.com现在我们来思考一个比较好的部署模式,架构图大概类似这样:
首先,大家可以理解为k8s已经解决一切了,我们spark,ray都跑在K8s上。但是,如果我们希望一个spark 是实例多进程跑的时候,我们并不希望是像传统的那种方式,所有的节点都跑在K8s上,而是将executor部分放到yarn cluster. 在我们的架构里,spark driver 是一个应用,我们可以启动多个pod从而获得多个spark driver实例,对外提供负载均衡,roll upgrade/restart 等功能。也就是k8s应该是面向应用的。但是复杂的计算,我们依然希望留给Yarn,尤其是还涉及到数据本地性,然计算和存储放到一起(yarn和HDFS通常是在一起的),避免k8s和HDFS有大量数据交换。
因为Yarn对Java/Scala友好,但是对Python并不友好,尤其是在yarn里涉及到Python环境问题会非常难搞(主要是Yarn对docker的支持还是不够优秀,对GPU支持也不好),而机器学习其实一定重度依赖Python以及非常复杂的本地库以及Python环境,并且对资源调度也有比较高的依赖,因为算法是很消耗机器资源的,必须也有资源池,所以我们希望机器学习部分能跑在K8s里。但是我们希望整个数据处理和训练过程是一体的,算法的同学应该无法感知到k8s/yarn的区别。为了达到这个目标,用户依然使用pyspark来完成计算,然后在pyspark里使用ray的API做模型训练和预测,数据处理部分自动在yarn中完成,而模型训练部分则自动被分发到k8s中完成。并且因为ray自身的优势,算法可以很好的控制自己需要的资源,比如这次训练需要多少GPU/CPU/内存,支持所有的算法库,在做到对算法最少干扰的情况下,然算法的同学们有最好的资源调度可以用。
下面展示一段MLSQL代码片段展示如何利用上面的架构:
-- python 训练模型的代码
下面是PySpark的示例代码:
from
这是一个标准的Python程序,只是使用了pyspark/ray的API,我们就完成了上面所有的工作,同时训练两个模型,并且数据处理的工作在spark中,模型训练的在ray中。
完美结合!最重要的是解决了资源管理的问题!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。