ジョブコントローラ。SGEと役目は同じなのだが、正直SGEは愚生には重すぎました。わからん...っで
slurmと共にTORQUEも検討した次第。slurmよりもネットに転がっている情報量が多いようで、
こちらTORQUEを使ってみる。
***全体像 [#d9dfca80]
NIS/NFS構成で/home,/Applが共有され全マシンで同一のアカウントが使用可能であるとする。
またsshで他マシンにパスワードなしでログインできるように[[SSHホストベース認証>ssh/ホストベース認証]]も用意されているとする。
&color(red){*};&size(10){sshなら[[samba42/SSO]]で調整した方が楽かも};
&color(red){*};&size(10){[[rsh]]ならもっと簡単に他マシンへのログインが可能です。むしろこっちがいいかもね。ただしTOQRUEのリコンパイルが必要みたい[[TORQUE/rsh]]};
その上で下記のような構成でTORQUEを試してみる。
&ref(2015y05m03d_002600978.png,nolink,noborder);
IPとか役目は下記参照
|BGCOLOR(yellow):役目|BGCOLOR(yellow):ホスト名|BGCOLOR(yellow):IPアドレス|BGCOLOR(yellow):core数|BGCOLOR(yellow):備考|
|管理ノード|pbs.chaperone.jp|192.168.0.57|1|&color(red){nis参加は必須};|
|管理ノード|pbs.chaperone.jp|192.168.0.57|1|nis/AD参加は必須|
|計算ノード|n1.chaperone.jp|192.168.0.52|1|pbs_momが稼働&br;実際の計算を行う|
|~|n2.chaperone.jp|192.168.0.53|2|~|
|~|n3.chaperone.jp|192.168.0.54|3|~|
|ジョブ発行ノード|client.chaperone.jp|192.168.0.20|1|qsub,qstat|
&color(red){*};&size(10){各マシンはCentOS6で最小構成で構築されている。ntpも導入する。[[NIS]]、[[NFS>NIS/NFSv4]]はそれぞれ参照の事};
***TORQUEソフトウエア [#g67d8c6b]
epelのリポジトリから入手可能。昨年(2014)までは torque-2.5.7 が提供されていたが、今年(2015)になったら torque-4.2.10 に差し替えられてた。開発元[[http://www.adaptivecomputing.com/support/download-center/torque-download/>+http://www.adaptivecomputing.com/support/download-center/torque-download/]]を参照すると 2.5.x はEOSL(End Of Service Life)。4.2.xとかに移るべきなんだろうけど....
既存のシステムがあるので、2.5.xで進めます。
リモートシェルはデフォがssh/scpです。rsh/rcpを使うなら要注意。
まず、開発元からソースを取得します。
#code(nonumber){{
[root@pbs ~]# wget http://adaptive.wpengine.com/resources/downloads/torque/torque-2.5.13.tar.gz
}}
中身を確認すると spec ファイル(torque.spec)があった。なので、これを使ってrpmファイルを作成して、rpmでインストールします。
&color(red){*};&size(10){開発環境は既に導入済とします。&color(red){yum groupinstall "Development tools"};};
#code(nonumber){{
[root@pbs ~]# rpmbuild -ta torque-2.5.13.tar.gz
[root@pbs ~]# cd rpmbuild/RPMS/x86_64/
[root@pbs x86_64]# ls -l
合計 2964
-rw-r--r-- 1 root root 621140 5月 3 11:57 2015 torque-2.5.13-1.cri.x86_64.rpm
-rw-r--r-- 1 root root 152516 5月 3 11:57 2015 torque-client-2.5.13-1.cri.x86_64.rpm
-rw-r--r-- 1 root root 1832336 5月 3 11:57 2015 torque-debuginfo-2.5.13-1.cri.x86_64.rpm
-rw-r--r-- 1 root root 112036 5月 3 11:57 2015 torque-devel-2.5.13-1.cri.x86_64.rpm
-rw-r--r-- 1 root root 40376 5月 3 11:57 2015 torque-scheduler-2.5.13-1.cri.x86_64.rpm
-rw-r--r-- 1 root root 265048 5月 3 11:57 2015 torque-server-2.5.13-1.cri.x86_64.rpm
[root@pbs x86_64]#
}}
&color(red){*};&size(10){rpmbuilderなるユーザを作ってrpmファイルを作るべきなのだろが、面倒なのでしてません};
各役割ごとにインストールするパッケージは異なり、下記のようにします。
|BGCOLOR(yellow):役目|BGCOLOR(yellow):rpm|
|管理ノード|torque-2.5.13-1.cri.x86_64.rpm &br; torque-server-2.5.13-1.cri.x86_64.rpm |
|計算ノード|torque-2.5.13-1.cri.x86_64.rpm &br; torque-client-2.5.13-1.cri.x86_64.rpm |
|ジョブ発行ノード|torque-2.5.13-1.cri.x86_64.rpm |
***管理ノード [#k89e85bb]
&color(orangered){torque-2.5.13-1.cri.x86_64.rpm}; と &color(orangered){torque-server-2.5.13-1.cri.x86_64.rpm};をインストールします。
#code(nonumber){{
[root@pbs ~]# yum localinstall ./rpmbuild/RPMS/x86_64/torque-server-2.5.13-1.cri.x86_64.rpm \
./rpmbuild/RPMS/x86_64/torque-2.5.13-1.cri.x86_64.rpm
}}
&color(red){*};&size(10){epel版のtorqueは、&color(magenta){/var/lib/torque};が起点だったが、ソースからのは&color(magenta){/var/spool/torque};が起点みたい};
インストールと同時に /etc/services に必要なポート情報が追記される。
#code(nonumber){{
# Standard PBS services
pbs 15001/tcp # pbs server (pbs_server)
pbs 15001/udp # pbs server (pbs_server)
pbs_mom 15002/tcp # mom to/from server
pbs_mom 15002/udp # mom to/from server
pbs_resmom 15003/tcp # mom resource management requests
pbs_resmom 15003/udp # mom resource management requests
pbs_sched 15004/tcp # scheduler
pbs_sched 15004/udp # scheduler
}}
しかしpbs_serverサービスの登録がされない...なので手動で登録します。
#code(nonumber){{
[root@pbs ~]# chkconfig --add pbs_server
[root@pbs ~]# chkconfig --list | grep pbs
pbs_server 0:off 1:off 2:off 3:on 4:on 5:on 6:off
[root@pbs ~]#
}}
次に、管理ノードのサイトをserver_nameに定義して、pbs_serverのデータベースを作成する
#code(nonumber){{
[root@pbs ~]# hostname > /var/spool/torque/server_name
[root@pbs ~]# cat /var/spool/torque/server_name
pbs.chaperone.jp
[root@pbs ~]#
[root@pbs ~]# /etc/init.d/pbs_server create
Creating initial TORQUE configuration: PBS_Server: LOG_ERROR::No such file or directory (2) in pbs_init,
unable to stat checkpoint directory /var/spool/torque/checkpoint/, errno 2 (No such file or directory)
PBS_Server: LOG_ERROR::PBS_Server, pbsd_init failed
}}
っとエラーが発生する。[&color(red){Ctrl-C};]で抜ける。調べると/var/spool/torque/checkpointディレクトリがないのが原因っぽい。
なのでディレクトリを作って再度pbs_serverのデータベースを作成する
#code(nonumber){{
[root@pbs ~]# mkdir /var/spool/torque/checkpoint
[root@pbs ~]# /etc/init.d/pbs_server create
Creating initial TORQUE configuration:
}}
っが、このままでずっと停止したままになってしまいます。rcスクリプトを読むと、/var/spool/torque/server_priv にserverdbなるファイルが作成されれば完了になるのだが、ずっとこのまま。仕方ないので再度[&color(red){Ctrl-C};]で抜けたが、抜けた後もバックグランドでこのプロセスが動き続けている。っで rcスクリプト で停止操作を行うとプロセスは終了する。それと同時に serverdb ファイルが作られた。
#code(nonumber){{
[root@pbs ~]# /etc/init.d/pbs_server stop
Shutting down TORQUE Server: [ OK ]
[root@pbs ~]#
[root@pbs ~]# ls -l /var/spool/torque/server_priv/serverdb
-rw------- 1 root root 423 5月 4 03:34 2015 /var/spool/torque/server_priv/serverdb
[root@pbs ~]#
}}
こうして再度pbs_serverを起動すると正常にpbs_serverが動き出す。
#code(nonumber){{
[root@pbs ~]# /etc/init.d/pbs_server start
/var/spool/torque/server_priv/serverdb
Starting TORQUE Server: [ OK ]
[root@pbs ~]#
}}
pbs_serveの稼働後、実行環境の初期設定を確認します。
qmgr(torque-clientパッケージ同封)を使います。
#code(nonumber){{
[root@pbs ~]# qmgr -c 'p s'
#
# Set server attributes.
#
set server acl_hosts = pbs.chaperone.jp
set server log_events = 511
set server mail_from = adm
set server scheduler_iteration = 600
set server node_check_rate = 150
set server tcp_timeout = 6
set server next_job_number = 0
[root@pbs ~]#
}}
初期状態では、ジョブのキューらは作られてません。
***管理ノード・ジョブスケジューラー [#na5d064e]
TORQUE提供のジョブスケジューラ(&color(orange){torque-scheduler};)もいいのだが、
ちょっと複雑なキューを作るには別のスケジューラーが必要みたく、ここでは maui を使用した。
[[http://www.adaptivecomputing.com/products/open-source/maui>+http://www.adaptivecomputing.com/products/open-source/maui]]
ダウンロードに必要事項を入力して、ソースを取得します。
このmauiのコンパイルにtorqueの開発環境が必要なので
#code(nonumber){{
[root@pbs ~]# yum localinstall ./rpmbuild/RPMS/x86_64/torque-devel-2.5.13-1.cri.x86_64.rpm
}}
とした後で、構築を行う
#code(nonumber){{
[root@pbs ~]# gzip -cd maui-3.3.1.tar.gz | tar xf -
[root@pbs ~]# cd maui-3.3.1
[root@pbs maui-3.3.1]#
[root@pbs maui-3.3.1]# ./configure --with-pbs=/usr
[root@pbs maui-3.3.1]# make
[root@pbs maui-3.3.1]# make install
}}
実行環境用のスクリプトを /etc/profile.d に配置します。
#code(nonumber){{
[root@pbs maui-3.3.1]# cp etc/maui.sh etc/maui.csh /etc/profile.d
}}
rcファイルも用意して、自動起動するようにします。
#code(nonumber){{
[root@pbs maui-3.3.1]# cp etc/maui.d /etc/init.d
[root@pbs maui-3.3.1]# vi /etc/init.d/maui.d
- MAUI_PREFIX=/opt/maui
+ MAUI_PREFIX=/usr/local/maui
[root@pbs maui-3.3.1]# chkconfig --add maui.d
[root@pbs maui-3.3.1]# chkconfig maui.d on
[root@pbs maui-3.3.1]# chkconfig --list maui.d
maui.d 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@pbs maui-3.3.1]#
}}
maui.dを起動させます。
#code(nonumber){{
[root@pbs ~]# /etc/init.d/maui.d start
Starting MAUI Scheduler: [ OK ]
[root@pbs ~]#
}}
***計算ノード [#wc74c103]
CentOS6で最小構成で構築して、ntp、nis、nfsへの設定、参加は完了しているとします。
計算ノード(n1, n2, n3)はジョブ発行ノードからのジョブを計算するだけにするので &color(green){torque-2.5.13-1.cri.x86_64.rpm};と&color(green){torque-client-2.5.13-1.cri.x86_64.rpm}; をインストールする。
#code(nonumber){{
[root@pbs ~]# scp rpmbuild/RPMS/x86_64/torque-2.5.13-1.cri.x86_64.rpm root@n1:
[root@pbs ~]# scp rpmbuild/RPMS/x86_64/torque-client-2.5.13-1.cri.x86_64.rpm root@n1:
[root@n1 ~]# yum localinstall ./torque-client-2.5.13-1.cri.x86_64.rpm ./torque-2.5.13-1.cri.x86_64.rpm
}}
計算ノードに、管理ノード先を定義してpbs_momサービスを稼働させます
#code(nonumber){{
[root@n1 ~]# vi /var/spool/torque/mom_priv/config
$pbsserver pbs
[root@n1 ~]# chkconfig --list pbs_mom
pbs_mom 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@n1 ~]#
[root@n1 ~]# reboot
}}
&color(red){*};&size(10){/var/spool/torque/server_nameはそのままlocalhostでもいいみたい};
***ジョブ発行ノード [#z418ea4b]
計算ノードと同じようにntp、nis、nfsを設定して、epelからは、torque-client をインストールします。
#code(nonumber){{
[root@pbs ~]# scp rpmbuild/RPMS/x86_64/torque-2.5.13-1.cri.x86_64.rpm root@client:
[root@client ~]# yum localinstall ./torque-2.5.13-1.cri.x86_64.rpm
}}
ジョブ発行ノードに、管理ノード先を定義します。
#code(nonumber){{
[root@client ~]# vi /var/spool/torque/server_name
pbs
[root@client ~]#
}}
ここで通信テストを行ってみます。ここから qmgr コマンドを使ってみます
#code(nonumber){{
[root@client ~]# qmgr -c 'p s'
#
# Set server attributes.
#
set server acl_hosts = pbs.chaperone.jp
set server log_events = 511
set server mail_from = adm
set server scheduler_iteration = 600
set server node_check_rate = 150
set server tcp_timeout = 6
set server next_job_number = 0
[root@client ~]#
}}
&color(red){*};root以外のユーザでも同様の結果を表示します。
***キューの作成 [#idcfec56]
ここでは単純なキューを作成してみます。3台の計算ノードを2グループに分け、n1はbio、n2とn3はchemのグループとします。
っで全ノードを使うキュー「batch」とグループ2つのキュー「bio」と「chem」を作ってみます。
まずは、計算ノードを定義します。
#code(nonumber){{
[root@pbs ~]# vi /var/spool/torque/server_priv/nodes
n1 np=1 bio
n2 np=2 chem
n3 np=3 chem
[root@pbs ~]#
}}
そして、管理ノードのpbs_serverサービスを再起動して、各計算ノードから状況が届くかをテスト
#code(nonumber){{
[root@pbs ~]# /etc/init.d/pbs_server restart
Shutting down TORQUE Server: [ OK ]
/var/lib/torque/server_priv/serverdb
Starting TORQUE Server: [ OK ]
[root@pbs ~]#
[root@pbs ~]# pbsnodes
n1
state = free
np = 1
properties = bio
ntype = cluster
status = rectime=1430679323,varattr=,jobs=,state=free,netload=654466,gres=,loadave=0.00,ncpus=1,(略
gpus = 0
n2
state = free
np = 2
properties = chem
ntype = cluster
status = rectime=1430679323,varattr=,jobs=,state=free,netload=1169164,gres=,loadave=0.00,ncpus=2,(略
gpus = 0
n3
state = free
np = 3
properties = chem
ntype = cluster
status = rectime=1430679326,varattr=,jobs=,state=free,netload=19188,gres=,loadave=0.02,ncpus=3,(略
gpus = 0
[root@pbs ~]#
}}
と各計算ノードから現状のstatusが送られてきた。
っで、ではキューを作成してみる。&color(red){*};&size(10){SGEではこの部分が皆目わからず撤退した。。。};
はじめにキー「batch」を作ります。全ノードを使用するキューです。
#code(nonumber){{
[root@pbs ~]# qmgr -c "create queue batch queue_type=execution"
}}
すると、&color(blueviolet){/var/spool/torque/server_priv/queues/};というファイルが作成されます。
このままではキー「batch」は使用できず、設定をさらに加えます。
#code(nonumber){{
[root@pbs ~]# qmgr -c "set queue batch started=true" この[batch]は、スケジューラに投ずるか
[root@pbs ~]# qmgr -c "set queue batch enabled=true" この[batch]は、queueを受け付けるか
[root@pbs ~]# qmgr -c "set queue batch resources_default.nodes=1" この[batch]は、標準1計算ノード使います
[root@pbs ~]# qmgr -c "set queue batch resources_default.walltime = 240:00:00" 投下[batch]は10日間有効
[root@pbs ~]# qmgr -c "set queue batch resources_default.cput = 480:00:01" 計算中[batch]は20日間実行可能
[root@pbs ~]# qmgr -c "set server default_queue = batch" この[batch]を既定のキューとする
}}
キー「bio」「chem」は下記の様に作成します。
#code(nonumber){{
[root@pbs ~]# qmgr -c "create queue bio queue_type=execution"
[root@pbs ~]# qmgr -c "set queue bio resources_default.neednodes=bio"
[root@pbs ~]# qmgr -c "set queue bio started=true"
[root@pbs ~]# qmgr -c "set queue bio enabled=true"
[root@pbs ~]# qmgr -c "set queue bio resources_default.nodes=1"
[root@pbs ~]# qmgr -c "create queue chem queue_type=execution"
[root@pbs ~]# qmgr -c "set queue chem resources_default.neednodes=chem"
[root@pbs ~]# qmgr -c "set queue chem started=true"
[root@pbs ~]# qmgr -c "set queue chem enabled=true"
[root@pbs ~]# qmgr -c "set queue chem resources_default.nodes=1"
}}
この段階で&color(blueviolet){/var/spool/torque/server_priv/queues/};には3種のファイルが作成されます。
#code(nonumber){{
[root@pbs ~]# ls -l /var/spool/torque/server_priv/queues/
合計 12
-rw------- 1 root root 1162 5月 4 04:10 2015 batch
-rw------- 1 root root 1036 5月 4 04:10 2015 bio
-rw------- 1 root root 1037 5月 4 04:11 2015 chem
[root@pbs ~]#
}}
もしキー「batch」を削除したければ、コマンドラインから
#code(nonumber){{
[root@pbs ~]# qmgr -c "delete queue batch"
}}
とすれば削除されます。
***テスト [#afff7fa9]
ごくごく簡単なテストなら
#code(nonumber){{
[saber@client ~]$ echo "sleep 30" | qsub
22.pbs.chaperone.jp
[saber@client ~]$
}}
として、直後にpbsnodesで稼働対象を確認します
#code(nonumber){{
[saber@client ~]$ pbsnodes
n1
state = job-exclusive
np = 1
properties = bio
ntype = cluster
jobs = 0/22.pbs.chaperone.jp
status = rectime=1417352630,varattr=,jobs=,state=free,netload=1500810,gres=,loadave=0.00,ncpus=1(略
gpus = 0
n2
state = free
np = 2
properties = chem
ntype = cluster
status = rectime=1417352674,varattr=,jobs=,state=free,netload=1015618,gres=,loadave=0.00,ncpus=2,(略
gpus = 0
n3
state = free
np = 3
properties = chem
ntype = cluster
status = rectime=1417352674,varattr=,jobs=,state=free,netload=1082488,gres=,loadave=0.00,ncpus=3,(略
gpus = 0
[saber@client ~]$
}}
とn1にて稼働しているのが分かります。
あとはバッチジョブファイルを作成して、実行してみます
#code(nonumber){{
[saber@client ~]$ cat a.sh
#!/bin/sh
#PBS -l nodes=1:ppn=1
sleep 10
echo "ok"
[saber@client ~]$
[saber@client ~]$ qsub a.sh
23.pbs.chaperone.jp
[saber@client ~]$
}}
暫くすると結果が戻ってきて
#code(nonumber){{
[saber@client ~]$ ls -l
合計 8
-rw-r--r-- 1 saber fate 52 11月 30 14:44 2014 a.sh
-rw------- 1 saber fate 0 11月 30 22:07 2014 a.sh.e23
-rw------- 1 saber fate 3 11月 30 22:07 2014 a.sh.o23
[saber@client ~]$ cat a.sh.o23
ok
[saber@client ~]$
}}
となる。