2017-07-31 34 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作業在每次迭代中。