これはスレッド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
は、少なくとも私は、これは問題ではありません知っています。