在Slurm管理的gpu集群上提交作业
我正在做一些实验,正如你所知,我们必须调整参数,这意味着我需要用不同的超参数运行几个类似的脚本。因此,我编写了多个bash脚本(例如,名为training_n.sh(用于执行,在每个脚本中,它就像:
# training_n.sh
srun [command with specific model/training hyperparameters]
然后我使用sbatch
来执行这些脚本,在sbatch
脚本中,它就像:
# sbatch script
bash training_1.sh
bash training_2.sh
...
bash training_n.sh
如果我有一个";srun";s在我的";sbatch";脚本,它们是如何在队列中排列的(假设我在一个分区上运行(?所有这些";srun";It’是把它们看作一份单独的工作,还是把它们看作单独的工作?
换言之,它们是否连续地在"队列"中排队;squue";列表,并将连续执行?或者相比之下,其他用户的作业将正好排在"作业"后面;srun";我正在跑步,剩下的";srun";s只能在这些用户的作业完成后执行?
此外,有没有更好的想法在公开使用的集群上提交一批实验脚本由于很多人都在使用它,我想在轮到我时连续完成所有设计的实验,而不是完成一个";srun";并等待其他用户完成以启动我的下一个。
如果我有一个列表;srun";s在我的";sbatch";脚本,它们是如何在队列中排列的(假设我在一个分区上运行(?所有这些";srun";It’是把它们看作一份单独的工作,还是把它们看作单独的工作?换言之,它们是否连续地在"队列"中排队;squue";列表,并将连续执行?或者相比之下,其他用户的作业将正好排在"作业"后面;srun";我正在跑步,剩下的";srun";s只能在这些用户的作业完成后执行?
如果在单个sbatch
脚本中提交所有这些单个srun
脚本/命令,则只能获得一个作业。原因是srun
在作业分配内部的工作方式不同于在外部的工作方式。如果在作业分配中运行srun
(例如在sbatch脚本中(,它将不会创建新作业,而只是创建一个作业步骤。因此,在您的情况下,您将有一个具有n作业步骤的单个作业,该作业将在您的分配中连续运行。
此外,在公开使用的集群上提交一批实验脚本有什么更好的想法吗?
如果这些运行完全独立,则应使用作业数组,大小为n。通过这种方式,您可以创建n作业,这些作业可以在有可用资源时运行。
由于很多人都在使用它,我想在轮到我的时候连续完成我设计的所有实验,而不是完成一个"srun";并等待其他用户完成以启动我的下一个。
这可能不是个好主意。如果这些作业是独立的,您可以将它们作为数组提交。通过这种方式,它们可以利用回填调度,并且可能运行得更快。把他们投入到一份大工作中,你可能不会有任何收获。