2016-10-11 9 views
1

私はslurm上でいくつかの並列コードを実行しようとしています。異なるプロセスでは通信する必要はありません。 naively私はpythonのslurmパッケージを使用しました。しかし、それは私が1つのノード上のCPUを使用しているようだ。slurmでのPythonのマルチプロセッシングの使用

たとえば、5つのCPUを持つ4つのノードがある場合、私は同時に5つのプロセスしか実行しません。異なるノード上で実行するようにマルチプロセスを教えるにはどうすればよいですか?

Pythonのコードは、次の

import multiprocessing 

def hello(): 
    print("Hello World") 

pool = multiprocessing.Pool() 
jobs = [] 
for j in range(len(10)): 
    p = multiprocessing.Process(target = run_rel) 
    jobs.append(p) 
    p.start() 

問題がthis oneに似ていますが、そこには詳細に解決されていないように見えます。

答えて

1

あなたの現在のコードは、5つのプロセッサ上で、起動するシングルノードで10回実行されます。今はSLURMとは何の関係もありません。

SBATCHにはSLURMへのスクリプトが必要です。その後、

#!/usr/bin/python3 

#SBATCH --output=wherever_you_want_to_store_the_output.log 
#SBATCH --partition=whatever_the_name_of_your_SLURM_partition_is 
#SBATCH -n 5 # 5 cores 

import sys 
import os 
import multiprocessing 

# Necessary to add cwd to path when script run 
# by SLURM (since it executes a copy) 
sys.path.append(os.getcwd()) 

def hello(): 
    print("Hello World") 

pool = multiprocessing.Pool() 
jobs = [] 
for j in range(len(10)): 
    p = multiprocessing.Process(target = run_rel) 
    jobs.append(p) 
    p.start() 

そしてSLURMがあるノードの一つで

sbatch my_python_script.py 

でスクリプトを実行します。

あなたは、このようなスクリプトを変更SLURMで5つのコア上でこのスクリプトを実行したい場合

しかし、これはあなたの仕事をSINGLEノードにも割り当てます。そのため、単一のノードで実行した場合と同じ速度になります。

5つのプロセスしかないときに、なぜ別のノードで実行したいのかわかりません。 1つのノードで実行するほうが速くなります。 5つ以上のコアを割り当てる場合、Pythonスクリプトの最初に、SLURMはより多くのノードを割り当てます。

+0

あなたの答えをありがとう。実際には約40プロセスを並行して実行したいので、別のノードを使用する必要があります。今晩あなたのコードを試してみます – physicsGuy

+0

私はあなたのアプローチを試みました。しかし、Pythonは上記のコードを持つ単一のノードだけを使用していますが、他のすべてのノードは未使用のままです。これの周りに簡単な方法はありますか? – physicsGuy

関連する問題