带有Machinefile的IPython MPI

时间:2015-06-10 23:11:06

标签: ipython mpi distributed-computing

我想在分布式计算中使用IPython的MPI功能。也就是说我希望MPI能够运行各种机器文件,这样我就可以添加多台机器。

编辑:

我忘了包含我的配置。

配置

~/.ipython/profile_default/ipcluster_config.py
# The command line arguments to pass to mpiexec.                                
c.MPILauncher.mpi_args = ["-machinefile ~/.ipython/profile_default/machinefile"]


# The mpiexec command to use in starting the process.                           
c.MPILauncher.mpi_cmd = ['mpiexec']

Bash Execution

$ dacluster start -n20
2015-06-10 16:16:46.661 [IPClusterStart] Starting ipcluster with [daemon=False]
2015-06-10 16:16:46.661 [IPClusterStart] Creating pid file: /home/aidan/.ipython/profile_default/pid/ipcluster.pid
2015-06-10 16:16:46.662 [IPClusterStart] Starting Controller with MPI
2015-06-10 16:16:46.700 [IPClusterStart] ERROR | IPython cluster: stopping
2015-06-10 16:16:47.667 [IPClusterStart] Starting 20 Engines with MPIEngineSetLauncher
2015-06-10 16:16:49.701 [IPClusterStart] Removing pid file: /home/aidan/.ipython/profile_default/pid/ipcluster.pid

Machinefile

~/.ipython/profile_default/machinefile

localhost slots=8
aidan-slave slots=16

我可能会提到它在我运行

时有效
mpiexec -machinefile machinefile mpi_hello

该执行的输出包括主机名,所以我确信它实际上正在分发。另外,我在顶部观看。

谢谢,

1 个答案:

答案 0 :(得分:0)

我猜我太早了。问题出在下面一行

c.MPILauncher.mpi_args = ["-machinefile ~/.ipython/profile_default/machinefile"]

它应该在具有绝对路径的空格上分割

c.MPILauncher.mpi_args = ["-machinefile", "/home/aidan/.ipython/profile_default/machinefile"]

我希望这可以帮助别人。请注意,这只解决了BASH输出中的问题。使用MPI与远程服务器(即aidan-slave)建立连接。如果启动dacluster,那么我会在顶部看到一堆python会话启动,这是远程运行的IPython会话的症状。

不幸的是,DistArray的例子,至少是pi_montecarlo,无限期地挂起。我回到问题的根源,发现在distarray的globalapi模块的context.py文件中挂在第736行的行。

def _execute(self, lines, targets):
    return self.view.execute(lines, targets=targets, block=True)

我认为这是MPI连接断开或坏的一个症状,因为该线似乎想要对所有从属进程执行命令。我不知道如何解决它。