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

Posted

技术标签:

【中文标题】HPC 集群:选择 SLURM sbatch 中的 CPU 和线程数【英文标题】:HPC cluster: select the number of CPUs and threads in SLURM sbatch 【发布时间】:2018-12-10 21:22:14 【问题描述】:

sbatch 手册页中使用的术语可能有点混乱。因此,我想确保我正确设置了选项。假设我有一个任务要在具有 N 个线程的单个节点上运行。我假设我会使用--nodes=1--ntasks=N 是否正确?

我习惯于考虑使用例如 pthreads 在单个进程中创建 N 个线程。结果是他们所说的“核心”还是“每个任务的 CPU”?在我看来,CPU 和线程不是一回事。

【问题讨论】:

如果 --cpus-per-task 超过每个节点的#CPUs 会发生什么 我不认为@V.ben 就像您将OMP_NUM_THREADS 设置为大于您机器上的核心数的数字一样。它们将被简单地“超载”,但任何额外的澄清将不胜感激! 【参考方案1】:

Depending on the parallelism you are using: distributed or shared memory

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

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

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


From this question:如果每个节点都有24核,这些命令有什么区别吗?

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

Answer:(作者:Matthew Mjelde)

是的,这两个提交之间存在差异。你是对的,通常 ntasks 用于mpicpus-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 可以并且可能将它分配给多个节点。


Another good Q&A from CÉCI's support website:假设你需要 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

【讨论】:

感谢您的回复,但在您的示例sbatch --ntasks 24 […] 中,如果我选择 '--nodes=1' 会怎样?在这种情况下是否与您的第二个示例sbatch --ntasks 1 --cpus-per-task 24 [...] 相同,它将在单个节点上获得总共 24 个 CPU? 对于您的问题:您将需要 --nodes=1 --ntasks=1 --cpus-per-task=N 其中 N 是 (OpenMP) 并行线程数。请参阅此处的示例***.com/a/50654725/786542 sbatch --ntasks 1是否表示sbatch脚本中的线程数? 没有。 --cpus-per-task=N 当没有使用 OpenMP,仅使用 pthreads 时,您最后的评论(关于 OpenMP)是否适用?

以上是关于HPC 集群:选择 SLURM sbatch 中的 CPU 和线程数的主要内容,如果未能解决你的问题,请参考以下文章

Slurm无法运行多个sbatch任务

如何在节点上平均分配 slurm 任务?

SLURM sbatch 是不是会自动跨节点复制用户脚本?

解决 SLURM “sbatch:错误:批处理作业提交失败:请求的节点配置不可用”错误

基于HPC场景的集群管理系统(slurm系统初相识)

基于HPC场景的集群管理系统(slurm系统初相识)