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

Accessing multiple nodes in a mpi cluster using ipython

这是话题的延续 。它稍微更集中一些,希望更清楚问题可能是什么。

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

我能够 运行 ipcluster start --profile=mpi -n 4 在一个节点上(在这种情况下,worker2)并通过另一个节点(在这种情况下 worker1)运行 ipython --profile=mpi 并使用以下命令在 运行ning 上列出引擎 运行ning:

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),那么当我如上所述查询它们时,这些是唯一显示的 engine/nodes,即使第一个引擎集仍在 运行ning 在另一个节点上:

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

我的问题是,如何让 ipython 看到所有 运行ning 节点上的所有引擎; iow,实际上是在不同的节点之间分配负载。

运行 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"] 并且这次它起作用了 - 出于某种奇怪的原因。我可以发誓我以前有过这个,但是唉...