启动 Ray#
本页面介绍如何在单台机器或机器集群上启动 Ray。
提示
在按照本页说明操作之前,请务必安装 Ray。
什么是 Ray 运行时?#
Ray 程序可以通过利用底层的 Ray 运行时 来实现并行和分布式计算。Ray 运行时由在后台启动的多个服务/进程组成,用于通信、数据传输、调度等。Ray 运行时可以在笔记本电脑、单个服务器或多个服务器上启动。
有三种方法启动 Ray 运行时
通过
ray.init()
隐式启动 (在单台机器上启动 Ray)通过 CLI 显式启动 (通过 CLI 启动 Ray (ray start))
通过集群启动器显式启动 (启动 Ray 集群 (ray up))
在所有情况下,ray.init()
将尝试自动查找要连接的 Ray 实例。它按顺序检查:1. RAY_ADDRESS
操作系统环境变量。2. 传递给 ray.init(address=<address>)
的具体地址。3. 如果未提供地址,则检查使用 ray start
在同一台机器上启动的最新 Ray 实例。
在单台机器上启动 Ray#
调用 ray.init()
会在您的笔记本电脑/机器上启动一个本地 Ray 实例。这台笔记本电脑/机器成为“头节点”。
注意
在 Ray 的最新版本 (>=1.5) 中,首次使用 Ray 远程 API 时会自动调用 ray.init()
。
import ray
# Other Ray APIs will not work until `ray.init()` is called.
ray.init()
import io.ray.api.Ray;
public class MyRayApp {
public static void main(String[] args) {
// Other Ray APIs will not work until `Ray.init()` is called.
Ray.init();
...
}
}
#include <ray/api.h>
// Other Ray APIs will not work until `ray::Init()` is called.
ray::Init()
当调用 ray.init()
的进程终止时,Ray 运行时也会终止。要显式停止或重启 Ray,请使用 shutdown API。
import ray
ray.init()
... # ray program
ray.shutdown()
import io.ray.api.Ray;
public class MyRayApp {
public static void main(String[] args) {
Ray.init();
... // ray program
Ray.shutdown();
}
}
#include <ray/api.h>
ray::Init()
... // ray program
ray::Shutdown()
要检查 Ray 是否已初始化,请使用 is_initialized
API。
import ray
ray.init()
assert ray.is_initialized()
ray.shutdown()
assert not ray.is_initialized()
import io.ray.api.Ray;
public class MyRayApp {
public static void main(String[] args) {
Ray.init();
Assert.assertTrue(Ray.isInitialized());
Ray.shutdown();
Assert.assertFalse(Ray.isInitialized());
}
}
#include <ray/api.h>
int main(int argc, char **argv) {
ray::Init();
assert(ray::IsInitialized());
ray::Shutdown();
assert(!ray::IsInitialized());
}
有关配置 Ray 的各种方法,请参阅配置文档。
通过 CLI 启动 Ray (ray start
)#
从 CLI 使用 ray start
在机器上启动一个 1 节点的 Ray 运行时。这台机器成为“头节点”。
$ ray start --head --port=6379
Local node IP: 192.123.1.123
2020-09-20 10:38:54,193 INFO services.py:1166 -- View the Ray dashboard at http://localhost:8265
--------------------
Ray runtime started.
--------------------
...
您可以通过在运行 ray start
的同一节点上启动一个驱动进程来连接到此 Ray 实例。ray.init()
现在将自动连接到最新的 Ray 实例。
import ray
ray.init()
import io.ray.api.Ray;
public class MyRayApp {
public static void main(String[] args) {
Ray.init();
...
}
}
java -classpath <classpath> \
-Dray.address=<address> \
<classname> <args>
#include <ray/api.h>
int main(int argc, char **argv) {
ray::Init();
...
}
RAY_ADDRESS=<address> ./<binary> <args>
您可以通过在其他节点上也调用 ray start
将它们连接到头节点,从而创建一个 Ray 集群。有关更多详细信息,请参阅启动本地集群。在集群中的任何机器上调用 ray.init()
都将连接到同一个 Ray 集群。
启动 Ray 集群 (ray up
)#
Ray 集群可以使用集群启动器启动。ray up
命令使用 Ray 集群启动器在云上启动一个集群,创建一个指定的“头节点”和工作节点。在底层,它会自动调用 ray start
来创建 Ray 集群。
您的代码只需在集群中的一台机器(通常是头节点)上执行。阅读更多关于在 Ray 集群上运行程序的信息。
要连接到 Ray 集群,请在集群中的一台机器上调用 ray.init
。这将连接到最新的 Ray 集群。
ray.init()
请注意,调用 ray up
的机器不被视为 Ray 集群的一部分,因此在该同一台机器上调用 ray.init
将不会连接到集群。
下一步是什么?#
请查看我们的部署部分,了解在不同设置下部署 Ray 的更多信息,包括 Kubernetes、YARN 和 SLURM。