CentOSでのTorqueの設定

# Torqueのインストール
~~**注意**:~~ ~~以下の設定では、NIS+NFSで組んだシステム内のノード間を跨いでのMPIは実行できない。[^1]スレッド並列のみならず、MPI並列に関しても、ノード内の利用に限られる。~~
これは、torqueの設定ではなくて、そもそもMPIの設定に関連した不足に起因する可能性が高い。[MPIの環境構築や基本コマンドのまとめ - Qiita](https://qiita.com/kkk627/items/49c9c35301465f6780fa) (2019/08/19)


## CentOS 6
一先ず、単一の計算機を自分自身を計算用サーバーとして、ジョブを管理するtorqueをインストール。
OSはCentOS release 6.9 (Final)。

参考にしたURL： [Installing TORQUE](http://docs.adaptivecomputing.com/torque/5-0-3/Content/topics/hpcSuiteInstall/manual/1-installing/installingTorque.htm)

### トラブルシューティング
#### `trqauthd`が起動できない
インストールの過程で、`/etc/hosts`に、IPと自身ホスト名を書いておかないと、`# service trqauthd start`の所でこける。

#### `qsub`も`qstat`も通るが、ジョブステータスが`Q`になって実行されない：問題解決(2019/01/04)
[Installing TORQUE](http://docs.adaptivecomputing.com/torque/5-0-3/Content/topics/hpcSuiteInstall/manual/1-installing/installingTorque.htm)にはなかった以下の設定をする必要がある。
`$(TORQUE_SOURCE)/contrib/init.d/pbs_sched`を`/etc/init.d/`に置いて`# service pbs_sched start`で`pbs_sched`デーモンを起動する。

## CentOS 7
いくつかのウェブページにあった

```bash
yum install -y epel-release
yum install -y torque-client torque-mom torque-server torque-scheduler
```
は、手元のCentOS 7.5.1804, 7.3.1611では使えなかった。
上記CentOS6に対して行った手順に乗っ取ってこれらのCentOS 7に対しては適用した。
念頭にあるのは[CentOS7(研究室内新設サーバー)の設定メモ - Qiita](https://qiita.com/Yasushi-Shinohara/items/d38e80cc95c8a29bd1b2)に書いた環境へのtorqueのインストール。

### torqueサーバーへのインストール

```bash
# 必要なライブラリをインストール
yum install openssl-devel libtool-devel libxml2-devel gcc gcc-c++
# ソースをgit cloneして、configureを作成
git clone https://github.com/adaptivecomputing/torque.git -b 5.0.3 ./torque-5.0.3
cd ./torque-5.0.3
./autogen.sh
# ビルド
./configure
make
make install
```

`trqauthd`デーモンの設定
 
```bash
cp contrib/init.d/trqauthd /etc/init.d/
chkconfig --add trqauthd
echo /usr/local/lib > /etc/ld.so.conf.d/torque.conf
ldconfig
service trqauthd start
```

`/var/spool/torque/mom_priv/config`に設定を書き込む。例えば

```
$pbsserver     hoge001     # hostname running pbs server     
$logevent      225         # bitmap of which events to log
```


`severdb`を`torque.setup`スクリプトで初期化

```bash
./torque.setup root
```

ノードの情報を`/var/spool/torque/server_priv/nodes`(このファイルは自分で作る)に記載。例えば

```
hoge001 np=12 properties1 properties2
hoge002 np=12 properties3
hoge003 np=12 properties4
```

`pbs_server`, `pbs_mom`, `pbs_sched`デーモンの設定：常駐サービスに追加して、自動起動化して、(再)起動

```bash
cp contrib/init.d/pbs_server contrib/init.d/pbs_mom contrib/init.d/pbs_sched /etc/init.d/
chkconfig --add pbs_server
chkconfig --add pbs_mom
chkconfig --add pbs_sched
service pbs_server restart
service pbs_mom start
service pbs_sched start
```

### torqueクライアントへのインストール

```bash
# 必要なライブラリをインストール
yum install openssl-devel libtool-devel libxml2-devel gcc gcc-c++
# ソースをgit cloneして、configureを作成
git clone https://github.com/adaptivecomputing/torque.git -b 5.0.3 ./torque-5.0.3
cd ./torque-5.0.3
./autogen.sh
# ビルド hoge001をサーバーに
./configure --with-default-server=hoge001
make
make install
# trqauthd デーモンの設定
cp contrib/init.d/trqauthd /etc/init.d/
chkconfig --add trqauthd
echo /usr/local/lib > /etc/ld.so.conf.d/torque.conf
ldconfig
service trqauthd start
# pbs_mom デーモンの設定
cp contrib/init.d/pbs_mom /etc/init.d/
chkconfig --add pbs_mom
service pbs_mom start
```
### トラブルシューティング
#### queueに入ったジョブがIDの順番通りに流れない
同じ計算資源を要求するジョブ`89.hoge001`と`90.hoge001`があったときに、`90.hoge001`から計算が流れる。
2019/2/6現在、未解決。

#### Priorityが反映されない 
```
qmgr -c "set queue highp priority=50"
```
でhighp queueのプライオリティを50に設定し、`qmgr -c "p s"`では`Priority =50`になっているが、`#PBS -q highp`でhighp queueを指定しても、`qstat -f`でpriorityを確認するとデフォルト値の0のまま。ただし、このqueueの実行はでき、`qstat -q`を叩くと認識はされている模様。
但し、ジョブの実行順序を眺めているとpriorityが0のデフォルトキューよりも先に実行されるため、高いプライオリティが外からは判断できない形で反映されている可能性が高い。
`pbs_server`, `pbs_mom`, `pbs_sched`, `trqauthd`をrestartしても問題は解決せず。
その後停電に伴い、全筐体の再起動をしても、問題は解決せず。
2019/09/27現在、未解決。

#### 公開鍵認証 パスフレーズありにすると出力、エラー出力が届かない
ログインノードへのアクセスのセキュリティを上げるために実験的に公開鍵認証でのログインにしてみた。公開鍵認証ではセキュリティ向上を意図して、パスフレーズが設定されている。

するとその後から、`hoge.o1234`, `hoge.e1234`,が届かなくなってしまった。 
2019/11/29現在未解決。


# Torqueの設定ファイルとか使い方


```bash
# ノードの状況の確認(state=freeになっていれば使える)
pbsnodes -a
# ルートサーバーの名前
/var/spool/torque/server_name
#ぶら下がっているノードの情報
/var/spool/torque/server_priv/nodes
#ノードのconfiguration(よく理解していない)
/var/spool/torque/mom_priv/config
#キューの設定内容の確認
$ qmgr -c 'p s'
```
### `qmgr`でtorqueの挙動を変える
```bash
# `qstat`で他のユーザーの使用状況を表示したい
qmgr -c "set server query_other_jobs = True"
# 投げられたジョブを出来るだけ同じ計算機に詰めたい：多くのコアが空いたノードが出来やすくなる
sudo qmgr -c 'set server node_pack=true'
# QNAMEという実行可能なキューを設定する
qmgr -c "create queue QNAMEh queue_type=execution"
# QNAMEで単一ユーザーが実行可能なjob数を3にする
qmgr -c "set queue QNAME max_user_run = 3"
# QNAMEで実行可能なjob数を3にする
qmgr -c "set queue QNAME max_running = 3"
# QNAMEで最長実行時間を72時間にする
qmgr -c "set queue QNAME resources_max.walltime = 72:00:00"
```
参考：[4.1 Queue Configuration](http://docs.adaptivecomputing.com/torque/3-0-5/4.1queueconfig.php)


# 参考
[ &raquo; Torque（計算ノード編）](http://www.kurobuti.com/linux_server/?page_id=266)
[ &raquo; Torque（サーバ編）](http://www.kurobuti.com/linux_server/?page_id=257)
[Torque ユーザーマニュアル](http://www.hpc.co.jp/assets/files/TorqueManual.pdf): pdf注意
[TORQUE - ArchWiki](https://wiki.archlinux.jp/index.php/TORQUE)

# 脚注
[^1]: `qstat -a`等でノードの使用状況を見ると、あたかも複数のノードにジョブが立ち上がっているように見えるが、実際にノードにログインしてみてみると、特定のノードで全て計算が立ち上がっている。