Ray

简介

ray 是伯克利大学开源的一个解决 AI 异构计算负载的通用分布式计算引擎,初期主要是解决强化学习这种多类型负载的计算问题,目前其应用面也超出 AI 领域,例如蚂蚁将其应用于图计算等场景

计算模型

ray 提供了 task 和 actor 两种计算原语

  • task
    task 是无状态的计算任务,一般通过一个方法进行定义
@ray.remote
def f(x):
    return x * x
  • actor
    actor 是有状态的计算任务,一般通过一个 class 进行定义,且其执行的方式是串行进行,且共享其状态
@ray.remote
class Counter(object):
    def __init__(self):
        self.n = 0

    def increment(self):
        self.n += 1

    def read(self):
        return self.n

系统构成

Ray cluster

ray 由若干个同质的 Worker node 及一个 Head node 组成
每个 Worker node 包括一个 Raylet 进程及若干个 Worker 进程, Head node 除了 Worker node 包含的进程外,还包括 Driver 及 GCS

特点

  • 调度方式
    相较于传统的分布式计算引擎的中心化调度模式,ray 的调度方式为本地调度及远程转发调度两种方式,调度的灵活性及低延迟性更好
  • 动态任务依赖
    类似 Spark、TensorFlow 等调度模式,都是提前已知整个 job 的任务依赖关系,而后进行调度执行,ray 可以在 runtime 构建出新的任务依赖(任务中动态创建任务),更加灵活
  • 异构计算负载及资源支持
    例如强化学习的计算负载类型就包括随机梯度下降的训练(training)、在线服务(serving)及仿真(simulation),而对于各种异构计算资源也存在诉求,例如 GPU、CPU 等
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容