如何解决处理工作提交限制
我正在使用--array运行slurm作业数组,我想运行约2000个任务/数组项。但是,这超出了群集一次提交的约500个作业的限制。
是否有任何技巧/最佳实践来分解这些内容?我想一次提交所有内容,但仍然可以将数组ID参数1-2000传递给我的程序。我认为诸如等待提交数组片段之类的方法可能会有所帮助,但目前还不确定如何执行此操作。
解决方法
如果限制是数组大小:
您将不得不将阵列分成几个作业阵列。 --array
参数接受格式为<START>-<END>
的值,因此您可以提交四个作业:
sbatch --array=1-500 ...
sbatch --array=501-1000 ...
sbatch --array=1001-1500 ...
sbatch --array=1501-200 ...
这样,您将绕过500个限制,并且仍将SLURM_ARRAY_TASK_ID
的范围保持在1到2000之间。
为使事情轻松一点,您可以将所有内容写在这样的一行中:
paste -d- <(seq 1 500 2000) <(seq 500 500 2000) | xargs -I {} sbatch --array={} ...
如果限制是提交的作业数:
然后一个选择是让数组的最后一个作业提交以下块。
#!/bin/bash
#SBATCH ...
...
...
if [[ $((SLURM_ARRAY_TASK_ID % 500)) == 0 ]] ; then
sbatch --array=$((SLURM_ARRAY_TASK_ID+1))-$((SLURM_ARRAY_TASK_ID+500)) $0
fi
请注意,理想情况下,阵列中最后一个正在运行的作业应提交该作业,它可能是也可能不是具有最高TASK ID的作业,但这在许多情况下都可以用于所有实际目的。
另一种选择是设置一个cron作业以监视队列并在可能的情况下提交每个块,或者使用workflow manager来满足您的需求。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。