OpenPBS設定(サーバ編)


(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

Comments are closed.