ceg*_*guo 9 python multiprocessing mpi4py
我正在使用多处理池在 Python 中运行并行模拟,并且它在具有多核的计算机中运行良好。现在我想使用多个节点在集群上执行程序。我想多处理不能应用于分布式内存。但是 mpi4py 似乎是一个不错的选择。那么这些代码最简单的 mpi4py 等价物是什么:
from multiprocessing import Pool
pool = Pool(processes=16)
pool.map(functionName,parameters_list)
Run Code Online (Sandbox Code Playgroud)
我的一个旧包是在它的基础上构建的,mpi4py它可以为作业提供功能性并行映射MPI。它不是为了速度而构建的——它是为了实现MPI从解释器到计算集群的并行映射(即不需要从命令行运行mpiexec)。本质上:
>>> from pyina.launchers import MpiPool, MpiScatter\n>>> pool = MpiPool()\n>>> jobs = MpiScatter()\n>>> def squared(x):\n... return x**2\n... \n>>> pool.map(squared, range(4))\n[0, 1, 4, 9]\n>>> jobs.map(sqaured, range(4))\n[0, 1, 4, 9]\nRun Code Online (Sandbox Code Playgroud)\n\n炫耀“工人池”策略和向工人分配工作的“分散-聚集”策略。当然,我不会将它用于如此小的工作,squared因为生成世界的开销MPI确实相当高(比设置一个高得多multiprocessing Pool)。但是,如果您有一项大型作业需要运行,就像您通常使用 运行在集群上一样MPI,那么这pyina对您来说可能是一个很大的好处。
然而,使用的真正优点pyina是它不仅可以使用 生成作业MPI,而且可以将作业生成到调度程序。 pyina理解并抽象多个调度程序的启动语法。
使用调度程序对地图的典型调用pyina如下所示:
>>> # instantiate and configure a scheduler\n>>> from pyina.schedulers import Torque\n>>> config = {\'nodes\'=\'32:ppn=4\', \'queue\':\'dedicated\', \'timelimit\':\'11:59\'}\n>>> torque = Torque(**config)\n>>> \n>>> # instantiate and configure a worker pool\n>>> from pyina.launchers import Mpi\n>>> pool = Mpi(scheduler=torque)\n>>>\n>>> # do a blocking map on the chosen function\n>>> pool.map(pow, [1,2,3,4], [5,6,7,8])\n[1, 64, 2187, 65536]\nRun Code Online (Sandbox Code Playgroud)\n\n几种常见配置可作为预配置映射使用。\n以下示例与上面的示例相同:
\n\n>>> # instantiate and configure a pre-configured worker pool\n>>> from pyina.launchers import TorqueMpiPool\n>>> config = {\'nodes\'=\'32:ppn=4\', \'queue\':\'dedicated\', \'timelimit\':\'11:59\'}\n>>> pool = TorqueMpiPool(**config)\n>>>\n>>> # do a blocking map on the chosen function\n>>> pool.map(pow, [1,2,3,4], [5,6,7,8])\n[1, 64, 2187, 65536]\nRun Code Online (Sandbox Code Playgroud)\n\npyina需要一些 TLC,因为它仍然是python2.7并且已经好几年没有发布了 xe2x80xa6 但它一直保持最新(在 github 上),否则并且能够“完成工作”对我来说在过去 10 年里在大型计算集群上运行工作 - 特别是与pathos(它提供ssh隧道和统一的接口multiprocessing以及ParallelPython地图)结合使用时。 pyina尚未利用共享内存,但确实可以很好地执行令人尴尬的功能并行计算。与调度程序的交互总体来说非常好,但对于几种失败情况可能有点粗糙 - 并且非阻塞映射需要大量工作。话虽如此,它提供了一个非常有用的接口,可以在具有MPI.
在这里获取pyina(和pathos):https: //github.com/uqfoundation
| 归档时间: |
|
| 查看次数: |
3969 次 |
| 最近记录: |