1

MPI_Comm_spawn を使用してリモート ノードでワーカー プロセスを開始するにはどうすればよいですか?

OpenMPI 1.4.3 を使用して、次のコードを試しました。

MPI_Info info;
MPI_Info_create(&info);
MPI_Info_set(info, "host", "node2");
MPI_Comm intercom;
MPI_Comm_spawn("worker",
        MPI_ARGV_NULL,
        nprocs,
        info,
        0,
        MPI_COMM_SELF,
        &intercom,
        MPI_ERRCODES_IGNORE);

しかし、それは次のエラー メッセージで失敗します。

-------------------------------------------------- ------------------------
アプリケーションに割り当てられたリソースがありません
  ワーカー
要求されたマッピングに一致するもの:


を使用して、割り当てられたリソースを適切にマップしたことを確認します。
--host または --hostfile の指定。
-------------------------------------------------- ------------------------
-------------------------------------------------- ------------------------
デーモン (pid 不明) がシグナル 1 で予期せず終了しました。
起動するので、中止します。

環境によってさらに多くの情報が報告される場合があります (上記を参照)。

これは、デーモンが必要なすべての共有を見つけることができなかったことが原因である可能性があります
リモート ノード上のライブラリ。LD_LIBRARY_PATH を設定して、
リモートノード上の共有ライブラリの場所。
自動的にリモート ノードに転送されます。
-------------------------------------------------- ------------------------

「node2」をローカル マシンの名前に置き換えると、問題なく動作します。node2 に ssh し、そこで同じことを実行すると (info ディクショナリに "node2" を指定して)、正常に動作します。

親プロセスを mpirun で開始したくないので、リモート ノードでプロセスを動的に生成する方法を探しています。これは可能ですか?

4

1 に答える 1

2

mpirunで親プロセスを開始したくないので、リモートノードでプロセスを動的に生成する方法を探しています。これは可能ですか?

なぜmpirunで始めたくないのかわかりませんか?MPI_Init()を押すとすぐに、とにかくMPI機構全体を暗黙的に起動します。これにより、デフォルトに依存するのではなく、オプションを渡すことができます。

ここでの問題は、MPIライブラリが(MPI_Init()で)起動したときに、mpirunに--hostまたは--hostfileオプションを指定していないため、使用可能な他のホストが表示されないことです。それはあなたの言う他の場所でプロセスを起動するだけではありません(実際、spawnはInfoホストを必要としないので、一般的にどこに行くべきかさえ知らないでしょう)、それで失敗します。

したがって 、ホストファイルを実行するmpirun --host myhost,host2 -np 1 ./parentjob か、より一般的には、できれば利用可能なスロットの数を提供する必要があります。

myhost slots=1
host2 slots=8
host3 slots=8

この方法でジョブを起動します。mpirun --hostfile mpihosts.txt -np 1 ./parentjobこれは機能であり、バグではありません。現在、ワーカーがどこに行くかを把握するのはMPIの仕事であり、情報でホストを明示的に指定しない場合は、最も活用されていない場所にホストを配置しようとします。また、スポーン先のホストを変更するために再コンパイルする必要がないことも意味します。

于 2010-11-23T23:05:52.350 に答える