常见问题解答#
这些是关于 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 时指定相应的参数。如果指定了这些选项,作业的入口点将被调度到具有所需资源的节点上。