【发布时间】:2020-04-16 14:49:17
【问题描述】:
我正在尝试在 SLURM 管理的集群中启动多个任务,并希望避免处理数十个文件。
现在,我有 50 个任务(下标 i,为简单起见,i 也是我的程序的输入参数),每个任务都有一个 bash 文件 slurm_run_i.sh,它指示计算配置,以及 srun 命令:
#!/bin/bash
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=1
#SBATCH -J pltCV
#SBATCH --mem=30G
srun python plotConvergence.py i
然后我使用另一个 bash 文件来提交所有这些任务,slurm_run_all.sh
#!/bin/bash
for i in {1..50}:
sbatch slurm_run_$i.sh
done
这可行(集群上正在运行 50 个作业),但我发现输入文件超过 50 个很麻烦。搜索解决方案,我想出了 & 命令,得到的东西是:
#!/bin/bash
#SBATCH --ntasks=50
#SBATCH --cpus-per-task=1
#SBATCH -J pltall
#SBATCH --mem=30G
# Running jobs
srun python plotConvergence.py 1 &
srun python plotConvergence.py 2 &
...
srun python plotConvergence.py 49 &
srun python plotConvergence.py 50 &
wait
echo "All done"
这似乎也在运行。但是,我无法独立管理这些作业中的每一个:squeue 的输出显示我有一个作业(pltall)在单个节点上运行。由于我正在工作的分区中的每个节点上只有 12 个核心,我假设我的大部分工作都在我被分配到的单个节点上等待。设置 -N 选项也不会改变任何东西。此外,如果我意识到有错误或其他事情,我不能再单独取消一些作业,这对我来说听起来有问题。
我的解释是否正确,有没有比我尝试在 slurm 中处理多个作业而不在许多文件中丢失更好的方法(我猜)?
【问题讨论】: