在分布式计算上执行ray

问题描述

我在我在virtualBox上制作的服务器上有数据,那里有一个grpc服务器。 在本地计算机上,我创建了一个grpc客户端,该客户端将类实例发送到服务器,服务器执行一个方法并返回结果。

我正在尝试使用ray实现相同的功能。我无法理解应该使用哪些工具?我应该在本地计算机上创建光线群集吗?如果是,我应该如何在虚拟盒上编写程序以连接到群集并对虚拟盒中的数据执行所需的方法

解决方法

有关您的用例,有关Ray的2节点设置的可能配置:

  • 将VM视为群集的头节点。您可以通过ray up --head --resources='{data: 1}初始化集群(data: 1部分将在一秒钟内变得重要)。

  • 现在,您可以使用Python脚本通过ray.init(address="...")从本地计算机连接到它(您可能需要确保正确设置虚拟机的网络/端口转发)。

  • 默认情况下,Ray将尝试在具有足够资源的任何节点上运行任务/角色。大概,您希望大多数任务都可以运行VM,因此有2种合理的方法来实现这一点。

方法1:

您可以使用num_cpus=0告诉Ray您的本地计算机没有资源,因此它应在头节点上运行所有内容。如果您只想将本地计算机视为客户端,则最好使用这种方法。如果这样做,则不需要--resources标志。

import ray
ray.init(address="...",num_cpus=0)

@ray.remote
def foo():
    print("This runs on the VM")


print("This runs locally")
ray.get(foo.remote())

方法2:

使用自定义资源来约束任务可以在哪些节点上运行。

import ray
ray.init(address="...")

@ray.remote(resources={"data": 0.01})
def foo():
    print("This runs on the VM")

print("This runs locally")
ray.get(foo.remote())

由于远程功能需要一些“数据”资源,因此它将在头节点上运行(并且由于仅需要该资源的0.01,因此许多任务可以一次在头节点上运行)。

这种方法比较可取,因为您计划将来将更多的节点连接到您的群集,其中有些拥有您的数据,有些则没有。