HPC集群:在SLURM sbatch中选择CPU和线程数量

46

sbatch 手册中使用的术语可能有点令人困惑。因此,我想确保我正确设置了选项。假设我有一个任务需要在单个节点上运行,并且需要 N 个线程。 我是否正确地假设我将使用 --nodes=1--ntasks=N

我习惯于考虑在单个进程中使用 pthreads 创建 N 个线程。那他们所称的“核心”或“每个任务的 CPU 数”是否就是这种结果?在我看来,CPU 和线程不是同一回事。


如果 --cpus-per-task 超过了每个节点的 #CPUs,会发生什么? - vbenara
我猜想 @V.ben 所指的是如果你将 OMP_NUM_THREADS 设置为大于机器核心数的数字,它们只会被“超载”,但任何其他的澄清都会非常欣赏! - andreagalle
1个回答

89

根据您使用的并行性:分布式或共享内存

--ntasks=# : “任务”数量(与分布式并行性一起使用)。

--ntasks-per-node=# :每个节点的“任务”数(与分布式并行性一起使用)。

--cpus-per-task=# :分配给每个任务的CPU数量(与共享内存并行性一起使用)。


从这个问题看:如果每个节点有24个核心,这些命令之间有什么区别吗?

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

答案: (由Matthew Mjelde提供)

是的,这两种提交方式有区别。你正确指出通常 ntasks 是用于 mpi,而 cpus-per-task 则是用于多线程,但让我们看看你的命令:

对于你的第一个例子,sbatch --ntasks 24 […] 将分配一个有24个任务的工作。在这种情况下,这些任务仅使用1个CPU,但可能跨多个节点分割。因此,您将在多个节点上获得总共24个CPU。

对于你的第二个例子,sbatch --ntasks 1 --cpus-per-task 24 [...] 将分配一个只有1个任务但该任务占用24个CPU的作业。因此,您将在单个节点上获得总共24个CPU。

换句话说,一个任务不能被分割到多个节点上。因此,使用--cpus-per-task 将确保该任务被分配到同一节点,而使用--ntasks 可以并且可能将其分配到多个节点上。


CÉCI支持网站上的另一个好问题和答案:假设您需要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个节点上,每个节点有两个进程:--ntasks=16 --ntasks-per-node=2
  • 您希望16个进程保留在同一节点上:--ntasks=16 --ntasks-per-node=16
  • 您希望一个进程可以使用16个核心进行多线程处理:--ntasks=1 --cpus-per-task=16
  • 您希望4个进程可以每个进程使用4个核心进行多线程处理:--ntasks=4 --cpus-per-task=4

2
谢谢您的回复,但是在你的例子sbatch --ntasks 24 [...]中,如果我选择了 --nodes=1 呢?这种情况下是否与您的第二个例子 sbatch --ntasks 1 --cpus-per-task 24 […] 相同,从而在单个节点上获得总共24个CPU? - Tanash
2
针对您的问题:您需要使用 --nodes=1 --ntasks=1 --cpus-per-task=N,其中 N 是(OpenMP)并行线程的数量。请参见此处的示例 https://stackoverflow.com/a/50654725/786542 - Tung
sbatch --ntasks 1 表示 sbatch 脚本中线程的数量吗? - Tanash
1
不行。--cpus-per-task=N 是不可以的。 - Tung
你最后一条评论(有关 OpenMP 的)是否适用于没有使用 OpenMP,只有 pthreads 的情况? - Tanash
#SBATCH --nodes=N (N 越高越好) 对这个解释有任何影响吗? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接