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



这是线程ipython-with-mpi-clustering-using-machinefile的延续。它稍微更集中一些,希望更清楚地说明问题可能是什么。

我有 3 个节点作为集群运行,使用 mpich/mpi4py、一个机器文件和一个 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看到所有正在运行的节点上的所有引擎;iow,以实际将负载分布在不同的节点上。

在它自己上运行 mpi 工作正常(头、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"],这次它工作了 - 出于某种奇怪的原因。我可以发誓我以前有这个,但唉...