调度比 MaxArraySize 更多的作业
Scheduling more jobs than MaxArraySize
假设我对 运行 进行了 6233 次模拟。命令生成并存储在一个文件中,每行一个。我想使用 Slurm 来安排和 运行 这些命令。但是,MaxArraySize 限制为 2000。所以我不能使用一个作业数组来安排所有作业。
给出了一个解决方案 ,我们创建了四个单独的作业并使用算术索引进入文件,最后一个作业的任务数量较少 运行 (233)。
- 是否可以使用一个 sbatch 脚本和一个作业 ID 来做到这一点?
- 我在使用作业数组时设置了 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 限制。
假设我对 运行 进行了 6233 次模拟。命令生成并存储在一个文件中,每行一个。我想使用 Slurm 来安排和 运行 这些命令。但是,MaxArraySize 限制为 2000。所以我不能使用一个作业数组来安排所有作业。
给出了一个解决方案
- 是否可以使用一个 sbatch 脚本和一个作业 ID 来做到这一点?
- 我在使用作业数组时设置了 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 限制。