ジョブコントローラ。SGEと役目は同じなのだが、正直SGEは愚生には重すぎました。わからん...っで
slurmと共にTORQUEも検討した次第。slurmよりもネットに転がっている情報量が多いようで、
こちらTORQUEを使ってみる。

全体像

NIS/NFS構成で/home,/Applが共有され全マシンで同一のアカウントが使用可能であるとする。
またsshで他マシンにパスワードなしでログインできるようにSSHホストベース認証も用意されているとする。
*sshならsamba42/SSOで調整した方が楽かも
*rshならもっと簡単に他マシンへのログインが可能です。むしろこっちがいいかもね。ただしTOQRUEのリコンパイルが必要みたいTORQUE/rsh
その上で下記のような構成でTORQUEを試してみる。
2015y05m03d_002600978.png
IPとか役目は下記参照

役目ホスト名IPアドレスcore数備考
管理ノードpbs.chaperone.jp192.168.0.571nis/AD参加は必須
計算ノードn1.chaperone.jp192.168.0.521pbs_momが稼働
実際の計算を行う
n2.chaperone.jp192.168.0.532
n3.chaperone.jp192.168.0.543
ジョブ発行ノードclient.chaperone.jp192.168.0.201qsub,qstat

*各マシンはCentOS6で最小構成で構築されている。ntpも導入する。NISNFSはそれぞれ参照の事

TORQUEソフトウエア

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.rpmtorque-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.d

rcファイルも用意して、自動起動するようにします。

[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.rpmtorque-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 ~]$

となる。


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2017-09-11 (月) 08:26:13 (1135d)