限制 slurm 中并行作业数量的效率
efficiency in limiting the number of parallel jobs in slurm
我的问题基于问题。
我应该考虑使用 --array=0-60000%200
来限制作业的数量 运行ning 并行到 200 in slurm。在我看来,每次完成旧工作后,新工作最多需要一分钟的时间。考虑到我计划 运行 的工作数量,我可能会浪费很多时间。
我写了一个 "most probably" 非常低效的替代方案,包含一个启动作业的脚本,检查队列中的作业数量,如果我仍然低于允许的最大作业数量和 while我达到最大并行作业数,休眠5秒,如下:
#!/bin/bash
# iterate procedure times. =60000
for ((i=0;i<=;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
与我以前的方法相比,它似乎做得更好,但是,
我想知道这个实现实际上效率低下吗?为什么?
我会不会影响同一集群上其他用户的调度效率?
谢谢。
SLURM 需要一些时间来处理作业列表并决定哪个作业应该是 运行 的下一个作业,特别是如果回填调度程序就位并且队列中有很多作业。您不会因为使用作业数组而浪费一分钟来安排作业,SLURM 是否需要一分钟来决定,而对于任何其他用户的任何其他作业,无论是否有作业数组,它都需要同一分钟。
通过使用您的方法,您的作业也会失去优先级:每次您的一个作业完成时,您都会启动一个新作业,而该新作业将排在队列中的最后一个。此外,SLURM 将必须管理数百个独立作业,而不是仅管理一个占您需要的 60000 个作业。
如果你是一个人在集群中,也许这两种方法没有太大区别,但如果你的集群已满,你的手动方法会给 SLURM 带来更高的负载,并且你的作业会比之前完成得晚很多到作业数组的近似值(只是因为有了作业数组,一旦数组排在第一位,60000 就排在第一位,而每次你的一个作业完成时都排在最后)。
我的问题基于
我应该考虑使用 --array=0-60000%200
来限制作业的数量 运行ning 并行到 200 in slurm。在我看来,每次完成旧工作后,新工作最多需要一分钟的时间。考虑到我计划 运行 的工作数量,我可能会浪费很多时间。
我写了一个 "most probably" 非常低效的替代方案,包含一个启动作业的脚本,检查队列中的作业数量,如果我仍然低于允许的最大作业数量和 while我达到最大并行作业数,休眠5秒,如下:
#!/bin/bash
# iterate procedure times. =60000
for ((i=0;i<=;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
与我以前的方法相比,它似乎做得更好,但是, 我想知道这个实现实际上效率低下吗?为什么? 我会不会影响同一集群上其他用户的调度效率?
谢谢。
SLURM 需要一些时间来处理作业列表并决定哪个作业应该是 运行 的下一个作业,特别是如果回填调度程序就位并且队列中有很多作业。您不会因为使用作业数组而浪费一分钟来安排作业,SLURM 是否需要一分钟来决定,而对于任何其他用户的任何其他作业,无论是否有作业数组,它都需要同一分钟。
通过使用您的方法,您的作业也会失去优先级:每次您的一个作业完成时,您都会启动一个新作业,而该新作业将排在队列中的最后一个。此外,SLURM 将必须管理数百个独立作业,而不是仅管理一个占您需要的 60000 个作业。
如果你是一个人在集群中,也许这两种方法没有太大区别,但如果你的集群已满,你的手动方法会给 SLURM 带来更高的负载,并且你的作业会比之前完成得晚很多到作业数组的近似值(只是因为有了作业数组,一旦数组排在第一位,60000 就排在第一位,而每次你的一个作业完成时都排在最后)。