クラスター内の複数のノードで評価したい関数があります。を使用してクラスターで実行する簡単な例を取得しましMPI4py
たが、物事をもう少しユーザーフレンドリーにする (のmap
機能を実装するなどmultiprocessing
) だけでなく、生成されるプロセスの数をもう少し制御できる python パッケージを見つけたいと思っていました。どのノードで。実装するパッケージはいくつか見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 ライブラリーにもリンクされるように)。
それぞれ 2 つのコアを持つ 12 台のコンピューターのクラスターがある場合、12 のノードのそれぞれに 1 つのジョブを送信するだけで、暗黙的に両方のコアを利用できます。両方のプロセスが両方のコアを使用しようとすると、スレッド スラッシングの可能性が心配なので、24 個のジョブ (コアごとに 1 つ) を生成したくありません。また、最初の 6 つのノードに 2 つではなく、各ノードに 1 つを送信するかどうかわからないため、12 のプロセスを生成することもできません。
まず、これは大きな懸念事項でしょうか。12 プロセスではなく 24 プロセスを実行すると、パフォーマンスにどの程度の影響がありますか?
それが違いを生む場合、上にオーバーレイしMPI4py
て探していることを実行するpythonパッケージはありますか?