SLURM作业数组中为不同作业设置不同时长的方法咨询
SLURM数组作业分批次指定时长以提升调度优先级
可以通过SLURM的数组分片功能,为不同批次的数组任务指定不同的时间限制,让调度器更精准地分配资源,进而提升作业的调度优先级。
实现方法
有两种常用的实现方式:
1. 编写两个独立的作业脚本
分别针对1-40和41-80的任务编写脚本,设置对应时长:
针对1-40任务的脚本(ex_job_short.sh)
#!/bin/bash #SBATCH --account=exacct #SBATCH --time=01:00:00 #SBATCH --job-name="ex_job_1-40" #SBATCH --array=1-40 #SBATCH --cpus-per-task=40 #SBATCH --mem-per-cpu=4G #SBATCH --output=%x.%a.out cd /ex_directory srun Rscript ex_script.R
针对41-80任务的脚本(ex_job_long.sh)
#!/bin/bash #SBATCH --account=exacct #SBATCH --time=02:00:00 #SBATCH --job-name="ex_job_41-80" #SBATCH --array=41-80 #SBATCH --cpus-per-task=40 #SBATCH --mem-per-cpu=4G #SBATCH --output=%x.%a.out cd /ex_directory srun Rscript ex_script.R
分别提交两个脚本:
sbatch ex_job_short.sh sbatch ex_job_long.sh
2. 用同一个脚本,通过命令行参数覆盖配置
如果不想编写多个脚本,可直接在sbatch命令中覆盖脚本里的--time和--array参数:
提交1-40的任务(1小时时长):
sbatch --time=01:00:00 --array=1-40 --job-name="ex_job_1-40" your_original_script.sh
提交41-80的任务(2小时时长):
sbatch --time=02:00:00 --array=41-80 --job-name="ex_job_41-80" your_original_script.sh
优先级提升的原因
SLURM调度器通常优先调度资源需求更紧凑的作业。将1-40任务的时长从2小时调整为实际需要的1小时后,调度器会认为这批任务占用资源的时间更短,能更快释放资源,因此更倾向于优先分配资源给它们,避免因设置过长时间限制而被延后调度。
内容的提问来源于stack exchange,提问作者David Veitch
相关产品推荐
相关产品推荐

