使用ipython访问mpi群集中的多个节点

使用ipython访问mpi群集中的多个节点,ipython,cluster-computing,mpich,ipython-parallel,mpi4py,Ipython,Cluster Computing,Mpich,Ipython Parallel,Mpi4py,这是线程的延续。它的重点稍微突出一些,希望能更清楚地说明问题可能是什么 我使用mpich/mpi4py、machinefile和virtualenv中的所有库将3个节点作为集群运行,所有这些都在NFS共享上。我的目标是使用ipython/ipyparallel跨多个节点分发作业,每个节点运行多个ipython引擎 我可以在一个节点上运行ipcluster start--profile=mpi-n4(在本例中为worker2),并通过另一个节点(在本例中为worker1)运行ipython--pr

这是线程的延续。它的重点稍微突出一些,希望能更清楚地说明问题可能是什么

我使用mpich/mpi4py、machinefile和virtualenv中的所有库将3个节点作为集群运行,所有这些都在NFS共享上。我的目标是使用ipython/ipyparallel跨多个节点分发作业,每个节点运行多个ipython引擎

我可以在一个节点上运行
ipcluster start--profile=mpi-n4
(在本例中为
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
但是,如果我在另一个节点上启动ipcluster(在本例中为
head
),则当我如上所述查询它们时,这些是唯一显示的引擎/节点,即使第一组引擎仍在另一个节点上运行:

In [7]: for r in results:
            print r
       ...:
    head
    head
    head
    head
我的问题是,如何让ipython看到所有正在运行的节点上的所有引擎;实际上,将负载分布到不同的节点上

单独运行mpi可以正常工作(head、worker1和worker2是集群中各自的节点):


所以,至少我知道这不是问题。

解决了。我重新创建了我的ipcluster_config.py文件,并向其中添加了c.MPILauncher.mpi_args=[“-machinefile”,“path_to_file/machinefile”],这一次由于一些奇怪的原因它起了作用。我可以发誓我以前有过这个,但唉…

解决了。我重新创建了我的ipcluster_config.py文件,并向其中添加了c.MPILauncher.mpi_args=[“-machinefile”,“path_to_file/machinefile”],这一次由于一些奇怪的原因它起了作用。我可以发誓我以前就有这个,但是唉

(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