常见问题解答#

这些是关于 Ray 集群的一些常见问题解答。如果你在阅读此 FAQ 后仍有疑问,请在 Ray Discourse 论坛 上联系我们。

Ray 集群支持多租户吗?#

是的,您可以在 Ray 集群中同时运行来自不同用户的多个 作业,但不建议在生产环境中这样做。一些 Ray 功能在生产环境中的多租户方面仍然缺失:

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

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

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

另一方面,你可以使用同一个集群多次运行相同的任务,以节省集群启动时间。

备注

Ray 命名空间 只是作业和命名参与者的逻辑分组。与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

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

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

无法连接到位于 xx.xx.xx.xx:nnnn 的 GCS。请检查 (1) 与指定地址匹配版本的 Ray GCS 是否成功启动,以及 (2) 是否没有防火墙设置阻止访问。

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

您也可能在日志中看到类似以下失败:

此节点的IP地址为xx.xx.xx.xx,但我们找不到匹配的Raylet地址。这可能是因为您使用不同的IP地址连接到Ray集群或连接到容器时导致的。

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

让SLURM集群工作遇到问题#

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

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

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

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

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