バッチジョブ
バッチジョブの使い方
CPU コアを 1 コアだけ使用し長時間実行するプログラムを少数実行する場合は、バッチジョブとして実行してください。Slurmではバッチジョブの投入にはsbatchコマンドを利用します。
一般的なジョブ投入の説明
例えば以下のようなシェルスクリプト(example.sh)を実行したいとします。(このシェルスクリプトは遺伝研スパコンにインストールされている biotools Singularity コンテナのリストを生成します。)
#!/bin/bash
ls /usr/local/biotools > $1
以下のようなjob_script.sh を用意し、sbatch job_script.shを実行して下さい。 すると Slurmの待ち行列(パーティション)にバッチジョブが投入されます。ジョブ投入スクリプトの中の#SBATCHが書いてある行は、Slurmへのオプション指示行です。(AGEではキューと呼んでいた待ち行列を、Slurmではパーティションと呼びます。ご注意ください。)
#!/bin/bash
#SBATCH -t 0-00:10:00
#SBATCH --mem-per-cpu 4g
#SBATCH -J an_example
example.sh biotools_list.txt
- Slurmの場合、AGEの動作と異なり、デフォルト動作として、sbatchコマンドを実行した際のカレントワーキングディレクトリを投入したジョブのカレントワーキングディレクトリとしてジョブを実行します。その他のディレクトリでジョブを実行したい場合は、
--chdir
オプションを利用して指定してください。 - Slurmの場合、AGEの動作と異なり、sbatch実行時のシェルの環境変数をジョブの起動シェルにデフォルト動作で全て引き継ぎます。特定の環境変数のみを引き継ぎたい(引き継ぎたくない)場合は、
--export
オプションを利用してください。詳細についてはオンラインマニュアルを参照してください。 -p パーティション名
: バッチジョブを投入する待ち行列(パーティション Partition)の種類を指定します。- 個人ゲノム解析区画の場合は利用可能なパーティション構成は利用申請時の申請したシステム構成によります。詳細はSlurmパーティションの構成の項を参照ください。
-t 0-00:10:00
: バッチジョブの実行上限時間。- バッチジョブの実行開始からこの実行上限時間をすぎるとバッチジョブは強制終了させられます。
- 実行時間の上限は少し長めに書いたほうが安全ですが、長すぎるとスケジューリングが難しくジョブが実行されにくくなる場合があります。その場合は
--time-min
と組み合わせての指定を検討してください。 -t
の指定省略時は、パーティションの設定が適用されます。- 時刻の記述フォーマットは、minutes, minutes:seconds,hours:minutes:seconds,days-hours,days-hours:minutes,days-hours:minutes:secondsがあります。
--mem-per-cpu
は、使用するメモリ量です。ジョブに割り当てられたCPUコア(タスク)1個あたりに割り当てられるメモリ量を指定していることになります。単位は G,M,K が使えます。省略時は単位はMとして解釈されます。ジョブ全体としては、ジョブに割り当てられたコア数×指定したメモリ 量が割り当てられることになるので注意してください。-J
: ジョブ名の指定です。
個人ゲノム解析区画でのジョブ投入の注意事項
個人ゲノム解析区画でParabricks(GPUを利用するジョブ)を利用する場合、計算ノード上のGPUを全て占有してジョブが動作していても、CPUコア、メモリに空きがあると、他のジョブが 同じ計算ノードに並行して起動される可能性があります。計算ノードを1ジョブで占有して他ジョブが同じ計算ノード上で実行されないようにしたい場合は
--gres=gpu:4
オプションを指定してGPUを割り当てる
上記を実施した上で、以下のいずれかを指定してください。
--mem
384000で、メモリを計算ノードの設定上限いっぱい(384GB)まで取得する--exclusive
オプションを指定して、ノードを排他利用するように指定する
#!/bin/bash
#SBATCH -t 0-10:00:00
#SBATCH --gres:gpu:4
#SBATCH --mem=384000
#SBATCH -J an_example
your program
--mem
は1ノードあたりの割り当てメモリ量を設定するオプションです。1台で割り当てられるメモリは384GBを上限として設定しているので、これ以上はジョブが流れ込まなくなります。
#!/bin/bash
#SBATCH -t 0-10:00:00
#SBATCH --gres=gpu:4
#SBATCH --exclusive
#SBATCH -J an_example
your program
--exclusive
オプションを指定すると、CPUは計算ノード1ノードあたりの設定の最大CPUコア数の48コア、メモリは4096MB(1CPUコアあたりのデフォルトメモリ量)×48=192GBが割り当てられます。
これによりその計算ノードにジョブが流れ込まなくなります。