多分区作业的批处理脚本?

时间:2017-07-31 19:46:06

标签: slurm

我正在开发一个在大型计算群集的两个不同分区上运行程序的项目。我想使用批处理脚本来运行它,但是在搜索之后,我仍然不清楚是否/如何在单个批处理脚本中分配和运行两个不同分区上的程序。这就是我想要做的事情

#!/bin/bash
#SBATCH --partition=<WHAT GOES HERE? I want to perform 100 processes on partition "batch" and 1 process on partition "gpu". I will alternate between the 2 during my jobs execution>
#SBATCH --ntasks=<100 on batch, 1 on gpu>
#SBATCH --mem-per-cpu=2G
#SBATCH --time=4-00:00:00
#SBATCH --exclude=nodeynode[003,016,019,020-023,026-030,004-015,017-018,020,024,031]
#SBATCH --job-name="lorem_ipsum"

filenames=("name1" "name2" "name3")

srun -p gpu python gpu_init.py
wait

for i in {0..100}
do
    for name in "${filenames[@]}"
    do
    srun -p batch pythonexecutable &
    done
srun -p gpu python gpu_iter.py
wait
done

为bash错误道歉,我通常在python中编写脚本,但我不能在这里因为我在我的bash脚本中切换python模块(不同的版本)(未显示)。我看到你实际上可以在批处理脚本的标题中放置一个分区列表,但是从我读到的内容实际上只是告诉调度程序从列表中分配任何可用的分区,而不是多个分区。

谢谢!

1 个答案:

答案 0 :(得分:3)

Slurm作业仅限于一个分区,因此在您的情况下,有几个操作过程:

  • 提交两个作业数组--array=1..100并将您的提交脚本分成一部分用于batch分区,另一部分用于gpu分区,并将两个数组与{{1 }

  • 使用--depedendcy=aftercorr:<job_id of the 'batch' job array>salloc分区上创建分配,然后显式使用SSH到该节点在提交脚本中运行gpu(如果群集配置允许) )

  • 修改python gpu_iter.py,以便可以发信号通知(使用UNIX信号)它必须运行然后休眠直到下一个信号,并使用gpu_iter.py发信号通知{{1}在每次迭代中scancel作业内的作业。