Hoffman2受限500作业时,如何提交10万规模作业数组?
在Hoffman2上批量提交10万作业并保持500并发的解决方案
Hoffman2使用的是Univa Grid Engine(UGE)调度器,和Slurm的语法不兼容,你用的-t 1-100000%500是Slurm专属写法,UGE不识别。要控制作业数组的并发数,得用UGE原生的-tc(task concurrency)参数,下面给出两种可行的修改方式:
方法一:直接把目标任务做成带并发限制的数组作业(推荐)
你当前的脚本是用一个数组作业批量提交submit_job.sh,这种方式会额外占用作业额度(数组的每个任务本身也算一个作业)。更高效的做法是直接将submit_job.sh的逻辑做成数组作业,用-tc限制并发数:
#!/bin/bash #$ -cwd #$ -o test.joblog.$JOB_ID.$SGE_TASK_ID #$ -j y #$ -l h_data=3G,h_rt=02:00:00 #$ -m n #$ -t 1-100000 #$ -tc 500 # 核心参数:限制数组同时运行的任务数为500 echo "STARTING TIME -- $(date) " echo "TASK ID: $SGE_TASK_ID" # 直接调用你的任务脚本并传递任务ID ./submit_job.sh $SGE_TASK_ID
提交后,UGE会自动维持最多500个任务同时运行,当有任务完成时,会自动启动下一个任务,不会触发用户500作业上限的限制。
方法二:保留外层提交逻辑(仅特殊场景使用)
如果必须保留“用数组作业提交其他作业”的原有模式,可以给外层数组添加-tc 500,同时让每个提交动作等待作业完成后再继续:
#!/bin/bash #$ -cwd #$ -o test.joblog.LOOP.$JOB_ID.$SGE_TASK_ID #$ -j y #$ -l h_data=3G,h_rt=02:00:00 #$ -m n #$ -t 1-100000 #$ -tc 500 # 限制外层数组同时运行500个任务 echo "STARTING TIME -- $(date) " echo "$SGE_TASK_ID" # 加-sync y让qsub等待提交的作业完成再退出,避免瞬间提交大量作业触发上限 /u/systems/UGE8.6.4/bin/lx-amd64/qsub -sync y submit_job.sh $SGE_TASK_ID
这种方式会额外占用500个外层作业的额度,效率不如方法一,仅在必须保留原有提交流程时使用。
验证并发数
提交作业后,可以用以下命令查看当前运行的作业数,确认是否控制在500以内:
qstat -u $USER | grep -c "r"
内容的提问来源于stack exchange,提问作者Dreamer93
相关产品推荐
相关产品推荐

