雷获取头节点Redis地址

时间:2019-04-27 03:09:27

标签: ray

我想在具有多个节点的群集上运行ray。我只能将非交互式作业提交到群集,因此我不确定在作业运行时如何以编程方式获取Redis地址。

我非常确定在多个节点上开始射线的方式是这样的:

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

我打算捕获ray start --head &> tee redis_port.txt之类的输出,然后grep进入redis_address.txt来查找redis地址,但似乎输出的这一部分没有被{ {1}},我浏览了ray会话创建的temp目录中的所有redis_address.txt.out文件,但它们都没有。

必须有一些更好的方法来做到这一点。查找头节点的redis端口的预期方法是什么?

1 个答案:

答案 0 :(得分:0)

感谢罗伯特的帮助so I'm going to post the code that I used based on his advice.

似乎最好的方法就是选择一个恒定端口。唯一的潜在问题是同一台计算机上的另一个用户/进程是否正在使用同一端口。在这种情况下,您可能要尝试生成端口,直到找到未使用的端口。

我建议使用ray start这样的命令将每个节点所需的所有设置放入脚本中

redis_address="$(hostname --ip-address)"
redis_address="$redis_address:59465"

ray start --head --redis-port=59465

for host in $(srun hostname | grep -v $(hostname)); do
    ssh $host ./setup_node.sh $redis_address
done

setup_node.sh在哪里

# any required setup
# ...

ray start --redis-address=$1

您将需要一些东西来获取IP地址列表,例如我在上面使用srun hostname的地方。