我有一個函數可以在集羣中的多個節點上進行評估。我已經使用MPI4py
獲得了簡單的示例,可以在我們的集羣上運行,但希望找到一個使用戶更友好一點的python包(例如實現的map
功能),但是還可以更多地控制多少進程產生並在哪個節點上。我見過一些實現map
的軟件包,但沒有任何控制每個節點上產生多少進程的軟件包。使用mpi4py發送進程到不同的節點
下面的代碼接近說明我的意思。但是,我沒有用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臺計算機的集羣,每個集羣有兩個核心,我想只發送一個作業到12個節點中的每一個,它將隱含地利用兩個核心。我不想產生24個作業(每個核心一個作業),因爲當兩個進程都嘗試使用兩個核心時,我擔心可能發生線程顛簸。我也不能只產生12個進程,因爲我不能確定它會發送一個到每個節點,而不是2到前6個節點。
首先,這應該是一個主要關注點嗎?運行24個進程而不是12個進程會對性能產生多大影響?
如果它會有所作爲,是否有一個python包將覆蓋MPI4py
頂部,並做我在找什麼?