单独释放CPU资源的sbatch slurm作业

时间:2018-01-19 12:30:48

标签: slurm sbatch

我有一个包含许多内核的许多节点的集群,我只想运行数千个只需要一个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执行大量任务并让他们单独释放资源?

1 个答案:

答案 0 :(得分: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,则可能是由于内存要求。