Ray是UC Berkeley RISELab新推出的高性能分布式执行框架,它使用了和传统分布式计算系统不一样的架构和对分布式计算的抽象方式,具有比Spark更优异的计算性能。Ray是一个基于Python的分布式执行引擎。相同的代码可以在单个机器上运行以实现高效的多处理,并且可以在群集上用于大量的计算。
使用Ray时,涉及以下几个过程
- 多个工作进行执行任务,并将结果村存储在对象库中,每个进程是一个独立的处理单位。
- 每个节点的存储不可变的对象在共享内存中,并允许进程在相同节点上高效复制和反序列化对象
- 一个全局调度器调度接收任务,并将它们分配到其他地方节点运行
- 一个driver是用户控制的python程序。例如,如果用户正在运行脚本或使用python shell,那么driver就是运行的脚本或者python进程。driver与工作程序类似,都可以将任务提交给本地调度程序,并从对象存储中获取对象,但不同之处在于本地调度程序不会讲任务分配给要执行的driver
- 一个Redis服务器维护大量的系统状态,例如,他跟踪哪些对象在哪些机器上以及任务规范(而不是数据)上,他可以直接用于调试目的的查询。
这是别人说的,咱也不敢说,咱也不敢问 ! 了解大致的逻辑就好.你只需要知道他超级牛逼,超级方便
安装就是简单的 pip install ray
, 需要提醒的就是ray现在只有linux编译版本, windows就别想着用了,为了这,我硬生生把开发环境从windows切到了linux.
开始使用Ray
首先来看一下最简单的Ray程序是如何编写的。
# 导入ray,并初始化执行环境
import ray
ray.init()
# 定义ray remote函数
@ray.remote
def hello():
return "Hello world !"
# 异步执行remote函数,返回结果id
object_id = hello.remote()
# 同步获取计算结果
hello = ray.get(object_id)
# 输出计算结果
print(hello)
在Ray里,通过Python注解@ray.remote定义remote函数。使用此注解声明的函数都会自带一个默认的方法remote,通过此方法发起的函数调用都是以提交分布式任务的方式异步执行的,函数的返回值是一个对象id,使用ray.get内置操作可以同步获取该id对应的对象
更新中,不要着急!,急的话自己看下面的参考!
参考:
高性能分布式执行框架——Ray
取代 Python 多进程!伯克利开源分布式框架 Ray
官方文档
基于python的高性能实时并行机器学习框架之Ray介绍
网友评论