Relionには自分でジョブスケジュールする機能を持ってます。
スタンドアローンで処理したいジョブをスケジュールに登録して、流して帰宅。朝には一連のジョブが終わって次の作業へ。
もし計算機クラスターを持っているサイトなら、そのジョブキューイングシステムに対してジョブを投入する事も可能です。
ここではジョブキューイングシステムOpenPBS(旧名 PBSPro)に対してのジョブ投入方法を記載します
OpenPBS
Relionでは「Running」タブにある「Standard submission script」に指定されたファイルは、
同じ「Running」タグにある「Number of MPI procs」「Number of threads」「Queue name」らの
パラメータとそのジョブのコマンド行が代入される。
ファイルには決まったフォーマットがあって、ファイル中の
XXXqueueXXX は Queue nameの値に
XXXdedicatedXXX は Minimum dedicated cores per nodeの値に切り替わり
実行ファイル「run_submit.script」が作られる。
参照:https://www3.mrc-lmb.cam.ac.uk/relion/index.php/Download_%26_install#Set-up_queue_job_submission
そして
「Queue submit command」の値と共に実行される.
[Queue submit command] run_submit.script & # 実際には 「qsub run_submit.script &」かな
な感じで
relionのソースコードに付属している「Standard submission script」は「qsub.csh」として用意されている。
中身はこんな感じ
1 2 3 4 5 6 7 8 9 10 |
|
このフォーマットはSGEかな?当方では難しくて構築できなかったジョブ管理システムです
このサイトでは代替としてTORQUEやOpenPBSを提示しています.
Relionの本家様で TORQUE 向けの「Standard submission script」が提示されています. TORQUEとOpenPBSの仕様はほぼ同じなのでこれを採用してみました.
https://www3.mrc-lmb.cam.ac.uk/relion//index.php?title=TORQUE_template_script_example
中身はこんな感じ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
っがこれは間違いみたい。。。
11行目の部分を下記のように修正すべきかと思う
#PBS -l nodes=XXXmpinodesXXX:ppn=XXXthreadsXXX
↓
#PBS -l nodes=XXXnodesXXX:ppn=XXXdedicatedXXX
「nodes」はPBSでは使用する計算機ノード(計算マシン)数を示すのだが、ソースコードから「XXXmpinodesXXX」は
「Number of MPI procs」の値を入れている。これでは4MPIで計算しようと思うと4ノード求められてしまう。
また「ppn」は計算ノード当りのcore数を指定するのだが、1MPI当りのthreads数を示す「XXXthreadsXXX」を当てている。
計算ノードのcore数を示すべきなので「XXXdedicatedXXX」が適切ではと思っている。
修正したnodesの「XXXnodesXXX」は[MPI数]*[threads数]/[XXXdedicatedXXX]の整数値を表している。
っで他mpirunの時のnp+1や標準出力/標準エラーのハンドリングを加えて下記の「qsub.sh」を用意した
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
|
*(210817) Extract/Autopickでログが上手く出力されない事があったので修正. 2行コマンドを発行する際、ログが取得できないみたい. 2行目のログが収まってしまう
下記オレンジ部分の標準出力と標準エラーが表示されます
1ノードが16coreで4GPUを搭載していると仮定して、
「Number of MPI procs」は4
「Number ot threads」は4
「Submit to queue」は使いたいqueueの名称。ここでは「gpu」
「Queue submit command」は「qsub」
「Standard submission script」は、「/apps/relion-3.1/bin/qsub.sh」*ファイルの配置場所を指定
「Minimum dedicated cores per node」は、1ノード当りのcore数
な感じで。
計算に使用する計算ノードを指定したいのなら
「Queue submit command」欄にて「qsub -l nodes=gpu01:ppn=16」とノード名[gpu01]とppn(process per node:そのノードで使用するcore数)を指定する
もし複数の計算機でジョブを流すなら「qsub -l nodes=gpu01:ppn=16+gpu02:ppn=16」とプラス(+)で繋げる
その際、「Compute」欄の「Which GPUs to use」には要注意。
何も入力しなくても1MPI1GPUで割り当てられる場合もあるが、場合によっては1GPUを2つのMPIプロセスで共有とかあり要注意な個所
「0:0:1:1:2:2:3:3」とかと指定すれば回避できる時はあるけど、、
mpirunのオプションが「--map-by node」であるとき、MPIプロセスはノード毎に1つずつ渡ります。またqsub.shでnpの値が1つ増えるので8+1の9つのMPIが発生したとします。
MPI番号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
GPUID | 0 | 0 | 1 | 1 | 2 | 2 | 3 | 3 | |
gpu01 | MasterMPI refineのmasterはgpuを使わない | Slave(GPU:0) | Slave(GPU:1) | Slave(GPU:2) | Slave(GPU:3) | ||||
gpu02 | Slave(GPU:0) | Slave(GPU:1) | Slave(GPU:2) | Slave(GPU:3) |
「Number ot threads」を5とか6で流したい場合。。このqsub.shではエラーになりますね。
queueを使わずにその計算機で流すか、エラーの無い形でqueueを流して、即座にqdelで止めて、「run_submit.script」の「--j」を修正してコマンドラインでqsubを実行するとかでしょうか。
nodes表記はTorque的な書式. openPBSではselect表記が普通のようで.
1 2 3 4 5 |
|
とした方がいいみたい. っが実際のrunでは「Queue submit command」欄でgpuを指定したいので上記の「-l」欄を無視して
「Queue submit command」 --> qsub -l select=1:mpiprocs=4:ompthreads=6:ngpus=4
と書いた方がいいのかも. GPU枚数をカウントしてくれるXXXがないのでどうしてもこうなる.
ただ、scriptが「-l nodes=...」で「Queue submit command」が「qsub -l select=..」だとエラーになる.
なので使わないが一応script側を「-l select=..」と書いておいた方がよさげ.