(1)「OpenPBS」をインストールする。
「OpenPBS」をダウンロードする。ダウンロード方法は以下URLを参照のこと。
http://www.kurobuti.com/linux_server/?page_id=196
ダウンロードしてきた「OpenPBS_2_3_16.tar.gz」を管理サーバへアップロードし解凍する。
[root@kanri ~]# tar zxvf OpenPBS_2_3_16.tar.gz
(2)「OpenPBS」のインストールに必要なパッケージをインストールする。
[root@kanri ~]# yum -y install tk-devel tcl-devel gcc
(3)「OpenPBS」の「configure」を行う。
[root@kanri ~]# cd OpenPBS_2_3_16 [root@kanri OpenPBS_2_3_16]# ./configure --prefix=/usr/local/pbs --set-default-server=kanri.local --set-server-home=/var/spool/pbs
–prefixオプション:インストール先ディレクトリを指定する。
–set-default-serverオプション:管理サーバを指定する。
–set-server-homeオプション:「OpenPBS」の設定ファイルを保存する保存先ディレクトリを指定する。
(4)「OpenPBS」のコンパイルを行う。
[root@kanri OpenPBS_2_3_16]# make
■以下は「make」を実行し結果のエラーが発生した場合の対処法です。
make[4]: ディレクトリ `/root/OpenPBS_2_3_16/src/lib/Libattr' に入ります make[4]: *** `attr_atomic.o' に必要なターゲット `' を make するルールがありませ ん. 中止. make[4]: ディレクトリ `/root/OpenPBS_2_3_16/src/lib/Libattr' から出ます make[3]: *** [all] エラー 2 make[3]: ディレクトリ `/root/OpenPBS_2_3_16/src/lib/Libattr' から出ます make[2]: *** [all] エラー 2 make[2]: ディレクトリ `/root/OpenPBS_2_3_16/src/lib' から出ます make[1]: *** [all] エラー 2 make[1]: ディレクトリ `/root/OpenPBS_2_3_16/src' から出ます make: *** [all] エラー 2
「~/Openpbs_2_3_16/buildutils/makedepend-sh」の576行目~580行目を以下のように書き換える。
・修正前
eval $CPP $arg_cc $d/$s $errout | \ sed -n -e "s;^\# [0-9][0-9 ]*\"\(.*\)\";$f: \1;p" | \ grep -v "$s\$" | \ sed -e 's;\([^ :]*: [^ ]*\).*;\1;' \ >> $TMP
・修正後
eval $CPP $arg_cc $d/$s $errout | \ sed -n -e "s;^\# [0-9][0-9 ]*\"\(.*\)\";$f: \1;p" | \ grep -v "$s\$" | \ grep -v ">$" | \ sed -e 's;\([^ :]*: [^ ]*\).*;\1;' \ >> $TMP
「~/OpenPBS_2_3_16/src/lib/Liblog/pbs_log.c」と「~OpenPBS_2_3_16/src/server/svr_connect.c」に「#include <errno.h>」を追加する。
「~/OpenPBS_2_3_16/src/include/pbs_nodes.h」の196行目を書き換える。
・修正前
extern struct attribute_def node_attr_def[]; /* node attributes defs */
・修正後
extern struct attribute_def *node_attr_def[]; /* node attributes defs */
「~/OpenPBS_2_3_16/src/gui/Ccode/xpbs_scriptload.c」の728行目を書き換える。
・修正前
tmpnam(tmp_name);
・修正後
mkstemp(tmp_name);
エラーの修正後、再度「configure」を実行する。
[root@kanri OpenPBS_2_3_16]# ./configure --prefix=/usr/local/pbs --set-default-server=kanri.local --set-server-home=/var/spool/pbs
エラー修正したものを共有している「/tmp」にコピーしておく。
(5)無事に、「configure」が終了すれば、「make」「make install」を実行する。
[root@kanri OpenPBS_2_3_16]# make && make install
注)エラーを修正した「OpenPBS_2_4_16」は計算ノード側で使用するので共有ディレクトリ「/tmp」にコピーしておきます。 (6)「OpenPBS」が使うポートを「/etc/services」に記述する。
[root@kanri ~]# vi /etc/services pbs 15001/tcp # pbs server (pbs_server) pbs_mom 15002/tcp # 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
(7)インストール後、「PBS」のデータベースを初期化する。
[root@kanri OpenPBS_2_3_16]# /usr/local/pbs/sbin/pbs_server -t create
(8)上記コマンドの実行で、「pbs_server」はデータベースを初期化すると同時にデーモンプロセスとして走り、「qmgr(キューマネージャー)」からの命令で設定が可能となる。「qmgr」を実行すると次のようにプロンプトが表示される。
[root@kanri OpenPBS_2_3_16]# /usr/local/pbs/bin/qmgr Max open servers: 4 Qmgr:
(9)「qmgr」が操作できる状態を確認できれば、「queue」の作成を行う。テストキューとして「tqueue」と言う名前で作成してみる。
[root@kanri OpenPBS_2_3_16]# /usr/local/pbs/bin/qmgr Max open servers: 4 Qmgr: create queue tqueue queue_type = execution Qmgr: set queue tqueue enabled = true Qmgr: set queue tqueue started = true Qmgr: set server default_queue = tqueue Qmgr: set server scheduling = true Qmgr: set queue tqueue resources_max.ncpus = 2 ← # ここにはキューに割り当てるCPU数を指定しています。各自環境に合わせてください。 Qmgr: set queue tqueue resources_max.nodes = 2 ← # ここにはキューに割り当てるノード数を指定しています。各自環境に合わせてください。
(10)作成した「queue」の確認を行う。
Qmgr: print server # # Create queues and set their attributes. # # # Create and define queue tqueue # create queue tqueue set queue tqueue queue_type = Execution set queue tqueue resources_max.ncpus = 2 set queue tqueue resources_max.nodes = 2 set queue tqueue enabled = True set queue tqueue started = True # # Set server attributes. # set server scheduling = True set server default_queue = tqueue set server log_events = 511 set server mail_from = adm set server scheduler_iteration = 600
上の結果のように「tqueue」が作成されていれば大丈夫です。
(11)この設定を保存したい場合は、「qmgr」コマンドを標準入力から与えてファイルにリダイレクトすることができる。そして逆に、このファイルをリダイレクトで「qmgr」コマンドへ与えるとファイルからの設定ができるので、初期化して作り直す時にいは便利。
[root@kanri OpenPBS_2_3_16]# echo "p s " | /usr/local/pbs/bin/qmgr > print_server.out [root@kanri OpenPBS_2_3_16]# cat print_server.out Max open servers: 4 # # Create queues and set their attributes. # # # Create and define queue tqueue # create queue tqueue set queue tqueue queue_type = Execution set queue tqueue resources_max.ncpus = 2 set queue tqueue resources_max.nodes = 2 set queue tqueue enabled = True set queue tqueue started = True # # Set server attributes. # set server scheduling = True set server default_queue = tqueue set server log_events = 511 set server mail_from = adm set server scheduler_iteration = 600
設定を戻す場合
[root@kanri ~]# /usr/local/torque/bin/qmgr < print_server.out
(12)「qmgr」の「list」コマンドで「queue」の属性が表示できる。
[root@kanri mpich-1.2.7p1]# /usr/local/pbs/bin/qmgr Qmgr: list queue tqueue Queue tqueue queue_type = Execution total_jobs = 0 state_count = Transit:0 Queued:0 Held:0 Waiting:0 Running:0 Exiting:0 resources_max.ncpus = 2 resources_max.nodes = 2 resources_assigned.ncpus = 0 resources_assigned.nodect = 0 enabled = True started = True Qmgr:
(13)「OpenPBS」のデフォルト構成では、FIFOスケジューラが利用可能となる。このスケジューラの設定は「$OpenPBS/sched_priv/sched_config」で行える。「OpenPBS」では、ノード毎にジョブの本数制限ができないので、ここではロードバランシングでジョブの本数制限をかける。また、ジョブの大小によるソートはしない。
[root@kanri ~]# vi /var/spool/pbs/sched_priv/sched_config load_balancing: false ALL ↓# 変更 load_balancing: true ALL sort_by: shortest_job_first ALL ↓# 変更 sort_by: no_sort ALL
(14)「queue server(pbs_server)」を停止する。
「pbs_server」と「pbs_sched」の設定が整ったら、データベース初期化のために走らせた「pbs_server」を一旦停止する。
[root@kanri ~]# killall pbs_server
(15)「OpenPBS」の起動スクリプトを作成する。
[root@kanri ~]# vi /etc/rc.d/init.d/pbs #!/bin/sh # # pbs This script will start and stop the PBS daemons # # chkconfig: 345 85 85 # description: PBS is a batch versitle batch system for SMPs and clusters # # Source the library functions . /etc/rc.d/init.d/functions PBS_HOME=/var/spool/pbs # let see how we were called case "$1" in start) echo "Starting PBS daemons: " if [ -x /usr/local/pbs/sbin/pbs_mom ] ; then if [ -f $PBS_HOME/mom_priv/config ] ; then echo -n "Starting pbs_mom: " daemon /usr/local/pbs/sbin/pbs_mom echo fi fi if [ -x /usr/local/pbs/sbin/pbs_sched ] ; then if [ -d $PBS_HOME/sched_priv ] ; then echo -n "Starging pbs_sched: " daemon /usr/local/pbs/sbin/pbs_sched echo fi fi if [ -x /usr/local/pbs/sbin/pbs_server ] ; then if [ -d $PBS_HOME/server_priv ] ; then echo -n "Starting pbs_server: " daemon /usr/local/pbs/sbin/pbs_server -a true echo fi fi ;; stop) echo "Shutting down PBS: " if [ -x /usr/local/pbs/sbin/pbs_server ] ; then if [ -d $PBS_HOME/server_priv ] ; then echo -n "Stopping pbs_server: " killproc pbs_server echo fi fi if [ -x /usr/local/pbs/sbin/pbs_sched ] ; then if [ -d $PBS_HOME/sched_priv ] ; then echo -n "Stopping pbs_sched: " killproc pbs_sched echo fi fi if [ -x /usr/local/pbs/sbin/pbs_mom ] ; then if [ -f $PBS_HOME/mom_priv/config ] ; then echo -n "Stopping pbs_mom: " killproc pbs_mom echo fi fi ;; status) status pbs_server status pbs_mom status pbs_sched ;; restart) echo "Restarting PBS" $0 stop $0 start echo "done." ;; *) echo "Usage: pbs {start|stop|restart|status}" exit 1 esac
(16)計算に使用するノードファイルを作成する。
[root@kanri ~]# vi /var/spool/pbs/server_priv/nodes node1 np=1 node2 np=1
npオプション:ノードが搭載しているCPU(コア)の数を指定
注)「node」ファイルに記述するホスト名は名前解決出来るように「/etc/hosts」に記述すること。
(17)「OpenPBS」を起動する。
[root@kanri ~]# chmod 755 /etc/rc.d/init.d/pbs [root@kanri ~]# /etc/rc.d/init.d/pbs start Starting PBS daemons: Starging pbs_sched: [ OK ] Starting pbs_server: [ OK ]
(18)「OpenPBS」のパスを通す。パスの通し方は、以下URL(4)を参照のこと。
http://www.kurobuti.com/linux_server/?page_id=147
参考文献
1. http://www.unipg.it/carlo/OpenPBS_Debian.html