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