gpt4 book ai didi

python - 使多处理池适应 mpi4py

转载 作者:太空狗 更新时间:2023-10-30 02:45:26 26 4
gpt4 key购买 nike

我正在使用多处理池在 Python 中运行并行化模拟,它在多核计算机中运行良好。现在我想使用多个节点在集群上执行程序。我想多处理不能应用于分布式内存。但是 mpi4py 似乎是一个不错的选择。那么这些代码最简单的 mpi4py 等价物是什么:

from multiprocessing import Pool

pool = Pool(processes=16)

pool.map(functionName,parameters_list)

最佳答案

我的一个旧包是建立在 mpi4py 上的为 MPI 启用功能并行映射职位。它不是为了速度而构建的——它是为了启用 MPI 而构建的。从解释器并行映射到计算集群(即不需要从命令行从 mpiexec 运行)。本质上:

>>> from pyina.launchers import MpiPool, MpiScatter
>>> pool = MpiPool()
>>> jobs = MpiScatter()
>>> def squared(x):
... return x**2
...
>>> pool.map(squared, range(4))
[0, 1, 4, 9]
>>> jobs.map(sqaured, range(4))
[0, 1, 4, 9]

展示了“ worker 池”策略和向 worker 分配工作的“分散-聚集”策略。当然,我不会将它用于像 squared 这样的小工作。因为生成 MPI 的开销world 确实很高(比设置 multiprocessing Pool 高很多)。但是,如果您要运行大型作业,就像您通常使用 MPI 在集群上运行一样, 然后 pyina可能对您大有裨益。

但是,使用 pyina 的真正优势是它不仅可以用 MPI 产生工作,但它可以为调度程序生成作业。 pyina理解并抽象出多个调度程序的启动语法。

pyina 的典型调用使用调度程序的映射是这样的:

>>> # instantiate and configure a scheduler
>>> from pyina.schedulers import Torque
>>> config = {'nodes'='32:ppn=4', 'queue':'dedicated', 'timelimit':'11:59'}
>>> torque = Torque(**config)
>>>
>>> # instantiate and configure a worker pool
>>> from pyina.launchers import Mpi
>>> pool = Mpi(scheduler=torque)
>>>
>>> # do a blocking map on the chosen function
>>> pool.map(pow, [1,2,3,4], [5,6,7,8])
[1, 64, 2187, 65536]

几种常用配置可作为预配置 map 使用。以下与上述示例相同:

>>> # instantiate and configure a pre-configured worker pool
>>> from pyina.launchers import TorqueMpiPool
>>> config = {'nodes'='32:ppn=4', 'queue':'dedicated', 'timelimit':'11:59'}
>>> pool = TorqueMpiPool(**config)
>>>
>>> # do a blocking map on the chosen function
>>> pool.map(pow, [1,2,3,4], [5,6,7,8])
[1, 64, 2187, 65536]

pyina需要一些 TLC,因为它仍然是 python2.7而且它已经好几年没有发布了……但它一直保持最新状态(在 github 上),并且能够在过去 10 年中为我在大型计算集群上运行作业“完成工作” -- 特别是与 pathos 结合使用时(它为 sshmultiprocessing 映射提供 ParallelPython 隧道和统一接口(interface))。 pyina还没有利用共享内存,但确实很好地完成了令人尴尬的功能性并行计算。与调度程序的交互总体上非常好,但在一些失败案例的边缘可能有点粗糙——非阻塞映射需要大量工作。话虽如此,它提供了一个非常有用的界面来在集群上运行令人尴尬的并行作业 MPI .

获取pyina (和 pathos )在这里:https://github.com/uqfoundation

关于python - 使多处理池适应 mpi4py,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24670333/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com