【问题标题】:sbatch slurm jobs which release CPU resources individuallysbatch slurm 作业,分别释放 CPU 资源
【发布时间】:2018-01-19 12:30:48
【问题描述】:

我有一个由许多节点组成的集群,其中包含许多内核,我只想运行数千个作业,每个作业只需要一个 CPU。最好使用sbatch。在阅读了几个小时的文档后,我仍然遇到了问题。我目前的设置是:

#SBATCH --nodes=4
#SBATCH --tasks-per-node=25
#SBATCH --distribution=block

srun ./my_experiment

我用sbatch开始了其中的几个,他们似乎很好地排队。

此脚本启动 100 个 my_experiment 实例,这是预期的。不幸的是,即使 99 个实验已经结束,它们似乎也占用了所有 100 个 CPU 的资源。我该如何缓解?

其次,它们似乎并不彼此共享节点。即使节点有 +40 个核心。

甚至可以sbatch一堆任务并让它们单独释放资源吗?

【问题讨论】:

  • Slurm 如何配置 w.r.t 节点共享? (scontrol show config | grep select 的输出是什么?)
  • 编辑错误,我修复了。输出为SelectType = select/cons_res。这是一个大型研究集群,我没有管理员权限

标签: slurm sbatch


【解决方案1】:

不幸的是,它们似乎占用了所有 100 个 CPU 的资源,即使 99 个实验已经结束。

这是因为您创建了一个作业,跨越至少 4 个节点,每个节点请求 25 个 CPU 来执行 25 个任务。作业在所有任务结束时释放它们的分配。

假设您的流程之间没有通信,您的工作流程似乎更适合job arrays。使用作业数组的想法是创建许多独立但易于管理的作业。

#SBATCH --ntasks=1
#SBATCH --array=1-100

srun ./my_experiment

你最终会得到 100 个工作,它们彼此独立地开始和结束,但是你可以用一个命令来杀死它们。

如果您的程序my_experiment 使用了SLURM_PROC_ID 环境变量,您可以将其替换为SLURM_ARRAY_TASK_ID

其次,它们似乎并不彼此共享节点。虽然 节点有 +40 个核心。

您明确要求每个作业的每个节点有 25 个核心,因此如果核心数不是至少 50 个,Slurm 不能将两个这样的作业放在同一个节点上。如果核心数大于 50,则可能是由于内存需求。

【讨论】:

  • 完全使用您的脚本仍然只使用每个任务的一个节点。因此,一次只执行与我有节点一样多的任务。 (没有我有 CPU 那么多的任务)。这是管理员配置错误的结果吗?如果是,可能是什么设置导致的?
猜你喜欢
  • 2021-08-27
  • 1970-01-01
  • 2016-05-18
  • 1970-01-01
  • 2018-12-10
  • 2019-11-04
  • 2019-05-25
  • 2020-07-31
  • 1970-01-01
相关资源
最近更新 更多