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
用于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
可以并且可能将它分配给多个节点。
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 和线程数的主要内容,如果未能解决你的问题,请参考以下文章