2017-09-29 18 views
1

大まかに似たような結果をもたらす3種類の異なるsbatchスクリプトがあります。4つの並列ジョブを実行する別の方法についての質問

(Iスクリプトが異なる部分のみを示す図である。##プレフィックスがsbatchにスクリプトを送信した出力を示す)

スクリプト0

#SBATCH -n 4 


srun -l hostname -s 


## ==> slurm-7613732.out <== 
## 0: node-73 
## 1: node-73 
## 2: node-73 
## 3: node-73 

スクリプト1

#SBATCH -n 1 
#SBATCH -a 1-4 

srun hostname -s 


## ==> slurm-7613733_1.out <== 
## node-72 
## 
## ==> slurm-7613733_2.out <== 
## node-73 
## 
## ==> slurm-7613733_3.out <== 
## node-72 
## 
## ==> slurm-7613733_4.out <== 
## node-73 

スクリプト2

#SBATCH -N 4 


srun -l -n 4 hostname -s 

## ==> slurm-7613738.out <== 
## 0: node-74 
## 2: node-76 
## 1: node-75 
## 3: node-77 

Q:なぜ、他のアプローチよりも1つのアプローチを選択するのでしょうか?

は(私はスクリプト0によって生成されたジョブがすべて同じノードで実行されていたことがわかり、これは偶然の一致である場合、私はわかりません。)また


、スクリプト2(の以下のバリアント唯一の違い)-N 2代わりに-N 4失敗である:

スクリプト3

#SBATCH -N 2 


srun -l -n 4 hostname -s 


## ==> slurm-7614825.out <== 
## srun: error: Unable to create job step: More processors requested than permitted 

スクリプト2の次の変異のため同上(唯一の違いこれとスクリプト3は、ここでsrunもフラグ-c 2を持っているということである)の間:

スクリプト4

#SBATCH -N 2 


srun -l -n 4 -c 2 hostname -s 


## ==> slurm-7614827.out <== 
## srun: error: Unable to create job step: More processors requested than permitted 

Qsの:が間違っている、私が原因間違った構文にスクリプト3とスクリプト4で取得エラーですセマンティクス、またはサイト固有の設定? IOW、これらのスクリプトには本質的に何かがありますか(SLURMのいずれのインスタンスでも失敗する)、またはSLURMの特定のインスタンスによって課せられた制限違反によるエラーのみです。後者の場合は、エラーの原因となるconfigsをどのように特定できますか?

答えて

1

Q:他のものよりもこのようなアプローチを選択するのはなぜですか?

スクリプト0:あなたはそれらのタスクは、ノードに割り当てられるべきかについて何ら他の仕様で、単一のジョブに同時に割り当てられる4つのタスクを、要求します。典型的な使用:MPI program

スクリプト1:それぞれ1つのタスクで4つのジョブを要求します。ジョブは、独立してスケジュールされます。典型的な使用:Embarrassingly parallelジョブ。

スクリプト2:ノードあたり4つのノードを要求します。 4つの異なるノードに割り当てられるタスクを要求する点を除いて、スクリプト0と似ています。典型的な使用法:たとえばローカルディスク上に多くのIOを持つMPIプログラム。

すべてのジョブが同じ最初のノードに割り当てられたという事実は、Slurmが常に同じ順序でノードを割り当てているためで、おそらくすべてのテストを次々と実行するためです1つはただ解放されました。

スクリプト3:ノードあたり2つのノードを暗黙的に要求するので、2つのタスクが割り当てられますが、srunで4つのタスクを使用しようとします。あなたは、ノードごと

#SBATCH -N 2 
#SBATCH --tasks-per-node 2 

srun -l -n 4 hostname -s 

2要求に2つのタスクがそれを変更する必要があり、または

#SBATCH -N 2 
#SBATCH -n 4 

srun -l -n 4 hostname -s 

は、ノード間でタスクの分布に追加の制約で、4つのタスクを要求します。

スクリプト4:1ノードあたり1つのタスクを暗黙的に指定し、暗黙的にタスクあたり1つのCPUを要求するため、2つのCPUが割り当てられますが、4つのタスクをsrun、それぞれ2CPUS、合計8CPです。提出スクリプトで、あなたは#SBATCHディレクティブでリソースを要求し、あなたがより以降の呼び出しよりも多くのリソースを使用することはできません:あなたは

#SBATCH -N 2 
#SBATCH --tasks-per-node 2 
#SBATCH --cpus-per-task 2  

srun -l -n 4 -c 2 hostname -s 

または、

#SBATCH -N 2 
#SBATCH -n 4 
#SBATCH --cpus-per-task 2  

srun -l -n 4 -c 2 hostname -s 

一番下の行は、それを変更する必要がありますsrunになります。

関連する問題