web-dev-qa-db-ja.com

HPCクラスター:SLURMバッチのCPUとスレッドの数を選択します

sbatchのマニュアルページで使用されている用語は、少しわかりにくいかもしれません。したがって、私はオプションが正しく設定されていることを確認したいと思います。 Nスレッドの単一ノードで実行するタスクがあるとします。私は--nodes=1および--ntasks=N

たとえば、pthreadsを使用して単一のプロセス内にN個のスレッドを作成することについて考えることに慣れています。その結果は、彼らが「コア」または「タスクごとのCPU」と呼ぶものですか? CPUとスレッドは、私の考えでは同じものではありません。

10
Tanash

使用している並列処理に応じて:分散メモリまたは共有メモリ

--ntasks=#:「タスク」の数(分散並列処理で使用)。

--ntasks-per-node=#:ノードあたりの「タスク」の数(分散並列処理で使用)。

--cpus-per-task=#:各タスクに割り当てられたCPUの数(共有メモリ並列処理で使用)。


この質問から :すべてのノードに24コアがある場合、これらのコマンドの間に違いはありますか?

sbatch --ntasks 24 [...]
sbatch --ntasks 1 --cpus-per-task 24 [...]

回答

はい、これら2つの提出には違いがあります。通常ntasksmpi用で、cpus-per-taskはマルチスレッド用ですが、見てみましょうあなたのコマンドで:

最初の例では、sbatch --ntasks 24 […]は24タスクのジョブを割り当てます。この場合のこれらのタスクは1 CPUのみですが、複数のノードに分割できます。したがって、複数のノードで合計24個のCPUを使用できます。

2番目の例では、sbatch --ntasks 1 --cpus-per-task 24 [...]は、1つのタスクとそのタスクに24個のCPUを持つジョブを割り当てます。したがって、1つのノードで合計24個のCPUを使用できます。

つまり、タスクを複数のノードに分割することはできません。 そのため、--cpus-per-taskを使用すると、同じノードに確実に割り当てられますが、--ntasksを使用すると、複数のノードに割り当てることができます。


別の良いQ&A :16コアが必要だとします。ここにいくつかのユースケースがあります

  • mpiを使用し、それらのコアがどこに分散されているかは気にしません:--ntasks=16
  • 16の独立したプロセスを起動したい(通信なし):--ntasks=16
  • これらのコアを個別のノードに分散させたい場合:--ntasks=16 and --ntasks-per-node=1または--ntasks=16 and --nodes=16
  • これらのコアが異なるノードに分散し、他のジョブからの干渉を受けないようにする場合:--ntasks=16 --nodes=16 --exclusive
  • 16個のプロセスを8つのノードに分散させ、ノードごとに2つのプロセスを設定する場合:--ntasks=16 --ntasks-per-node=2
  • 16個のプロセスが同じノードに留まるようにしたい:--ntasks=16 --ntasks-per-node=16
  • マルチスレッドに16コアを使用できる1つのプロセスが必要です:--ntasks=1 --cpus-per-task=16
  • マルチスレッドでそれぞれ4つのコアを使用できる4つのプロセスが必要です:--ntasks=4 --cpus-per-task=4
18
Tung