sbatch
のマニュアルページで使用されている用語は、少しわかりにくいかもしれません。したがって、私はオプションが正しく設定されていることを確認したいと思います。 Nスレッドの単一ノードで実行するタスクがあるとします。私は--nodes=1
および--ntasks=N
?
たとえば、pthreadsを使用して単一のプロセス内にN個のスレッドを作成することについて考えることに慣れています。その結果は、彼らが「コア」または「タスクごとのCPU」と呼ぶものですか? CPUとスレッドは、私の考えでは同じものではありません。
--ntasks=#
:「タスク」の数(分散並列処理で使用)。
--ntasks-per-node=#
:ノードあたりの「タスク」の数(分散並列処理で使用)。
--cpus-per-task=#
:各タスクに割り当てられたCPUの数(共有メモリ並列処理で使用)。
この質問から :すべてのノードに24コアがある場合、これらのコマンドの間に違いはありますか?
sbatch --ntasks 24 [...]
sbatch --ntasks 1 --cpus-per-task 24 [...]
回答:
はい、これら2つの提出には違いがあります。通常ntasks
はmpi
用で、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コアが必要だとします。ここにいくつかのユースケースがあります
--ntasks=16
--ntasks=16
--ntasks=16 and --ntasks-per-node=1
または--ntasks=16 and --nodes=16
--ntasks=16 --nodes=16 --exclusive
--ntasks=16 --ntasks-per-node=2
--ntasks=16 --ntasks-per-node=16
--ntasks=1 --cpus-per-task=16
--ntasks=4 --cpus-per-task=4