FAQ#
这是 Ray 集群的一些常见问题解答。如果您在阅读此 FAQ 后仍有疑问,请通过 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
工作节点连接失败时是什么样的?#
如果工作节点无法连接到头节点,您应该会看到此错误:
无法连接到 GCS (xx.xx.xx.xx:nnnn)。请检查 (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 启动一个工作节点,同时使用 OpenBLAS(NumPy 使用的库)可能会分配过多的线程。这是一个 已知的 OpenBLAS 限制。您可以通过限制 OpenBLAS 每个进程的线程数来缓解此问题,如链接中所述。
资源分配不如预期:通常配置为每个节点分配过多的 CPU。最佳实践是先验证 SLURM 配置,然后再启动 Ray,以确认分配符合预期。有关更详细的信息,请参阅 在 Slurm 上部署。
我的 Ray 作业入口点脚本在哪里运行?在头节点还是工作节点上?#
默认情况下,使用 Ray 作业 API 提交的作业将在头节点上运行其 entrypoint 脚本。您可以通过指定 --entrypoint-num-cpus、--entrypoint-num-gpus、--entrypoint-resources 或 --entrypoint-memory 等选项来更改此行为,这些选项应用于 ray job submit 命令,或者如果您使用 Python SDK,则使用相应的参数。如果指定了这些选项,作业入口点将被调度到具有所需资源的节点上。