这是线程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
所以,至少我知道这不是问题。
答案 0 :(得分:0)
解决。我重新创建了我的ipcluster_config.py文件,并将c.MPILauncher.mpi_args = [“ - machinefile”,“path_to_file / machinefile”]添加到它,这次它起作用 - 出于某些奇怪的原因。我可以发誓我之前已经有了这个,但是唉......