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

sbatch slurm jobs which release CPU resources individually

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

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

srun ./my_experiment

我用 sbatch 开始其中几个,它们似乎排得很好。

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

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

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

Unfortunately they seem to hog the resources of all 100 CPUs even if 99 experiments already ended.

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

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

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

srun ./my_experiment

你最终会得到 100 个作业,一个一个独立地开始和结束,但你可以用一个命令将其终止。

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

Secondly they don't seem to share nodes with each other. Even though the nodes have +40 cores.

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