启动 Ray#
本页面介绍如何在单机或多机集群上启动 Ray。
提示
请确保您已 安装 Ray,然后再按照本页上的说明进行操作。
Ray 运行时是什么?#
Ray 程序通过利用底层的Ray 运行时来实现并行化和分布式。Ray 运行时由在后台启动的多个服务/进程组成,用于通信、数据传输、调度等。Ray 运行时可以在笔记本电脑、单台服务器或多台服务器上启动。
有三种方式可以启动 Ray 运行时
通过 `ray.init()` 隐式启动(在单机上启动 Ray)
通过 CLI 显式启动 (`ray start`)(通过 CLI 启动 Ray (ray start))
通过集群启动器显式启动 (`ray up`)(启动 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.init()` 将在首次使用 Ray 远程 API 时自动调用。
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` 命令在一台机器上启动一个单节点 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 https://: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 集群,请在集群中的一台机器上调用 `ray.init`。这将连接到最新的 Ray 集群。
ray.init()
请注意,调用 `ray up` 的机器不会被视为 Ray 集群的一部分,因此在该机器上调用 `ray.init` 不会连接到集群。
下一步?#
请查看我们的 部署部分,了解有关在不同环境中部署 Ray 的更多信息,包括 Kubernetes、YARN 和 SLURM。