2017-07-31 32 views
1

我正在研究在大型计算集群的两个不同分区上运行程序的项目。我想使用批处理脚本运行此操作,但是在搜索后,仍然不清楚我是否可以在单个批处理脚本中分配和运行两个不同分区上的程序。下面是诸如此类的事情,我想对于bash错误做多分区作业的批处理脚本?

#!/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 

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

谢谢!

回答

1

SLURM作业被限制在一个分区,这样在你的情况下,有行动的几门课程:

  • 提交两份工作阵列--array=1..100和分裂您所提交的脚本在一个部分为batch分区,而另一部分为gpu分区,并用--depedendcy=aftercorr:<job_id of the 'batch' job array>

  • 使用salloc连接两个阵列上创建分区gpu的分配,然后用SSH明确地给该节点运行python gpu_iter.py在提交脚本(如果该群集配置许可证)

  • 修改gpu_iter.py,以便它可以被用信号通知(用UNIX信号),它具有运行,然后休眠直到下一个信号,并使用scancel以发信号通知gpu作业来自batch作业在每次迭代中。