3

それぞれ 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 がプロセス生成をクラスター全体に分散できるようにしたいだけです。

私は明らかにここで何かを理解していません...?

4

1 に答える 1

0

わかりました、私はそれを理解しました。

SBATCH と SRUN の関係をよりよく理解する必要がありました。主に、SBATCH は、SRUN 呼び出しのグローバル ジョブ コンテナーとして機能します。

ここでの最大の要因は、Python マルチプロセッシングからサブプロセスに変更したことです。このようにして、SBATCH は Python スクリプトを実行し、別の Python スクリプトの SRUN サブプロセスを動的に呼び出して、クラスター リソースを適切に割り当てることができます。

于 2015-09-17T00:03:07.217 に答える