2016-03-20 14 views
0

これはスレッドipython-with-mpi-clustering-using-machinefileの続きです。それは、問題が何であるかについて若干焦点が合っていてうまくいけば分かります。ipythonを使用してmpiクラスタ内の複数のノードにアクセスする

3ノードは、NFS共有上のmpich/mpi4py、machinefile、およびvirtualenv内のすべてのライブラリを使用してクラスタとして動作しています。私の目標は、ipython/ipyparallelを使用して複数のノードにジョブを配布し、それぞれが複数のipythonエンジンを実行することです。

import ipyparallel as ipp 

client = ipp.Client() 
dview = client[:] 

with dview.sync_imports(): 
    import socket 

@dview.remote(block=True) 
def engine_hostname(): 
    return socket.gethostname() 

results = engine_hostname() 
for r in results: 
    print r 
:私は ipython --profile=mpiを実行し、次のコマンドを使用して実行している上で実行されているエンジンの一覧を表示(この場合は worker1に)(この場合には worker2)を1つのノード上 ipcluster start --profile=mpi -n 4を実行することができ、別のノードを経由しています

私はこの場合に(別のノードでipcluster開始した場合、しかし、

In [7]: for r in results: 
     print r 
    ...: 
worker2 
worker2 
worker2 
worker2 

:予想通り

は、私が印刷されたエンジンを実行しているホストのホスト名の4つのインスタンスを取得します

In [7]: for r in results: 
      print r 
     ...: 
    head 
    head 
    head 
    head 

私の質問はどのようにすることができ、:)、それらは、上記で概説したように、私はエンジンの最初のセットは、まだ他のノードで実行されているにもかかわらず、それらを照会するときに表示するための唯一のエンジン/ノードがありますipythonには、実行中のすべてのノードのすべてのエンジンが表示されます。実際に負荷を異なるノードに分散させることができます。細かい自身の作品(頭、worker1とworker2は、クラスタのそれぞれのノードの罪です)上のMPI実行

:だから

(venv)[email protected]:~/development/mpi$ mpiexec -f machinefile -n 10 ipython test.py 
head[21506]: 0/10 
worker1[7809]: 1/10 
head[21507]: 3/10 
worker2[8683]: 2/10 
head[21509]: 9/10 
worker2[8685]: 8/10 
head[21508]: 6/10 
worker1[7811]: 7/10 
worker2[8684]: 5/10 
worker1[7810]: 4/10 

は、少なくとも私は、これは問題ではありません知っています。

答えて

0

解決済み。私は自分のipcluster_config.pyファイルを作り直し、c.MPILauncher.mpi_args = ["-machinefile"、 "path_to_file/machinefile"]を追加して、今回はうまくいきました。私はこれまでにこれがあったと誓うことができましたが、悲しいことに、悲しいです...

関連する問題