我有一个函数,我想在集群中的多个节点上进行评估。我已经获得了在我们的集群上使用 运行的简单示例,MPI4py
但希望找到一个 python 包,它可以让事情变得更加用户友好(比如实现在哪个节点上。我见过一些实现但没有控制每个节点上产生多少进程的包。map
multiprocessing
map
以下代码接近说明我的意思。MPI4py
但是,我没有像使用map
函数那样编写它,而是以典型的方式编写它。我这样写是因为这最终是我想要实现代码的方式(使用模拟的模块map
)并且因为我不太确定如何使用 MPI 编写它来实现我想要做的.
from numpy import *
from multiprocessing import Pool
def foo(n):
random.seed(n)
a = random.randn(1000,1000)
b = random.randn(1000,1000)
c = dot(a, b)
return c.mean()
if __name__ == '__main__':
pool = Pool(processes=4)
results = pool.map(foo, range(4))
print results
我想控制发送到每个节点的进程数的原因是其中的一些指令foo
可以是多线程的(比如dot
也可以链接到 MKL 库)。
如果我有一个由 12 台计算机组成的集群,每台计算机有 2 个内核,我只想向 12 个节点中的每一个发送一个作业,它会隐式地利用两个内核。我不想生成 24 个作业(每个内核一个),因为我担心当两个进程都尝试使用两个内核时可能出现线程抖动。我也不能只产生 12 个进程,因为我不能确定它会向每个节点发送一个,而不是向前 6 个节点发送 2 个。
首先,这应该是一个主要问题吗?运行 24 个进程而不是 12 个进程会对性能产生多大影响?
如果它会有所作为,是否有一个 python 包可以覆盖在上面MPI4py
并做我正在寻找的东西?