2016-10-03 15 views
0

4 * 64コアの小さなHPCがあり、SLURMがインストールされています。PythonマルチプロセッシングによるSLURMの結果が一貫しない

ノードである:私はマルチプロセッシングとpythonで小さなスクリプトを書いたSLURMをテストする

sinfo -N -l 
Mon Oct 3 08:58:12 2016 
NODELIST NODES PARTITION  STATE CPUS S:C:T MEMORY TMP_DISK WEIGHT FEATURES REASON    
dlab-node1  1  dlab*  idle 64 2:16:2 257847  0  1 (null) none     
dlab-node2  1  dlab*  idle 64 2:16:2 257847  0  1 (null) none     
dlab-node3  1  dlab*  idle 64 2:16:2 257847  0  1 (null) none     
dlab-node4  1  dlab*  idle 64 2:16:2 257847  0  1 (null) none 

import multiprocessing 
import os 
def func(i): 
    print(n_procs) 

n_procs = int(os.environ['SLURM_JOB_CPUS_PER_NODE'].split('(')[0]) * int(os.environ['SLURM_JOB_NUM_NODES']) 
p = multiprocessing.Pool(n_procs) 
list(p.imap_unordered(func, [i for i in range(n_procs*2)])) 

私はSLURM

でそれを実行するために、次のバッチ shスクリプトを使用します
#!/bin/bash 
# 
#SBATCH -p dlab    # partition (queue) 
#SBATCH -N 2      # number of nodes 
#SBATCH -n 64      # number of cores 
#SBATCH --mem 250     # memory pool for all cores 
#SBATCH -t 0-2:00     # time (D-HH:MM) 
#SBATCH -o slurm.%N.%j.out  # STDOUT 
#SBATCH -e slurm.%N.%j.err  # STDERR 

python3 asd.py 

これは印刷されると期待します。128256回をSTDOUTファイルに追加します。私は、この複数回実行する場合

は、しかし、私はラインの非常に異なる量(彼らはすべてが正しい128が含まれている)私は144行を得た最初の実行のために

、正しいです私は256を得た二時間を(取得します)そして3回目に私は184を得る。

何が問題なの?私はSLURMの設定の中で何かを調べるべきですか、あるいはPython multiprocessingの中に何か問題がありますか? sbatch manページから

答えて

2

:このノードでジョブが使用できるプロセッサの

SLURM_JOB_CPUS_PER_NODE

カウント。 select/linearプラグインはノード全体をジョブに割り当てます。したがって、値はノード上のCPUの合計数を示します。ジョブに割り当てる個々のプロセッサ/ cons_resプラグインを選択し、強調表示されたので、変数のみここノードに割り当てられたCPU上で数を返すであろうように、この数は、ジョブ

に割り当てられ、このノード上のプロセッサの数を示しますスクリプトが実行中です。ホモジニアスな割り当てを行う場合は、指定する必要があります--ntasks-per-node=32

また、複数のノードでプロセスを生成することはありません。 here

+0

その変数からノードが1つしか得られなくても、私のpythoneコードの変数は定数1になります。その後、マルチプロセスは2つの "反復"を行い、 2つの1を印刷します。これは、一貫性のない結果の数を説明するものではありません。 –

+0

一貫性のない結果が原因である可能性があります。最初のノードに30個のprocsが割り当てられ、2番目のノード34に2個のノードが32個のprocsを取得する場合とは異なる結果が得られます –

+0

なぜですか?すべてのノードが同じことをするので、どのノードに割り当てられているかは関係ありません。 1つのノードは印刷されますが、1つのノードは印刷されません。 –

関連する問題