调度比 MaxArraySize 更多的作业

Scheduling more jobs than MaxArraySize

假设我对 运行 进行了 6233 次模拟。命令生成并存储在一个文件中,每行一个。我想使用 Slurm 来安排和 运行 这些命令。但是,MaxArraySize 限制为 2000。所以我不能使用一个作业数组来安排所有作业。

给出了一个解决方案 ,我们创建了四个单独的作业并使用算术索引进入文件,最后一个作业的任务数量较少 运行 (233)。

  1. 是否可以使用一个 sbatch 脚本和一个作业 ID 来做到这一点?
  2. 我在使用作业数组时设置了 ntasks=1。在这种情况下,更大的 ntasks 有帮助吗?

更新: 根据 Damien 的解决方案和给出的示例 here,我最终在我的 bash 脚本中添加了以下行:

curID=$(( ${SLURM_ARRAY_TASK_ID} * ${SLURM_NTASKS} + ${SLURM_PROCID} ))

同样可以使用 Python(在参考页面中显示)来完成。唯一的区别是环境变量应该导入到脚本中。

Is it possible to do this using one sbatch script with one job ID?

没有。该解决方案将为您提供多个作业 ID

I set ntasks=1 when using job arrays. Do larger ntasks help in such situations?

是的,这是您可以利用的一个因素。

数组中的每个作业都可以生成多个任务 (--ntasks=...)。在这种情况下,命令文件中的行号必须从 $SLURM_ARRAY_TASK_ID$SLURM_PROCID 计算得出,并且程序必须从 srun 开始。数组的作业成员中的每个任务将 运行 并行。作业的大小取决于您有权访问的 cluster/partition/qos 上定义的 MaxJobsize 限制。

另一种选择是在数组的每个作业中链接任务,使用 Bash 循环 (for i in $seq(...) ; do ...; done)。在这种情况下,命令文件中的行号必须根据 $SLURM_ARRAY_TASK_ID$i 计算得出。数组的作业成员中的每个任务将 运行 串行。作业的大小取决于您有权访问的 cluster/partition/qos 上定义的 MaxWall 限制。