【发布时间】:2019-09-16 12:25:25
【问题描述】:
我想在具有多个节点的集群上运行 ray。我只能向集群提交非交互式作业,所以我不确定如何在作业运行时以编程方式获取 redis 地址。
我相当确定在多个节点上启动 ray 的方式是这样的:
ray start --head
for host in $(srun hostname | grep -v $(hostname)); do
ssh $host ray start --redis-address=$redis_address
done
但是我需要知道头节点的redis地址。当您启动头节点时,它会打印:
Started Ray on this node. You can add additional nodes to the cluster by calling
ray start --redis-address 8.8.8.8:59465
from the node you wish to add. You can connect a driver to the cluster from Python by running
import ray
ray.init(redis_address="8.8.8.8:59465")
If you have trouble connecting from a different machine, check that your firewall is configured properly. If you wish to terminate the processes that have been started, run
我正计划在redis_address.txt 中捕获像ray start --head &> tee redis_port.txt 这样的输出,然后在redis_address.txt 中捕获greping 以查找redis 地址,但似乎输出的那部分没有在redis_address.txt 中捕获,我查看了ray 会话创建的 temp 目录中的所有 .out 和 .err 文件,但它们都没有。
必须有一些更好的方法来做到这一点。查找头节点的redis端口的预期方法是什么?
【问题讨论】:
-
redis地址分为两部分。首先是头节点的 IP 地址,您可能已经以编程方式获得了该地址。第二个是Redis端口,可以使用
ray start --head --redis-port=6379设置。这样,您将知道端口是什么,而不必捕获输出。 -
有没有可能端口不开放?我知道我可以指定
redis-port,但我担心它会因为正在使用的端口而崩溃。每次选择一个常量端口似乎比让ray选择更容易出错。 -
任何特定端口都可能正在使用中。您可以选择一个大而晦涩的端口号来降低这种可能性。这是否是一个好主意取决于设置。例如,如果其他人在同一节点上运行应用程序,或者只有你自己。
-
由于我将是节点上的唯一用户,我认为这应该没问题,但我想在另一种情况下,您可以继续生成端口,直到找到未使用的端口。谢谢
标签: ray