Ray --内部运行机制、对象存储中对象的存储和容错

本篇主要介绍了分布式框架 Ray 的内部运行机制,对象的存储过程和容错能力。内部运行机制主要分为Ray的连接,远程函数的定义和使用以及获取对象ID的运行机制。对象存储主要是对象放入的序列化和从对象调出的反序列化,以及特殊的numpy数组的Apache Arrow 化存储。容错主要是进程和对象的恢复,丢失的actor不能重建,以及那些进程和对象不能重建问题。

1.内部运行机制

本节部分,将详细地跟踪在进行某些API调用时在系统级发生的情况。

1.1 连接到Ray

有两种方法可以启动Ray脚本。它可以以独立的方式运行,也可以连接到现有的Ray集群。

(1) 独立的运行
Ray可以通过在脚本中调用ray .init()独立使用。当调用ray.init()时,将启动所有相关的进程。其中包括一个raylet、一个对象存储和管理器、一个Redis服务器和一些worker进程。
当脚本退出时,这些进程将被终止。
注意: 这种方法仅限于一台机器。

(2)连接到现有的Ray集群上

要连接到现有的Ray集群,只需将Redis服务器的参数地址作为redis_address = keyword参数传递给ray.init。 在这种情况下(keyword 为集群头结点的IP地址),调用ray.init时不会启动任何新进程,类似地,当脚本退出时,进程将继续运行。 在这种情况下,除了与actor对应的worker之外的所有进程在不同的驱动程序进程之间共享。

1.2 定义远程函数

该系统的一个核心部件是集中控制平面。这是使用一个或多个Redis服务器实现的。数据在Redis的内存中以键值的形式存储。

使用的集中控制平面有两种方式。首先,作为系统控制状态的持久性存储。其次,作为进程之间通信的消息总线(使用Redis的发布-订阅功能)。

现在,考虑一个如下所示的远程函数定义。

@ray.remote
def f(x):
    return x + 1

当远程函数定义为如上所示时,将立即对该函数进行pickle,分配一个惟一的ID,并将其存储在Redis服务器中。可以在集中控制平面中查看此远程功能。

TODO: Fill this in.

每个工作进程都有一个单独的线程在后台运行,该线程侦听添加到集中控制状态的远程函数。当添加一个新的远程函数时,线程获取pickle的远程函数,unpickle它,然后可以执行该函数。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值