3

boost :: mpiチュートリアルの最初の例を実行しようとすると、3台以上のマシンで実行できませんでした。具体的には、これは正常に実行されているようです。

mpirun -hostfile hostnames -np 4 boost1

ホスト名の各ホスト名を<node_name> slots=2 max_slots=2。しかし、プロセスの数を5に増やすと、ハングします。slots/の数を1に減らしましたが、max_slots2台を超えても同じ結果になりました。ノードでは、これはジョブリストに表示されます。

<user> Ss orted --daemonize -mca ess env -mca orte_ess_jobid 388497408 \
-mca orte_ess_vpid 2 -mca orte_ess_num_procs 3 -hnp-uri \
388497408.0;tcp://<node_ip>:48823

さらに、それを殺すと、次のメッセージが表示されます。

node2- daemon did not report back when launched
node3- daemon did not report back when launched

mpiクラスタは、NFSマウントされたドライブでアクセス可能なおよびboostライブラリを使用してセットアップされます。NFSでデッドロックが発生していますか?または、何か他のことが起こっていますか?

更新: 明確にするために、私が実行しているブーストプログラムは

#include <boost/mpi/environment.hpp>
#include <boost/mpi/communicator.hpp>
#include <iostream>
namespace mpi = boost::mpi;

int main(int argc, char* argv[]) 
{
  mpi::environment env(argc, argv);
  mpi::communicator world;
  std::cout << "I am process " << world.rank() << " of " << world.size()
        << "." << std::endl;
  return 0;
}

@Dirk Eddelbuettelの推奨事項hello_c.cから、次のようにmpiの例をコンパイルして実行しました。

#include <stdio.h>
#include "mpi.h"

int main(int argc, char* argv[])
{
    int rank, size;

    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    printf("Hello, world, I am %d of %d\n", rank, size);
    MPI_Barrier(MPI_COMM_WORLD);
    MPI_Finalize();

   return 0;
}

複数のプロセスを持つ単一のマシンで正常に実行されます。これには、任意のノードへのsshingと実行が含まれます。各計算ノードは、NFSを介してリモートマシンからマウントされた作業ディレクトリおよびmpi/boostディレクトリと同じです。ファイルサーバーからブーストプログラムを実行すると(boost / mpiがローカルであることを除いてノードと同じです)、2つのリモートノードで実行できます。ただし、「hello world」の場合、mpirun -H node1,node2 -np 12 ./hello取得したコマンドを実行すると

[<node name>][[2771,1],<process #>] \
[btl_tcp_endpoint.c:638:mca_btl_tcp_endpoint_complete_connect] \
connect() to <node-ip> failed: No route to host (113)

「HelloWorld」はすべて印刷されており、最後にぶら下がっています。ただし、リモートノードの計算ノードから実行する場合の動作は異なります。

「Helloworld」とブーストコードはどちらもmpirun -H node1 -np 12 ./hello、node2から実行するとハングし、その逆も同様です。(上記と同じ意味でハングします。ortedはリモートマシンで実行されていますが、通信していません。)

mpiライブラリがローカルであるファイルサーバーでの実行と計算ノードでの実行との動作が異なるという事実は、NFSデッドロックが発生している可能性があることを示しています。これは合理的な結論ですか?これが事実であると仮定して、静的にリンクできるようにmpiを構成するにはどうすればよいですか?さらに、ファイルサーバーから実行しているときに発生するエラーをどうすればよいかわかりません。

4

3 に答える 3

5

答えは単純であることが判明しました。sshを介して認証されたmpiを開き、ノード間のtcp/ipソケットを開きます。計算ノードのファイアウォールは、任意の接続ではなく、相互のssh接続のみを受け入れるように設定されています。したがって、iptablesを更新した後、helloworldはすべてのノードでチャンピオンのように実行されます。

編集:ファイルサーバーのファイアウォールが任意の接続を許可したことを指摘しておく必要があります。そのため、ファイルサーバー上で実行されるmpiプログラムは、計算ノード上で実行される場合とは異なる動作をします。

于 2010-04-06T17:21:49.957 に答える
2

私の最初の推奨事項は、単純化することです。

  • 標準のMPI「hello、world」の例を作成できますか?
  • ローカルホストで数回実行できますか?
  • 経由して他のホストで実行できますかssh
  • 同一のパスです

もしそうなら、

mpirun -H host1,host2,host3 -n 12 ./helloworld

渡って移動する必要があります。これらの基本を整理したら、Boostチュートリアルを試してください...実行する予定のすべてのホストにBoostライブラリとMPIライブラリがあることを確認してください。

于 2010-03-22T19:57:09.760 に答える
2

パラメータ--mcabtl_tcp_if_includeeth0を使用 して、ノードがeth0インターフェイスのみを使用するようにし、OpenMPIが最適なネットワークを特定できないようにすることを検討してください。--mcabtl_tcp_if_excludeeth0もあります。特定のインターフェイスをeth0に置き換える ことを忘れないでください。

私の/etc/ hostsには、次のような行が含まれていました。

10.1.2.13 node13

..。

10.1.3.13 node13-ib

mpirunを起動すると、TCPネットワークが選択され、ノードはTCPネットワークを使用していましたが、しばらくして(20秒)、OpenMPIがIP 10.1.3.XXXを検出して使用しようとしたため、エラーメッセージが表示されました。

お役に立てば幸いです

于 2013-03-05T13:44:34.280 に答える