それぞれ 6 つのコアを持つ 4 ノードの Slurm クラスターがあります。次のように、Multiprocessing を使用して、テスト用の Python スクリプトを送信します (実行中のノードのホスト名を出力するプロセスを生成します)。
def print_something():
print gethostname()
# number of processes allowed to run on the cluster at a given time
n_procs = int(environ['SLURM_JOB_CPUS_PER_NODE']) * int(environ['SLURM_JOB_NUM_NODES'])
# tell Python how many processes can run at a time
pool = Pool(n_procs)
# spawn an arbitrary number of processes
for i in range(200):
pool.apply_async(print_something)
pool.close()
pool.join()
これを、nodes=4 および ntasks-per-node=6 を指定する SBATCH スクリプトで送信しましたが、Python スクリプトが 4*6 回実行されることがわかりました。ジョブでスクリプトを 1 回実行し、Slurm がプロセス生成をクラスター全体に分散できるようにしたいだけです。
私は明らかにここで何かを理解していません...?