1

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

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

srun ./my_experiment

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

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

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

是否有可能处理sbatch一堆任务并让它们单独释放资源?

4

1 回答 1

1

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

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

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

#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,则可能是由于内存要求。

于 2018-01-23T12:47:19.277 回答