常见问题解答#

以下是关于 Ray 集群的一些常见问题。如果您阅读本常见问题解答后仍有问题,请在 Ray Discourse 论坛上提问。

Ray 集群是否支持多租户?#

是的,您可以在 Ray 集群中同时运行来自不同用户的多个作业,但不建议在生产环境中使用。生产环境中的多租户功能 Ray 仍有部分缺失。

  • Ray 不提供强资源隔离:Ray 资源是逻辑上的,它们在任务或 actor 运行时不限制其使用的物理资源。这意味着同时运行的作业可能会相互干扰,从而降低在生产环境中运行的可靠性。

  • Ray 不支持优先级:所有作业、任务和 actor 具有相同的优先级,因此在高负载下无法优先处理重要作业。

  • Ray 不支持访问控制:作业对 Ray 集群及其中的所有资源拥有完全访问权限。

另一方面,您可以使用同一集群多次运行相同的作业,以节省集群启动时间。

注意

Ray 命名空间仅是对作业和命名 actor 进行逻辑分组。与 Kubernetes 命名空间不同,它不提供其他多租户功能,例如资源配额。

我有多个 Ray 用户。部署 Ray 的正确方式是什么?#

为每个用户启动一个 Ray 集群以隔离他们的工作负载。

--node-ip-address--address 有什么区别?#

当在具有多个网络地址的机器上启动头节点时,您可能需要指定外部可访问的地址,以便工作节点可以连接。使用此命令

ray start --head --node-ip-address xx.xx.xx.xx --port nnnn``

然后启动工作节点时,使用此命令连接到头节点

ray start --address xx.xx.xx.xx:nnnn

工作节点连接失败是什么样子的?#

如果工作节点无法连接到头节点,您应该会看到此错误

Unable to connect to GCS at xx.xx.xx.xx:nnnn. Check that (1) Ray GCS with matching version started successfully at the specified address, and (2) there is no firewall setting preventing access.

最可能的原因是工作节点无法访问给定的 IP 地址。您可以在工作节点上使用 ip route get xx.xx.xx.xx 开始调试路由问题。

您还可能在日志中看到类似以下内容的失败信息

This node has an IP address of xx.xx.xx.xx, while we can not found the matched Raylet address. This maybe come from when you connect the Ray cluster with a different IP address or connect a container.

此错误的原因可能是头节点因同时连接过多而过载。此问题的解决方案是更慢地启动工作节点。

SLURM 集群工作问题#

在 SLURM 集群上启动 Ray 时存在一类问题。尽管确切原因尚不清楚(截至 2023 年 6 月),但 Ray 的一些改进缓解了部分资源竞争。报告的一些问题如下:

  • 在一台具有大量 CPU 的机器上使用 OpenBLAS(如 NumPy 中使用)并为每个 CPU 启动一个 worker 可能会分配过多的线程。此问题是 OpenBLAS 的已知限制。您可以通过限制 OpenBLAS 为每个进程分配一个线程来缓解此问题,如链接中所述。

  • 资源分配与预期不符:通常配置为每个节点分配了过多的 CPU。最佳实践是在不启动 Ray 的情况下验证 SLURM 配置,以确认分配与预期相符。更多详细信息请参阅在 Slurm 上部署

我的 Ray 作业入口点脚本在哪里运行?在头节点还是工作节点上?#

默认情况下,使用Ray Job API提交的作业在头节点上运行其entrypoint脚本。您可以通过在使用 ray job submit 时指定 --entrypoint-num-cpus--entrypoint-num-gpus--entrypoint-resources--entrypoint-memory 选项,或在使用 Python SDK 时指定相应的参数来更改此行为。如果指定了这些参数,作业入口点将被调度到具有所需资源的节点上。