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

时间:2016-03-20 01:16:03

标签: ipython cluster-computing mpich ipython-parallel mpi4py

这是线程ipython-with-mpi-clustering-using-machinefile的延续。对于问题可能会更加集中并且希望更清楚。

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

我能够在一个节点上运行ipcluster start --profile=mpi -n 4(在本例中为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是集群中的相应节点):

(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

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

1 个答案:

答案 0 :(得分:0)

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