我正在尝试在 SLURM 管理的集群中启动多个任务,并希望避免处理数十个文件。现在,我有 50 个任务(下标 i,为简单起见,i 也是我程序的输入参数),每个任务都有一个slurm_run_i.sh
指示计算配置的 bash 文件和 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 中处理多个工作而不在许多文件中丢失更好的方法(我猜)?