2017-07-31 14 views
1

私は、大規模な計算クラスタの2つの異なるパーティションでプログラムを実行するプロジェクトに取り組んでいます。私はバッチスクリプトを使ってこれを実行したいのですが、検索後、バッチスクリプト内から2つの異なるパーティションにプログラムを割り当てて実行できるかどうかはまだ不明です。ここで私のpythonで通常のスクリプトが、私は私のbashスクリプト内のpythonモジュール(異なるバージョンを)切り替えてるように私はここにすることはできませんが(私は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 

謝罪をしたいと思いますものの一種です図示せず)。実際には、バッチスクリプトのヘッダーにパーティションのリストを置くことができますが、私が実際に読んだのは、複数のパーティションではなく、リスト内から使用可能なパーティションを割り当てるようスケジューラに指示するだけです。

ありがとうございます!

答えて

1

あなたのケースでは、アクションのいくつかのコースがありますので、SLURMジョブが一つのパーティションに制限されています

  • --array=1..100 2つのジョブ配列を提出し、batchパーティションと別の部分の一部にあなたの提出スクリプトを分割gpuパーティションおよび--depedendcy=aftercorr:<job_id of the 'batch' job array>

  • 使用sallocで両方の配列を連結するgpuパーティションに割り当てを作成し、を実行するために、そのノードに明示的にSSHを使用します提出スクリプト内(クラスタ構成が許せば)

  • 実行し、次の信号まで眠り、そして合図するscancelを使用しなければならないこと(UNIX信号を用いて)シグナリングすることができるようにgpu_iter.pyを変更します各反復でbatchジョブ内のgpuジョブ。