全栈工程师开发手册 (作者:栾鹏) 一站式云原生机器学习平台
ray的基本原理和架构
另一篇文章介绍了ray的基本原理和架构以及单机多进程使用ray的方法。 blog.csdn.net/luanpeng825…
ray 多机分布式
有时候单台机器多进程也无法快速完成代码运行,这个时候就需要多机器实现:
- 1、单机器算力有限,核数不足
- 2、有些运行有机器白名单显示,需要多台机器ip增加并发处理
分布式计算集群
为了方便的实现一个ray多机分布式集群,这里直接使用
github.com/tencentmusi… 开源的云原生一站式机器学习平台。 使用ray这个模板,填上自己的worker数量,初始化脚本和python启动命令
分布式原理和代码
基本原则
driver端就是启动脚本的地方,driver端解析要处理那些任务,并把每个任务发送给headnode,headnode会根据slavenode的运行情况分发这些任务,当当前有空闲slavenode时,driveiu会发起新的任务。
主要变更
原有代码
def fun1(index):
# 这里是耗时的任务
return 'back_data'
def main():
for index in [...]:
fun1(index) # 直接执行任务
if __name__=="__main__":
main()
新代码
import ray,os
@ray.remote
def fun1(index):
# 这里是耗时的任务,大内存可序列化对象提前put,不然需要每次网络传输。
print(index)
# return result
def main():
tasks=[]
for index in [...]:
tasks.append(fun1.remote(index)) # 建立远程函数
# 每操作一定数量就先运行
if len(tasks)>100000:
result = ray.get(tasks)
tasks=[]
result = ray.get(tasks) # 获取任务结果
if __name__=="__main__":
head_service_ip = os.getenv('RAY_HOST','')
if head_service_ip:
# 集群模式
head_host = head_service_ip+".pipeline"+":10001"
ray.util.connect(head_host)
else:
# 本地模式
ray.init()
main()
单机运行使用ray.init()启动会自动使用多进程 多级运行时使用ray.util.connect(head_host) 会自动链接多机环境