1

複数のノードを持つクラスターで 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

次のような出力をキャッチして、redis アドレスを見つけるために ing することを計画していましたが、出力の一部がキャッチされていないようでray start --head &> tee redis_port.txtgreprayセッションによって作成された一時ディレクトリ内のすべてのファイルとファイルを調べましたが、何もありませんでしたそれらのいずれかを持っています。redis_address.txtredis_address.txt.out.err

これを行うには、もっと良い方法があるはずです。ヘッド ノードの redis ポートを見つけるための意図された方法は何ですか?

4

1 に答える 1

1

ロバートの助けのおかげでコメントで解決したので、彼のアドバイスに基づいて使用したコードを投稿します。

最良の方法は、一定のポートを選択することです。唯一の潜在的な問題は、同じマシン上の別のユーザー/プロセスが同じポートを使用している場合です。その場合、使用されていないポートが見つかるまで、ポートの生成を試みることができます。

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

于 2019-05-05T05:51:08.167 に答える