これは、スレッドipython-with-mpi-clustering-using-machinefileの続きです。問題が何であるかについて、もう少し焦点を絞って、うまくいけばより明確になります。
mpich / mpi4py、machinefile、virtualenv内のすべてのライブラリをすべてNFS共有で使用して、3ノードをクラスターとして実行しています。私の目標は、ipython / ipyparallelを使用して、それぞれが複数のipythonエンジンを実行している複数のノードにジョブを分散することです。
私は実行することができていますipcluster start --profile=mpi -n 4
(この場合、1つのノード上worker2
)と、別の(この場合はノードを経由してworker1
)実行するipython --profile=mpi
と、リストは、次のコマンドを使用して実行している上で実行されているエンジン:
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
予想どおり、エンジンを実行しているホストのホスト名の4つのインスタンスが出力されます。
In [7]: for r in results:
print r
...:
worker2
worker2
worker2
worker2
ただし、別のノード(この場合head
)でipclusterを起動すると、最初のエンジンセットが他のノードで実行されている場合でも、上記のようにクエリを実行すると、これらのエンジンが表示されます。
In [7]: for r in results:
print r
...:
head
head
head
head
私の質問は、実行中のすべてのノードですべてのエンジンをipythonに表示させるにはどうすればよいですか。つまり、実際に負荷をさまざまなノードに分散します。
mpiを単独で実行すると、正常に機能します(head、worker1、worker2は、クラスター内のそれぞれのノードです)。
(venv)gms@head:~/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
だから、少なくとも私はこれが問題ではないことを知っています。
解決しました。ipcluster_config.pyファイルを再作成し、c.MPILauncher.mpi_args = ["-machinefile"、 "path_to_file / machinefile"]を追加しましたが、今回は奇妙な理由で機能しました。以前にこれを持っていたと誓うことができましたが、残念ながら...
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加