コンパイルによる導入
apt-get と異なる点
- apt-getによる導入 では、サーバとノードでインストールするパッケージが異なった
- コンパイルによる導入では、サーバとノードに同じものをインストールするが、それぞれの実行ファイルの起動の ON/OFF を制御することで、サーバとノードを分ける
手順
Torque 6.0.1 on Ubuntu 14.04 でのインストール手順です
- ホスト名の設定
$ sudoedit /etc/hosts
- 127.0.0.1 は localhost からホスト名に変更
- 127.0.1.1 はコメントアウト
- ノードのホスト名も入れていく
- パッケージを http://www.adaptivecomputing.com/products/open-source/torque/ からダウンロード
- ここでは、「torque-6.0.1-1456945733_daea91b.tar.gz」というファイル名でホームにダウンロードしたとする)
- パッケージを展開
$ tar axvf torque-6.0.1-1456945733_daea91b.tar.gz
- 必要なパッケージをインストール
$ sudo apt-get install libssl-dev libboost-dev
- インストールのための設定
$ cd torque-6.0.1-1456945733_daea91b $ ./configure --prefix=/usr/local --with-default-server=hoge
–prefix
: インストール先 (今回は /usr/local 以下に bin や lib が展開するようにした)–with-default-server
: サーバ名 (apt-get でインストールした際の /var/spool/torque/server_name の設定が不要になる)
- コンパイル
$ make
- マルチスレッド環境であれば、
-j
オプションを付けてスレッド数を指定すると速くコンパイルできる
- インストール (コンパイルしたものをインストール指定先にコピー)
$ sudo make install
- 1〜6 の作業を行った場所が NFS で共有され、計算機の構成が同じ場合、別ノードでの作業は 1〜6 の作業を省略できる。その場合、別ノードにログインした後、cd で同じパスに移動し、
sudo make install
するだけで良い。 - なお、/var/spool のパーミッションの設定などは自動で処理されている
- ポートの設定 (/etc/services を編集する; 以下を追記する)
pbs 15001/tcp pbs_mom 15002/tcp pbs_resmom 15003/tcp pbs_resmom 15003/udp pbs_sched 15004/tcp
- ライブラリの登録
- .bashrc や .zshrc に以下を追記
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
- ライブラリの追加
$ sudoedit /etc/ld.so.conf.d/torque.conf
- 内容
/usr/local/lib
- ライブラリの適用
sudo ldconfig
- .bashrc や .zshrc を再読み込み
- bash の場合
$ source ~/.bashrc
- zsh の場合
$ source ~/.zshrc
- デーモンの登録
- /etc/init.d 配下に Ubuntu パッケージでインストールされるスクリプトを配置する
- ただし、実行パスを変更する
- torque-mom については trqauthd も実行させる必要があるため、trqauthd の実行も加える
- 以下の条件で配置する
- サーバ側(サーバでもジョブを処理させる場合): torque-server, torque-mom, torque-scheduler を配置
- サーバ側 (サーバでジョブを処理させない場合): torque-server, torque-scheduler を配置
- ノード側: torque-mom を配置
- 編集済みのスクリプト
- torque-server
- torque-server
#! /bin/sh ### BEGIN INIT INFO # Provides: torque-server # Required-Start: $remote_fs $local_fs $named $network $time # Required-Stop: $remote_fs $local_fs $named $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start and stop the PBS server # Description: PBS is a versatile batch system for SMPs and clusters. # This script controls the server process. ### END INIT INFO PATH=/usr/sbin:/usr/bin:/sbin:/bin DAEMON=/usr/sbin/pbs_server NAME=torque-server DESC="Torque batch queue server" PIDFILE=/var/spool/torque/server_priv/server.lock test -x $DAEMON || exit 0 # Include torque defaults if available if [ -f /etc/default/torque-server ]; then . /etc/default/torque-server elif [ -f /etc/default/torque ]; then . /etc/default/torque fi # Load lsb functions . /lib/lsb/init-functions case "$1" in start) log_daemon_msg "Starting $DESC" if [ ! -r /var/spool/torque/server_priv/serverdb ]; then DAEMON_SERVER_OPTS="-t create $DAEMON_SERVER_OPTS" fi log_progress_msg "$NAME" start-stop-daemon --start --quiet --pidfile $PIDFILE \ --exec $DAEMON -- $DAEMON_SERVER_OPTS log_end_msg $? ;; stop) log_daemon_msg "Stopping $DESC" "$NAME" start-stop-daemon --stop --quiet --pidfile $PIDFILE \ --exec $DAEMON log_end_msg $? ;; reload|force-reload) log_daemon_msg "Reloading $DESC configuration files" "$NAME" start-stop-daemon --stop --signal 1 --quiet \ --pidfile $PIDFILE --exec $DAEMON log_end_msg $? ;; restart) $0 stop && sleep 2 && $0 start ;; *) N=/etc/init.d/`basename $0` echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2 exit 1 ;; esac exit 0
- torque-mom
- torque-mom
#! /bin/sh ### BEGIN INIT INFO # Provides: torque-mom # Required-Start: $remote_fs $local_fs $named $network # Required-Stop: $remote_fs $local_fs $named $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start and stop the PBS Mom # Description: PBS is a versatile batch system for SMPs and clusters. # This script controls the mom process. ### END INIT INFO PATH=/usr/sbin:/usr/bin:/sbin:/bin DAEMON=/usr/sbin/pbs_mom NAME=torque-mom DESC="Torque Mom" PIDFILE=/var/spool/torque/mom_priv/mom.lock test -x $DAEMON || exit 0 # Include defaults if available if [ -f /etc/default/$NAME ] ; then . /etc/default/$NAME fi # Load lsb functions . /lib/lsb/init-functions case "$1" in start) log_daemon_msg "Starting $DESC" "$NAME" start-stop-daemon --start --quiet --pidfile $PIDFILE \ --exec $DAEMON -- $DAEMON_OPTS log_end_msg $? ;; stop) log_daemon_msg "Stopping $DESC" "$NAME" start-stop-daemon --stop --quiet --pidfile $PIDFILE \ --exec $DAEMON log_end_msg $? ;; reload|force-reload) log_daemon_msg "Reoading $DESC configuration files" "$NAME" start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE \ --exec $DAEMON log_end_msg $? ;; restart) log_daemon_msg "Restarting $DESC" "$NAME" start-stop-daemon --stop --quiet --pidfile $PIDFILE \ --exec $DAEMON sleep 1 start-stop-daemon --start --quiet --pidfile $PIDFILE \ --exec $DAEMON -- $DAEMON_OPTS log_end_msg $? ;; *) N=/etc/init.d/$NAME log_action_msg "Usage: /etc/init.d/torque-mom {start|stop|restart|reload|force-reload}" exit 2 ;; esac exit 0
- torque-scheduler
- torque-scheduler
#! /bin/sh ### BEGIN INIT INFO # Provides: torque-scheduler # Required-Start: $all # Required-Stop: $all # Should-Start: $all # Should-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start and stop the Torque scheduler # Description: PBS is a versatile batch system for SMPs and clusters. # This script controls the scheduler. ### END INIT INFO PATH=/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/sbin/pbs_sched NAME=torque-scheduler DESC="Torque scheduler" PIDFILE=/var/spool/torque/sched_priv/sched.lock test -x $DAEMON || exit 0 # Include defaults if available if [ -f /etc/default/$NAME ] ; then . /etc/default/$NAME elif [ -f /etc/default/torque ]; then . /etc/default/torque fi # set -e cannot work, otherwise the log_end_msg will not be shown # set -e # Load lsb functions . /lib/lsb/init-functions case "$1" in start) log_begin_msg "Starting $DESC: " start-stop-daemon --start --quiet \ --pidfile $PIDFILE \ --exec $DAEMON -- $DAEMON_OPTS log_end_msg $? ;; stop) log_begin_msg "Stopping $DESC: " start-stop-daemon --stop --quiet \ --pidfile $PIDFILE \ --exec $DAEMON log_end_msg $? ;; reload) # send a SIGHUP to force scheduler to reload config file log_begin_msg "Reloading $DESC configuration files" start-stop-daemon --stop --signal 1 --quiet \ --pidfile $PIDFILE \ --exec $DAEMON log_end_msg $? ;; force-reload) # check whether $DAEMON is running. If so, restart start-stop-daemon --stop --test --quiet \ --pidfile $PIDFILE \ --exec $DAEMON \ && $0 restart \ || exit 0 ;; restart) log_begin_msg "Restarting $DESC: " start-stop-daemon --stop --quiet \ --pidfile $PIDFILE \ --exec $DAEMON sleep 1 start-stop-daemon --start --quiet \ --pidfile $PIDFILE \ --exec $DAEMON -- $DAEMON_OPTS log_end_msg $? ;; *) N=/etc/init.d/`basename $0` log_success_msg "Usage: $N {start|stop|restart|force-reload}" exit 1 ;; esac exit 0
- 計算機起動時に起動するように設定
$ sudo apt-get install sysv-rc-conf $ cd /etc/init.d $ sudo sysv-rc-conf 起動させたいスクリプト on
- 以下の条件で起動させたいスクリプトを on にする
- サーバ側(サーバでもジョブを処理させる場合): torque-server, torque-mom, torque-scheduler
- サーバ側 (サーバでジョブを処理させない場合): torque-server, torque-scheduler
- ノード側: torque-mom
GPUノードでの手順
- 手順 の 5 の configure が異なる
- nvml のために、CUDA の他に GPU develop kit を GPU Deployment Kit | NVIDIA Developer からダウンロード
- GPU develop kit のインストール
$ chmod +x linux_amd64_352_79_release.run $ sudo ./linux_amd64_352_79_release.run
- コンパイル情報のクリア
$ cd torque-6.0.1-1456945733_daea91b $ make distclean
- インストールのための設定
$ ./configure --prefix=/usr/local --with-default-server=hoge --enable-nvidia-gpus --with-nvml-include=/usr/include/nvidia/gdk --with-nvml-lib=/usr/lib/x86_64-linux-gnu --with-hwloc-path=/usr/include
–prefix
: インストール先 (今回は /usr/local 以下に bin や lib が展開するようにした)–with-default-server
: サーバ名 (apt-get でインストールした際の /var/spool/torque/server_name の設定が不要になる)–enable-nvidia-gpus
: torque-mom で GPU を使うノード–with-nvml-include
: nvml のインクルードファイルのあるディレクトリのパス–with-nvml-lib
: nvml のライブラリファイルのあるディレクトリのパス–with-hwloc-path
: hwloc のあるディレクトリのパス
- 手順 の 6 以降の作業を GPU ノードで実行
参考サイト
- Torque のインストール
Torque - Game Lab -PukiWiki- - マシン起動時のスクリプト起動
【Ubuntu】OS起動時に自作スクリプトを動かす - ムーワァとデーヴァの私生活 - GPU ノードでのインストール
TORQUE NVIDIA GPGPUs