JobScheduler
kfurui.iconTSUBAMEなどでアレイジョブをもう少し賢くやるツール
kfurui.icon自分用に作っているので定期的に仕様変更する可能性あり。うまく使えば効率的にリソースが使えるはず
シェルに渡す引数をcsvファイルで管理してバカパラで投げる
ジョブのステータスはpending, running, doneで管理する
ファイルのlockでジョブが動いてるか確認する
途中でジョブが終了してもロックしてなければpendingに戻すだけでもう一回実行するようになる
job_schedulerの実行時間を設けることも可能
以下の例だとparamA, paramB, ... (引数名は何でも良い) をシェルの引数$1, $2, ...に対応
code:test_params.csv # 最初は引数のみで良い
paramA,paramB
foo,1,pending
bar,2,pending
baz,3,pending
qux,4,pending
code:test_params.csv # job_schedulerを実行すると自動的に状態が割り当てられる
paramA,paramB,status,job_id
foo,1,pending,job_6919c0dd
bar,2,pending,job_e8235261
baz,3,pending,job_89a33219
qux,4,pending,job_e61045fd
例えば以下の例で動作確認
code:test_job.sh
mkdir -p tmp
paramA=$1
paramB=$2
OUTPUT_FILE="tmp/output_${paramA}_${paramB}"
echo "Started job with paramA=$paramA, paramB=$paramB"
echo "Sleeping for 30 seconds..."
sleep 30
touch $OUTPUT_FILE
echo $OUTPUT_FILE > $OUTPUT_FILE
echo "Output file created at: $OUTPUT_FILE"
code:run.sh
. /etc/profile.d/modules.sh
job_scheduler jobs/job-al.csv src/al_run.sh
code:;
# 4個のジョブを投げる
qsub -g tga-ohuelab -t 1-4 job.sh
さらにparallelを使うなどすれば複数のプロセスに対して適切にジョブスケジューリングできる
code:parallel_job.sh
. /etc/profile.d/modules.sh
CPUNUM=8 # 8つのjob_schedulerを起動する例
parallel -j $CPU_NUM bash job.sh ::: $(seq 1 1 $CPU_NUM)
multi gpuでも