【发布时间】:2019-01-19 22:21:36
【问题描述】:
我的问题基于THIS 问题。
我应该考虑使用--array=0-60000%200 将 slurm 中并行运行的作业数限制为 200 个。在我看来,每次完成一项旧工作时,要花上一分钟的时间来处理一份新工作。考虑到我计划运行的作业数量,我可能会以这种方式浪费大量时间。
我写了一个“最有可能”非常低效的替代方案,包括一个启动作业的脚本,检查队列中的作业数,如果我仍然低于允许的最大作业数,则添加作业,while 我达到了最大并行作业数,休眠5秒,如下:
#!/bin/bash
# iterate procedure $1 times. $1=60000
for ((i=0;i<=$1;i++))
do
# wait until any queued process is finished
q=$(squeue -u myuserName | wc -l) #I don't care about +/-1 lines (e.g. title)
while [ $q -gt 200 ] #max number of parallel jobs set to 200
do
sleep 5
q=$(squeue -u myuserName | wc -l)
done
# run the job with sbatch
sbatch...
done
与我之前的方法相比,它似乎做得更好,但是, 我想知道这种实施实际上效率有多低?为什么? 我是否会损害同一集群上其他用户的调度效率?
谢谢。
【问题讨论】:
标签: performance parallel-processing jobs slurm