ジョブコントローラ。SGEと役目は同じなのだが、正直SGEは愚生には重すぎました。わからん...っで
slurmと共にTORQUEも検討した次第。slurmよりもネットに転がっている情報量が多いようで、
こちらTORQUEを使ってみる。
NIS/NFS構成で/home,/Applが共有され全マシンで同一のアカウントが使用可能であるとする。
またsshで他マシンにパスワードなしでログインできるようにSSHホストベース認証も用意されているとする。
*sshならsamba42/SSOで調整した方が楽かも
*rshならもっと簡単に他マシンへのログインが可能です。むしろこっちがいいかもね。ただしTOQRUEのリコンパイルが必要みたいTORQUE/rsh
その上で下記のような構成でTORQUEを試してみる。

IPとか役目は下記参照
| 役目 | ホスト名 | IPアドレス | core数 | 備考 |
| 管理ノード | pbs.chaperone.jp | 192.168.0.57 | 1 | nis/AD参加は必須 |
| 計算ノード | n1.chaperone.jp | 192.168.0.52 | 1 | pbs_momが稼働 実際の計算を行う |
| 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 |
*各マシンはCentOS6で最小構成で構築されている。ntpも導入する。NIS、NFSはそれぞれ参照の事
epelのリポジトリから入手可能。昨年(2014)までは torque-2.5.7 が提供されていたが、今年(2015)になったら torque-4.2.10 に差し替えられてた。開発元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を使うなら要注意。
まず、開発元からソースを取得します。
[root@pbs ~]# wget http://adaptive.wpengine.com/resources/downloads/torque/torque-2.5.13.tar.gz中身を確認すると spec ファイル(torque.spec)があった。なので、これを使ってrpmファイルを作成して、rpmでインストールします。
*開発環境は既に導入済とします。yum groupinstall "Development tools"
[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]#*rpmbuilderなるユーザを作ってrpmファイルを作るべきなのだろが、面倒なのでしてません
各役割ごとにインストールするパッケージは異なり、下記のようにします。
| 役目 | rpm |
| 管理ノード | torque-2.5.13-1.cri.x86_64.rpm torque-server-2.5.13-1.cri.x86_64.rpm |
| 計算ノード | torque-2.5.13-1.cri.x86_64.rpm torque-client-2.5.13-1.cri.x86_64.rpm |
| ジョブ発行ノード | torque-2.5.13-1.cri.x86_64.rpm |
torque-2.5.13-1.cri.x86_64.rpm と torque-server-2.5.13-1.cri.x86_64.rpmをインストールします。
[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*epel版のtorqueは、/var/lib/torqueが起点だったが、ソースからのは/var/spool/torqueが起点みたい
インストールと同時に /etc/services に必要なポート情報が追記される。
# 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サービスの登録がされない...なので手動で登録します。
[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のデータベースを作成する
[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っとエラーが発生する。[Ctrl-C]で抜ける。調べると/var/spool/torque/checkpointディレクトリがないのが原因っぽい。
なのでディレクトリを作って再度pbs_serverのデータベースを作成する
[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なるファイルが作成されれば完了になるのだが、ずっとこのまま。仕方ないので再度[Ctrl-C]で抜けたが、抜けた後もバックグランドでこのプロセスが動き続けている。っで rcスクリプト で停止操作を行うとプロセスは終了する。それと同時に serverdb ファイルが作られた。
[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が動き出す。
[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パッケージ同封)を使います。
[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 ~]#初期状態では、ジョブのキューらは作られてません。
TORQUE提供のジョブスケジューラ(torque-scheduler)もいいのだが、
ちょっと複雑なキューを作るには別のスケジューラーが必要みたく、ここでは maui を使用した。
http://www.adaptivecomputing.com/products/open-source/maui
ダウンロードに必要事項を入力して、ソースを取得します。
このmauiのコンパイルにtorqueの開発環境が必要なので
[root@pbs ~]# yum localinstall ./rpmbuild/RPMS/x86_64/torque-devel-2.5.13-1.cri.x86_64.rpmとした後で、構築を行う
[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 に配置します。
[root@pbs maui-3.3.1]# cp etc/maui.sh etc/maui.csh /etc/profile.drcファイルも用意して、自動起動するようにします。
[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を起動させます。
[root@pbs ~]# /etc/init.d/maui.d start
Starting MAUI Scheduler: [ OK ]
[root@pbs ~]#CentOS6で最小構成で構築して、ntp、nis、nfsへの設定、参加は完了しているとします。
計算ノード(n1, n2, n3)はジョブ発行ノードからのジョブを計算するだけにするので torque-2.5.13-1.cri.x86_64.rpmとtorque-client-2.5.13-1.cri.x86_64.rpm をインストールする。
[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サービスを稼働させます
[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*/var/spool/torque/server_nameはそのままlocalhostでもいいみたい
計算ノードと同じようにntp、nis、nfsを設定して、epelからは、torque-client をインストールします。
[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ジョブ発行ノードに、管理ノード先を定義します。
[root@client ~]# vi /var/spool/torque/server_name
pbs
[root@client ~]#ここで通信テストを行ってみます。ここから qmgr コマンドを使ってみます
[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 ~]#*root以外のユーザでも同様の結果を表示します。
ここでは単純なキューを作成してみます。3台の計算ノードを2グループに分け、n1はbio、n2とn3はchemのグループとします。
っで全ノードを使うキュー「batch」とグループ2つのキュー「bio」と「chem」を作ってみます。
まずは、計算ノードを定義します。
[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サービスを再起動して、各計算ノードから状況が届くかをテスト
[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が送られてきた。
っで、ではキューを作成してみる。*SGEではこの部分が皆目わからず撤退した。。。
はじめにキー「batch」を作ります。全ノードを使用するキューです。
[root@pbs ~]# qmgr -c "create queue batch queue_type=execution"すると、/var/spool/torque/server_priv/queues/というファイルが作成されます。
このままではキー「batch」は使用できず、設定をさらに加えます。
[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」は下記の様に作成します。
[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"この段階で/var/spool/torque/server_priv/queues/には3種のファイルが作成されます。
[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」を削除したければ、コマンドラインから
[root@pbs ~]# qmgr -c "delete queue batch"とすれば削除されます。
ごくごく簡単なテストなら
[saber@client ~]$ echo "sleep 30" | qsub
22.pbs.chaperone.jp
[saber@client ~]$として、直後にpbsnodesで稼働対象を確認します
[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にて稼働しているのが分かります。
あとはバッチジョブファイルを作成して、実行してみます
[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 ~]$暫くすると結果が戻ってきて
[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 ~]$となる。