使用multiprocessing模块进行集群计算

62 投票
4 回答
38749 浏览
提问于 2025-04-16 12:55

我想在一个计算机集群上运行一个Python程序。之前我用过Python的MPI接口,但因为安装和编译这些东西有点麻烦,所以我更希望能用一些内置的模块,比如Python的multiprocessing模块。

我真正想做的是设置一个multiprocessing.Pool实例,让它可以跨越整个计算机集群,然后运行Pool.map(...)。这样做可行吗?简单吗?

如果这样做不行,我至少希望能从一个中心脚本出发,在集群中的每个节点上启动Process实例,并且为每个节点设置不同的参数。

4 个回答

2

我发现使用SCOOP作为多进程的替代方案非常不错,无论是在单台电脑上还是多台电脑上都能用,而且它还可以让你在集群中提交任务,除此之外还有很多其他功能,比如嵌套映射和最小的代码改动就能让你使用map()。

这个源代码可以在Github上找到。还有一个快速示例,展示了实现起来是多么简单!

14

以前我用过Pyro来做到这一点,效果非常好。如果你开启了移动代码的功能,它会自动把节点所需的模块发送过去,前提是这些模块节点还没有。这真是个很酷的功能。

52

如果你说的集群计算是指分布式内存系统(也就是多个节点,而不是单一的对称多处理器系统),那么Python的多进程模块可能不太适合。虽然它可以启动多个进程,但这些进程还是会局限在同一个节点上。

你需要的是一个框架,它可以在多个节点之间启动进程,并提供处理器之间的通信机制。这基本上就是MPI所做的事情。

你可以查看Python维基上的并行处理页面,里面有一些可以帮助你进行集群计算的框架列表。

在这些框架中,ppjugpyrocelery看起来都是不错的选择,虽然我个人没有使用过这些框架(我主要使用MPI)。

如果你觉得安装和使用的简单性很重要,我建议你先看看jug。它安装起来很简单支持常见的批处理集群系统,而且文档也写得很好

撰写回答