Python 使用多处理模块进行集群计算

Python 使用多处理模块进行集群计算,python,parallel-processing,multiprocessing,Python,Parallel Processing,Multiprocessing,我对使用计算机集群运行Python程序感兴趣。我过去一直在使用Python MPI接口,但由于编译/安装这些接口的困难,我更喜欢使用内置模块的解决方案,例如Python的模块 我真正想做的是设置一个跨整个计算机集群的multiprocessing.Pool实例,并运行Pool.map(…)。这是可能/容易做到的事情吗 如果这是不可能的,我希望至少能够从一个中心脚本在任何节点上启动进程实例,每个节点都有不同的参数。在过去,我曾经非常成功地做到这一点。如果您打开移动代码,它将自动通过网络发送节点还没

我对使用计算机集群运行Python程序感兴趣。我过去一直在使用Python MPI接口,但由于编译/安装这些接口的困难,我更喜欢使用内置模块的解决方案,例如Python的模块

我真正想做的是设置一个跨整个计算机集群的
multiprocessing.Pool
实例,并运行
Pool.map(…)
。这是可能/容易做到的事情吗


如果这是不可能的,我希望至少能够从一个中心脚本在任何节点上启动
进程
实例,每个节点都有不同的参数。

在过去,我曾经非常成功地做到这一点。如果您打开移动代码,它将自动通过网络发送节点还没有的所需模块。非常漂亮。

如果集群计算指的是分布式内存系统(多节点,而不是SMP),那么Python的多处理可能不是一个合适的选择。它可以生成多个进程,但它们仍将绑定在单个节点中

您需要的是一个框架,该框架处理跨多个节点的进程剥离,并为处理器之间的通信提供一种机制。(与MPI的功能差不多)

有关有助于群集计算的框架列表,请参见上的页面

从列表中,和看起来像是明智的选择,尽管我个人无法保证有任何选择,因为我没有任何使用它们的经验(我主要使用MPI)

如果易于安装/使用很重要,我将从探索
jug
开始。它是、和外观。

我很幸运地将其用作单台或多台计算机使用的多处理的替代方案,并获得了集群作业提交以及许多其他功能的好处,如嵌套映射和使用map()所需的最小代码更改


在Github上提供。A显示了实现是多么简单

< P>如果您愿意安装一个开源包,您应该考虑一下,Python集群框架中的哪一个可能是最接近单线程Python体验的选项。它允许您并行化函数(作为任务)和有状态类(作为参与者),并自动完成所有数据传送和序列化以及异常消息传播。它还允许与普通Python类似的灵活性(可以传递参与者,任务可以调用其他任务,可以存在任意数据依赖关系,等等)。更多关于这方面的信息,请参阅

例如,以下是在Ray中执行多处理映射示例的方法:

import ray
ray.init()

@ray.remote
def mapping_function(input):
    return input + 1

results = ray.get([mapping_function.remote(i) for i in range(100)])
该API与Python的多处理API稍有不同,但应该更易于使用。有一个介绍如何处理数据依赖关系和参与者等的演练

您可以使用“pip install Ray”安装Ray,然后在单个节点上执行上述代码,或者也可以很容易地设置集群,请参见和


免责声明:我是Ray开发者之一。

也许可以试试JUG:我写了JUG(谢谢你的好话)。我要补充的是,该模块也得到了很好的支持。如果你发现任何bug,它们会很快被修复(Python多处理管理器可以在多个系统之间进行对话,而不仅仅是在一个系统内进行对话。请参阅:我现在必须建议上面PM的Ray答案。Ray功能非常强大,并提供了许多功能和扩展,例如共享内存对象。我必须支持Ray。我最终从scoop切换到了scoop,而且使用复杂的p很容易做到这一点但是ray提供的特性非常惊人(共享内存对象、将worker“传递给”worker等)。A显示了客户端的一行版本的ray(比您的代码稍微简单):