IPython 带有机器文件的 MPI
IPython MPI with a Machinefile
我想将 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 执行
$ 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
机器文件
~/.ipython/profile_default/machinefile
localhost slots=8
aidan-slave slots=16
我可能会提到它在我 运行
时有效
mpiexec -machinefile machinefile mpi_hello
并且该执行的输出包括主机名,所以我确信它实际上是在分发。另外我在上面看。
谢谢,
我想我问得太早了。问题出在下一行
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 连接断开或损坏的症状,因为该行似乎想要在所有从属进程上执行命令。我不知道如何解决它。
我想将 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 执行
$ 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
机器文件
~/.ipython/profile_default/machinefile
localhost slots=8
aidan-slave slots=16
我可能会提到它在我 运行
时有效mpiexec -machinefile machinefile mpi_hello
并且该执行的输出包括主机名,所以我确信它实际上是在分发。另外我在上面看。
谢谢,
我想我问得太早了。问题出在下一行
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 连接断开或损坏的症状,因为该行似乎想要在所有从属进程上执行命令。我不知道如何解决它。