新システム
ジョブをサブミットするには、作業の内容を記入した「ジョブスクリプト」を作成します. そして,それを計算の待ち行列「キュー」に登録します.登録後は,放っておけば,ジョブが順番に処理されていきます.ジョブ文には
- 自分の使用する計算時間を記載します.記載しなければ3時間で強制停止されます.
- 自分が使用したい計算機の特性(高速機〜低速機)を記載します.
- 記載しないと・・・どうやら一番ダメなマシンに割り振る癖があるみたいですね.
- 自分の使用するメモリーやディスクの量を記載しても良いです.
- 記載しないと,メモリー不足の計算機を割り当てられたりします.ジョブが「ふ・・・」と止まるやつは,だいたいこれ
- 大きく書きすぎると,いつまでもジョブが開始しなかったりします.
- おいらのプログラムのmemory使用量を知らないだと?!素人め,ここを読め
待ち行列「キュー」には4クラスあります.
F: ファーストクラス
急ぎの仕事である場合に利用します.他のジョブを一旦休止させてでも,自分が先に実行します(他のジョブが完全停止するわけではありません.わずかばかりの資源を割り振ります).ジョブの実行は,ユーザーが何を指定したとしても1日を越えることができません.
B: ビジネスクラス
まあ大事な仕事である場合に利用します.エコノミーの乗客を踏んづけてでも,自分が搭乗します.(踏まれたジョブは完全停止するわけではありません.わずかな資源が割り振られます)ジョブの実行は,ユーザーが何を指定したとしても7日を越えることができません.
E: エコノミークラス
まあゆっくりで良い仕事である場合に利用します.高位ジョブがなければ,実行します.ジョブの実行は,ユーザーが何を指定したとしても30日を越えることができません.
L: ランディングギアクラス
まあできた方が良い仕事である場合に利用する密航者です.正規の乗客が搭乗口に出現しただけで,機外放出(強制停止)され,高位ジョブが完了した180分後に再投入されます.強制停止される5分前にSIGCONT, SIGTERMが到来しますので,プログラマーによっては対策が可能かもしれません(特に対策していない場合,プログラムは強制終了されます).5分後にSIGKILLが到来し,まだ生きているプログラムも強制終了されます.ジョブの実行は,ユーザーが何を指定したとしても99日を越えることができません.
SIGCONTがなにかって?それが分からない人は,このクラスは使わない方がいいと思うよ.
ジョブ文の記述
ジョブ文の例を示します:
#!/bin/bash ←必ず入れてください #SBATCH --partition F ←ジョブクラスを指定しなければならない #SBATCH --output my_output.txt ←画面出力ファイルを指定しなければならない #SBATCH --error my_error.txt ←エラー出力ファイルを指定しなければならない #SBATCH --job-name="MyJob" ←ジョブに名前を指定しても良い #SBATCH --time=0-13:04 ←ジョブの継続時間(日数-時間:分). 省略時は3時間になります #SBATCH --constraint="CL0|CL1" ←計算機のFeatureを限定しても良いし,しなくてもよい #SBATCH --tmp=1T ←計算機のディスクサイズ(Tならテラ, Gならギガ)を指定しなくてもよい #SBATCH --ntasks=4 ←MPIプロセス数. 省略すると1 #SBATCH --cpus-per-task=2 ←OMPスレッド数. 省略すると1 #SBATCH --mem-per-cpu=500 ←1スレッドあたりメモリーの使用量を記入したいならどうぞ #SBATCH --mem=100G ←1ノードあたりメモリーの使用量をMBで記入したいならどうぞ cd `StartDisk` ←必ず入れてください srun ./MyProgram ←あなたの実行ファイルを実行(MPIの場合). MPIを使わないならsrun不要 cd `FinishDisk` ←必ず入れてください
ジョブの継続時間が短いほうが,優先順位が高くなります.つまり・・・他のジョブに踏んづけられる可能性が小さくなります.ですがジョブの継続時間が経過してしまうと強制終了されますので注意.
メモリーの使用量?そんなもん知るか!という向きには,試しに多めにとってジョブを実行すると,「そのプログラムで使ったメモリーサイズ」が記録で読めます:
[sugimoto@ig2014-1 1254]$ sl 250 JobID User Partition JobName State Elapsed MaxRSS MaxVMSize ------------ --------- ---------- ---------- ---------- ---------- ---------- ---------- 250 sugimoto F ~(o_o)~ COMPLETED 00:06:03 250.batch batch COMPLETED 00:06:03 0.05G 0.13G
この例では, 配列サイズ(VMSize)130MB, 実際のメモリー使用量(RSS)50MBです.これらを参考に記入してください(現在のところ,実際に使用したサイズ,で十分だと思います).デフォルトは500MBしかなかったと思います.
- 宣言したサイズ以上を利用すると強制終了されます ←現在.この機能は無効にしている
- というわけで,小さめに宣言しても,まずは困りません.ただし,ジョブが増えてきた時,高貴なジョブは,宣言に基づくメモリーに余裕があるマシンを踏んづけようと考えるみたいです.
- 自分のジョブが走っているのに,メモリーに余裕があるな,とシステムが思うと,重複してジョブを実行しようとします.それでメモリーが溢れても,「メモリー指定しないやつが悪い」という考えのようです.
-
ノードあたりメモリーのデフォルトは 10GB です.気に入らない場合,
#SBATCH --mem=120G
とか指定してください -
スレッドあたりメモリーのデフォルトは1GB です. 128スレッド使うと 128GBないと走りません.気に入らない場合
#SBATCH --mem-per-cpu=2G
とか指定してください
-
- メモリー要件を満たさない計算ノードには投入されません.計算機のメモリー要件は,sn コマンドで取得可能:
[sugimoto@ig2014-1 ]$ sn NODE PARTITION C:S:T MEM DISK FEATURE FREE-CPU -MEM REASON as2020-1 F,B,E,L 1:16:2 128 830 CL2,AS 32/32 128G as2020-2 F,B,E,L 1:32:2 256 612 CL4,CL5,CL8,AS 0/64 10G as2020-3 F,B,E,L 1:32:2 256 600 CL4,CL5,CL8,AS 64/64 256G as2022-1 F,B,E,L 1:64:2 256 800 CL4,CL5,CL8,AS 0/128 243G ib2007-1 F,B,E,L 1:2:1 3 150 CL0 2/2 3G ig2016-1 F,B,E,L 2:18:2 256 900 CL4,CL8 0/72 51G ig2017-1 F,B,E,L 2:18:2 256 800 CL4,CL8 72/72 256G MEM欄:計算機が有するメモリー -MEM欄:今余っているメモリー
計算機には,その速度や装備に応じてFeatureが指定されています.ジョブ文で#SBATCH --constraint を利用し,特性を持つ計算機を指定することも可能です.
- CL0&CL1 という風に,複数の特性を全て持つ計算機を選べます. 途中に空白を入れてはいけません.
- CL0|CL1 という風に,複数の特性のどちらかを持つ計算機を指定できます.途中に空白を入れてはいけません.
cd `StartDisk`は, ジョブを投入するフォルダーを, 丸ごと計算ノードに転送する命令です.また, cd `FinishDisk`は, 計算ノードのフォルダーを丸ごと元の場所に上書きする命令です.計算自身は,計算ノードの作業ディスク上で行われるので,計算に必要なデータが現在のフォルダーに正しく存在する必要があります.
ジョブ中の実際の作業では,これらは結局
cd 計算ノードの作業フォルダー
srun ./MyProgram
cd 元のフォルダー
となって実行されるのです.
あとGPUの有無もわかるので指定できたらいいなー(ここいらへん未完成)
ジョブの投入
ジョブ部分が欠けたら,
sbatch ジョブ文
で投入できます.sq, slコマンドで投入具合を確認できます:
$ sq
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
301 E 1313 shogo R 1-01:16:42 1 ib2007-1
302 E 1315 shogo R 22:54:41 1 ig2014-1
306 E 1317 shogo R 21:57:28 1 ig2014-1
sqでは実行中のジョブが, slでは実行済みのジョブが表示されます:
$ sl -a -l
JobID User Partition JobName State Elapsed MaxRSS MaxVMSize NodeList
------------ --------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------
306 shogo E 1317 RUNNING 21:58:29 ig2014-1
306.batch batch RUNNING 21:58:29 ig2014-1
306.0 DSMC RUNNING 21:58:07 ig2014-1
308 shogo E 1319 COMPLETED 12:56:02 ig2014-1
308.batch batch COMPLETED 12:56:02 0.49G 0.13G ig2014-1
ジョブを投入したフォルダーは smgr f [ジョブ番号] でわかります:
$ smgr f 301 : /net/sun1/shogo/wmix3/1313 302 : /net/sun1/shogo/wmix3/1315 306 : /net/sun1/shogo/wmix3/1317
うまくいかない場合,ここをチェック