2014年9月7日日曜日

Torqueでジョブの終了をプッシュ通知する

Torqueに大量にジョブを投げる場合、ジョブの終了を通知する仕組みがあると便利です。
しかしドキュメントが意外と少なく苦労したのでここにまとめます。

・Array Job

まず、大量にジョブを投げる場合はloopではなくarray jobを使いましょう。

#PBS -t 1-100

で100個のジョブを投げることが出来ます。

あるいは他のパラメータ同様qsubで

qsub -t 1-100 ./myJob.sh

として指定することも出来ます。

この時、myJob.shでは100個のジョブを識別するのに$PBS_ARRAYIDというパラメータが渡されます。これを用いてジョブ毎の固有の実装をすることが出来ます。


そして全てのジョブが終わった時の通知はこのArray Jobを用いて行います。


・Job Dependencies

Torqueのジョブは依存関係を指定することが出来ます。例えば、このジョブが終了してから、など。

 JOB1=`qsub ./myJob1.sh`
qsub -W depend=after:$JOB1 ./myJob2.sh

このように、qsubの返し値としてジョブIDが出るので、それを用いて依存先を指定できます。

ただし100個の仕事に依存する場合これで書くのは面倒です。そこでArray Jobを使います。

ARRAYJOB = 'qsub -t 1-100 myJobs.sh'
qsub -W depend=afterokarray:$ARRAYJOB[] ./mail.sh

・Array jobの場合はジョブの名前の後に配列を表す括弧を加える必要がありますのでご注意。

これによって、全ジョブ終了後に実行されるジョブを定義することが出来ます。
そして、その仕事としてmailを指定することでプッシュ通知が可能になります。

メールだけではなく、その場で結果の統計を取ったりしてからメールを送ることもできます。
Torqueのメール機能を使ってもいいと思いますが、自由な形式でメールを送るにはスクリプトにした方がわかりやすいと思いますので。

0 件のコメント:

コメントを投稿