1

私は多くの例を調べましたが、まだ混乱しています。ここから簡単な遅延チェックプログラムをコンパイルしました。1つのホストで完全に実行されますが、2つのホストで実行しようとするとハングします。ただし、次のようなものをhostname実行すると正常に実行されます。

[hamiltont@4 latency]$ mpirun --report-bindings --hostfile hostfile --rankfile rankfile -np 2 hostname
[4:16622] [[5908,0],0] odls:default:fork binding child [[5908,1],0] to slot_list 0
4
[5:12661] [[5908,0],1] odls:default:fork binding child [[5908,1],1] to slot_list 0
5

しかし、コンパイルされたレイテンシープログラムは次のとおりです。

[hamiltont@4 latency]$ mpirun --report-bindings --hostfile hostfile --rankfile rankfile -np 2 latency 
[4:16543] [[5989,0],0] odls:default:fork binding child [[5989,1],0] to slot_list 0
[5:12582] [[5989,0],1] odls:default:fork binding child [[5989,1],1] to slot_list 0
[4][[5989,1],0][btl_tcp_endpoint.c:638:mca_btl_tcp_endpoint_complete_connect] connect() to 10.0.2.5 failed: Connection timed out (110)

私の現在の推測では、ファイアウォールルールに何か問題があります(たとえば、ホスト名はホスト間で通信しませんが、遅延プログラムは通信します)。

[hamiltont@4 latency]$ cat rankfile
rank 0=10.0.2.4 slot=0
rank 1=10.0.2.5 slot=0
[hamiltont@4 latency]$ cat hostfile 
10.0.2.4 slots=2
10.0.2.5 slots=2
4

1 に答える 1

13

OpenMPIジョブの実行に関係する通信には2種類あります。まず、ジョブを開始する必要があります。Open MPIは、さまざまな種類の起動をサポートするために特別なフレームワークを使用しており、rshSSH経由のリモートログイン起動メカニズムを使用している可能性があります。明らかに、ファイアウォールはSSH接続を許可するように正しく設定されています。

Open MPIジョブが起動され、プロセスが真のMPIプログラムである場合、それらmpirunはジョブを生成したプロセスに接続し直し、ジョブ内の他のプロセス、最も重要なのは各プロセスで使用可能なネットワークエンドポイントについてすべて学習します。このメッセージ:

[4][[5989,1],0][btl_tcp_endpoint.c:638:mca_btl_tcp_endpoint_complete_connect] connect() to 10.0.2.5 failed: Connection timed out (110)

ホストで実行されているプロセスが、ホスト4で実行されているプロセスへのTCP接続を開くことができないことを示します5。その最も一般的な理由は、インバウンド接続を制限するファイアウォールの存在です。したがって、ファイアウォールをチェックすることが最初に行うことです。

もう1つの一般的な理由は、両方のノードに、互換性のあるネットワークアドレスを使用して構成された追加のネットワークインターフェイスがあるが、それらの間に接続を確立する可能性がない場合です。これは、さまざまな仮想インターフェイスやトンネリングインターフェイスがデフォルトで起動されている新しいLinuxセットアップでよく発生します。btl_tcp_if_excludeこれらのインターフェイスをMCAパラメータに(インターフェイス名またはCIDRネットワークアドレスとして)リストすることで、OpenMPIにこれらのインターフェイスをスキップするように指示できます。例:

$ mpirun --mca btl_tcp_if_exclude "127.0.0.1/8,tun0" ...

(設定する場合は、常にループバックインターフェイスを追加する必要がありますbtl_tcp_if_exclude

btl_tcp_if_includeまたは、 MCAパラメータにリストすることにより、通信に使用するインターフェイスを明示的に指定できます。

$ mpirun --mca btl_tcp_if_include eth0 ...

エラーメッセージのIPアドレスは、hostfileの2番目のホストのアドレスと一致するため、問題はアクティブなファイアウォールルールに起因する必要があります。

于 2013-02-25T18:21:54.403 に答える