lxatlbq1 での PBS の使い方
Last update:2005/01/18
PBS というのは,フリーのバッチシステムです.
有償の LSF ほど優れていませんが,Linux の世界では非常に使われています.
バッチシステムは,自分の解析等のジョブを空いている計算機を探してそこで自動的に実行してくれるものです.
lxatlbq1.icepp.s.u-tokyo.ac.jpでのみ実行可能。
その他のlxatlでは動きません。(コマンドはあるけど)
初心者の方は以下の"構成"以下を参考にしてください.
PBSのコマンドは /opt/OpenPBS/bin にあります。
PBSのマニュアルは /opt/OpenPBS/man にあります。
Mauiのコマンドは /opt/maui/bin にあります。(Maui schedulerを導入しました。)
キューの設定はqstat -qで分かります。
他のキューをつくる場合も以下のConventionに従います。
hはhour、dはday等を表す。
[lxatlbq1]
キュー | 最大ジョブ数 | CPU時間 | CPU Type | Memory/ジョブ
|
---|
h4 | 10jobs | 4 hours | Xeon 2.8GHz | 512MB
|
h24 | 16jobs | 24 hours | Xeon 2.8GHz | 512MB
|
d7 | 48jobs | 7 days | Xeon 2.8GHz | 512MB
|
inf | 16jobs | 無限 | Xeon 2.8GHz | 512MB
|
inf2 | 20jobs | 4 hours | PenIII 1.4GHz | 1GB
|
"Memory/ジョブ"に制限があるわけではありません。あくまで目安です。
これを越えるとSwapを開始する可能性があります。
(1) lxatlbq1が親分です.ここでスケジュール管理等を行います.
(2) Clientはとりあえず、秘密...。
必要な設定
(0) lxatlbq1にLoginするだけ。
[注意] /home/, /lxatlsv0/, /lxatlsv1/, /lxatl11/ となっているパスであれば、どこで実行しても構いません。
他のパスでの実行は保証できません。
バッチのためのスクリプトの書き方
例を挙げた方が早いので,kani.sh というファイルに以下の内容を書きます.
#!/bin/sh
#PBS -e /home/jtanaka/spool
#PBS -o /home/jtanaka/spool
cd $PBS_O_WORKDIR
sleep 60
echo ${HOSTNAME}
echo kani
これが,PBS 用のスクリプトです.普通のスクリプトと違う点は,#PBS の行があることです.
#PBS -e /home/jtanaka/spool は,標準エラー出力をここに指定しているディレクトリーの下に置き,
#PBS -o /home/jtanaka/spool は,標準出力をここに指定しているディレクトリーの下に置くように PBS に命令しています.
指定がない場合(書いていない場合)は、qsubを実行したディレクトリーにファイルができます。
スクリプトの実行は、qsubを実行したDirectoryではなく、Home Directoryで行われます。
そのため、PBS用の環境変数$PBS_O_WORKDIRを用いて、場所(qsubを実行したDirectoryへ)を移動しています。
(余談1) 当たり前ですが,/bin/tcsh 等なんでも OK です.(実行する計算機にないと困りますが.../bin/bash, /bin/sh, /bin/tcsh, /bin/zshはあります。)
(余談2) #PBS の後には,-e, -o 以外にもたくさん指定できます.man qsub としてみましょう.
ジョブをサブミットする方法
先ほどの例を kani.sh に保存して,実行許可を出します.
で,初めての場合はログ用のディレクトリーを作成して,それからサブミットです.
jtanaka@lxatlbq1> chmod 744 kani.sh
jtanaka@lxatlbq1> mkdir /home/jtanaka/spool
jtanaka@lxatlbq1> qsub kani.sh
という感じです.最後の qsub kani.sh がサブミットするためのコマンドです.
jtanaka@lxatlbq1> qstat
jtanaka@lxatlbq1> qstat -n
とするとジョブの進行状況が分かります.
Job id Name User Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
64.lxatlbq1 kani.sh jtanaka 0 R default
Job ID Username Queue Jobname SessID NDS TSK Memory Time S Time
--------------- -------- -------- ---------- ------ --- --- ------ ----- - -----
64.lxatlbq1.ice jtanaka default kani.sh 16481 1 -- -- -- R --
compute-5-0
S の部分がジョブのステータスを表していて,R は実行中で,Q ならまだ走っていません.
E が長期間続くと何か変な状態になっているので連絡してください.
-n をつけると,実際に実行している計算機が分かります.この場合は,compute-5-0 です.
最後に,
jtanaka@lxatlbq1> qstat
で自分のジョブがリストからなくなっていたらジョブは終了しています.
less /home/jtanaka/spool/64.lxatlbq1.ER
less /home/jtanaka/spool/64.lxatlbq1.OU
と確認してみてください.ただし,64.lxatlbq1.OU に以下のような内容があっても
これは無視してください。(たぶんないと思うけど)
Warning: no access to tty (Bad file descriptor).
Thus no job control in this shell.
サブミットしたジョブをやめさせる方法
jtanaka@lxatlbq1> qdel "Job id"
です.Job id とは,
jtanaka@lxatlbq1> qstat
Job id Name User Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
64.lxatlbq1 kani.sh jtanaka 0 R default
の,64 です.(lxatlbq1 は無視)
つまり,この場合は,
jtanaka@lxatlbq1> qdel 64
です.
ファイルリードに特化したジョブ(Obsoleteになりました。2005/1/1現在)
ほとんどのデータファイルは、/lxatlsv0や/lxatlsv1にあります。
これは、名前から類推できるように、lxatlsv0やlxatlsv1がNFS serverとなっていて
そこのファイルをNFS経由でアクセスしていることになります。
100台規模で、"高速に"同時にアクセスした場合、かなりパフォーマンスが低下します。
MCデータ生成の場合は、"高速"という分類にはなりませんが、
データファイルをリードする場合、つまり、データ解析の場合は"高速"という分類になります。
PBSではキューでノードを制御できませんが、Propertyというもので制御可能です。
jtanaka@lxatlbq1> qsub -l nodes=read kani.sh
というように、-l nodes=readを付けてジョブを投げて下さい。
(いくらジョブを投げても最大7台のみ利用。もちろん、みんなで。)
スクリプトで制御したい場合は、
#!/bin/sh
#PBS -l nodes=read
#PBS -e /home/jtanaka/spool
#PBS -o /home/jtanaka/spool
...
というように、#PBS -l nodes=read の行を追加してください。
以下は、前に書いたものなのでチェックしていません。
何かの参考程度にしてください。
PAW での解析 -- その1 -- 引数なし
解析用の kumac ファイルを実行するときに引数が無い場合は簡単です.
例えば,check.kumac の内容が
fort/file 3 check.ps
meta 3 -111
f/pl sin(x)/x 0 12
close 3
とします.この場合のバッチ用スクリプト check.sh は,
#!/bin/sh
#PBS -e /home/jtanaka/spool
#PBS -o /home/jtanaka/spool
cd ${HOME}/tmp
paw -b check.kumac
です.必ず実行許可を出してください.
注意点は,cd ${HOME}/tmp の部分で,自分の kumac ファイルがあるディレクトリを絶対パスで書いてください.
あとは,
jtanaka@lxatlbq1> qsub -q paw check.sh
で OK です.check.ps ができているはずです.
PAW での解析 -- その2 -- 引数あり
解析用の kumac ファイルを実行するときに引数がある場合はちょっと変更が必要です.
例えば,check.kumac の内容が
fort/file 3 [1].ps
meta 3 -111
f/pl sin(x)/x [2] [3]
close 3
となっている場合,当たり前ですが PAW のインターラクティブなモードで,
PAW> exec check test 0 10
とすると test.ps ができます.
しかし,この場合のバッチ用スクリプト check.sh として
#!/bin/sh
#PBS -e /home/jtanaka/spool
#PBS -o /home/jtanaka/spool
cd ${HOME}/tmp
paw -b check.kumac test 0 10
とすることはできません.
PAW に引数を渡すためには shell の環境変数を使います.
tcsh の場合 : setenv arg1 test
bash の場合 : export arg1=test
で,自分の kumac ファイルを
fort/file 3 $ENV(arg1).ps
meta 3 -111
f/pl sin(x)/x $ENV(arg2) $ENV(arg3)
close 3
のように,[n] を $ENV(argn) に変更します.
この場合のバッチ用スクリプト check.sh は,
#!/bin/sh
#PBS -e /home/jtanaka/spool
#PBS -o /home/jtanaka/spool
export arg1=test
export arg2=0
export arg3=10
cd ${HOME}/tmp
paw -b check.kumac
です.あとは,
jtanaka@lxatlbq1> qsub -q paw check.sh
で OK です.test.ps ができているはずです.
PAW での解析 -- その3 -- 引数あり == PAW でなくても使える
流れだけ説明します.
自分の kumac ファイルを
fort/file 3 $ENV(arg1).ps
meta 3 -111
f/pl sin(x)/x $ENV(arg2) $ENV(arg3)
close 3
のように,[n] を $ENV(argn) に変更します.
バッチ用スクリプト check.sh は,
#!/bin/sh
#PBS -e /home/jtanaka/spool
#PBS -o /home/jtanaka/spool
cd ${HOME}/tmp
paw -b check.kumac
です.あとは,
jtanaka@lxatlbq1> qsub -q paw check.sh -v arg1=test,arg2=0,arg3=10
で OK です.test.ps ができているはずです.
見て分かるように,PBS に環境変数を与えているので PAW でなくても使えます.
質問,要望
メール下さい.
管理メモ
BLOCKED JOBSがいたら、releasehold id
緊急に優先度あげるなら、setspri 100 id
FairShare情報を見るには、diagnose -f
Go to the main page
jtanaka