ジョブをグループ分けしてジョブ群毎にジョブを管理したい
複数のジョブに同一の名前を付けることで、グループ毎の管理を行うことができます。 名前はジョブの qsub 時、もしくは、実行待ちのジョブに対して付けることができます。既に実行されているジョブに名前を付けることはできません。
$ qsub -N GROUP1 [] $ qsub -N GROUP1 [] $ qsub -N GROUP2 [] $ qsub -N GROUP2 []
グループ単位でジョブを削除する
GROUP1 を削除する。
$ qdel GROUP1
グループ単位でジョブのオプションを変更する
GROUP2 の AGE オプションと、ジョブスクリプト引数を変更する。
$ qalter <> GROUP2 []
ジョブの実行順を制御したい
下記のようなオプション指定で実現できます。
$ qsub -N job1 [] $ qsub -N job2 -hold_jid job1 [] $ qsub -N job3 -hold_jid job1,job2 []
各ジョブには別名 「job1」「job2」「job3」が設定されます。「job1」が実行完了した後に「job2」が実行され、「job1」と「job2」が実行完了した後に「job3」実行されます。
下記のように正規表現を利用しても上述と同様の実行順が設定可能です。
$ qsub -N job1 [] $ qsub -N job2 -hold_jid job1 [] $ qsub -N job3 -hold_jid "job*" []
参考: 実行順序があるジョブの実行
実行順を設定したジョブにおいて、先に実行されたジョブ内で、後に実行されるジョブを制御したい
「ジョブ A の実行完了後に実行されるジョブ B が存在する。ジョブ A でエラーが発生した際にはジョブ B の実行を中止する」ことは、下記の設定により実現可能です。
ジョブ A のエラー処理内に、下記のコマンドを実行するよう記述する。
$ qdel jobB
ジョブの実行順を設定してジョブを qsub する。
$ qsub -N jobA [] $ qsub -N jobB -hold_jid jobA []
複数の種類のキューを指定してジョブを qsub する方法
SHIROKANE では、実行までの待ち時間が短くするために、qsub 時に何もオプションを指定せずとも mjobs.q、mjobs_rerun.q、ljobs.q、専有キューのいずれかのキューを実行する計算のノードの候補にします。
キューを候補とした際のキューの選択順位は以下の通りです。
専有キュー > mjobs.q > ljobs.q > mjobs_rerun.q
例 1 mjobs.q、ljobs.q、mjobs_rerun.q、専有キューのいずれかでジョブを実行する
$ qsub []
オプションを何も指定しなければ mjobs.q、ljobs.q、mjobs_rerun.q、専有キューのいずれかでジョブが実行されます。
例 2 mjobs.q、ljobs.q のいずれかでジョブを実行する
$ qsub -q mjobs.q,ljobs.q []
上記のオプションを使用することで mjobs.q、ljobs.q のいずれかでジョブが実行されます。mjobs_rerun.q や専有キューではジョブは実行されません。
例 3 mjobs.q、ljobs.q、専有キューのいずれかでジョブを実行する
$ qsub -q '!mjobs_rerun.q' []
例 1 から mjobs_rerun.q を除く方法です。ジョブが自動再実行されにくくなりますが、待ち時間は増えます。
例 4 mjobs.q を優先し、 mjobs.q、ljobs.q、mjobs_rerun.q、専有キューのいずれかでジョブを実行する
-q
オプションと -soft
オプションを組み合わせることで mjobs.q を優先的に選択させることができます。
$ qsub -soft -q mjobs.q []
この場合の場合のキューの選択順位は mjobs.q > 専有キュー > ljobs.q > mjobs_rerun.q です。 この場合、 mjobs.q に空きがあれば、 mjobs.q 以外のキューでジョブが実行されることはありません。
例 5 専有キューを優先し、mjobs.q、ljobs.q のいずれかでジョブを実行する
$ qsub -q '!mjobs_rerun.q' -soft -l exclusive []
メモリ利用量を宣言する場合には、 -l s_vmem=XG
を指定する場所に気をつける必要があります。
例 6 (誤った例) -soft
を使用しつつ、メモリ宣言量を指定する
$ qsub -soft -l s_vmem=8G,ljob,lmem []
例 7 (正しい例) -soft
を使用しつつ、メモリ宣言量を指定する
$ qsub -l s_vmem=8G -soft -l ljob,lmem []
または
$ qsub -soft -l ljob,lmem -hard -l s_vmem=8G []
-l s_vmem=XG
は -hard
オプションの後ろに指定する必要があり、-soft
オプションの後ろに指定することはできません。 ただし qsub のオプションはデフォルトでは -hard
オプションとして扱われるため、-soft
オプションを使用しない場合は意識する必要はありません。
-soft
を使用する場合は -soft
の前、もしくは明示的に -hard
を指定した上で、-l s_vmem=XG
を記述してください。
環境変数を設定して、ジョブを qsub したい
ジョブの環境変数の設定は、ジョブスクリプトの内部の開始部分で行うことが基本です。 ジョブを qsub する前に設定した環境変数をジョブスクリプトの中で使用できるようにするには次のようにします。
例えば、 Perl スクリプトを実行する際に、環境変数を設定するためには、qsub コマンドの -v
オプションを使用します。
$ qsub -v LD_LIBRARY_PATH=$HOME/lib:$LD_LIBRARY_PATH,PATH=$HOME/bin:$PATH \ -S /usr/local/bin/perl []
下記のように、Perl スクリプト内に AGE オプションを記述することもできます。
#!/usr/local/bin/perl #$ -S /usr/local/bin/perl #$ -v LD_LIBRARY_PATH=$HOME/lib:$LD_LIBRARY_PATH,PATH=$HOME/bin:$PATH
ただし、そうまでしてジョブスクリプトにて環境変数を設定しないことの是非を再検討してください。
R を実行したい
R スクリプトを作成します。
$ vi test.R x <- matrix(1:12,3,4) x
ジョブスクリプトを作成します。
$ vi test.sh #!/bin/bash #$ -S /bin/bash #$ -cwd Rscript test.R
ジョブスクリプトを qsub します。
$ qsub test.sh
関連: ジョブスクリプトの作成
ジョブを専有キューで実行したい
専有コアを持つグループのユーザは、専有キューをご利用いただけます。qsub 時にオプションを指定しない場合、SHIROKANE ではキューの使用状況に応じて mjobs.q、ljobs.q、lmem.q、専有キューのいずれかで実行されます。専有キューでのみ実行する際には、以下ようにオプションを指定してジョブを qsub する必要があります。
$ qsub -l exclusive []
専有キューは実行時間の上限がありません。ljobs.q が混み合っている際に、上記の通り指定することで、専有キューで実行時間の長いジョブを実行することができます。
専有キュー名
は、通常は、 グループ名.q
です。 hgc0361 グループの場合は hgc0361.q
になります。
ご自身のグループ名は、以下の id コマンドで表示されます。
$ id -gn