ubuntu 16.04 での pbs torque のインストール

# 負荷分散のソフトの選定
pbs torque, lava, gridengine 等、色々ありますが、インストールを簡単にするためにpbs torque を使います。
gridengine のインストールが私には難しすぎました、インストール記事長すぎぃ！！
目指す状況は、インストールや設定が簡単で時間がかからない事です。
というか何番煎じや！これ！

簡単な構成から徐々に大きくすると良いでしょう。
1, torque サーバー と　torque クライアント が同じマシン
2, torque サーバー と　torque クライアント　が別のマシン
という構成が考えられますが、1 -> 2 の順番で行きましょう。

# torque サーバー と torque クライアントが同じマシンの場合
準備として、マシンのIPアドレスを調べておきます。 192.168.の方です。

## サーバーとクライアントのインストール
最初に、/etc/hosts を編集します。先ほど調べたIP アドレスをhostname を
/etc/hostsに
192.168.0.xxx hostname 
みたいな感じに書きます。
以下手順です。
```
vi /etc/hosts # 先ほどのIPアドレスを書き込む
apt-get install --yes torque-server torque-scheduler torque-mom
killall pbs_server
killall pbs_mom
killall pbs_sched
hostname > /etc/torque/server_name
hostname > /var/spool/torque/server_priv/nodes
cp /var/spool/torque/sched_priv/sched_config  /var/spool/torque/sched_priv/sched_config.orig
sed 's/help_starving_jobs.*true.*ALL/help_starving_jobs     false    ALL/' /var/spool/torque/sched_priv/sched_config.orig > /var/spool/torque/sched_priv/sched_config
```
上のhelp_starving_jobs の設定はデフォルトでは、以下のようです。
>もし、ジョブの待ち時間が長かった場合、計算資源の枯渇が起きていると考えられます。
>そのため、そのジョブが終わるまで追加のジョブを流さない様にします。  

という訳で、勝手にジョブが止まる事があるので、false にします。

## キューの作成
今のままではキュー（実行するタスクの分類）がなくてジョブが実行できないので、作成します。
以下、手順です。

```
pbs_server
qmgr -c "set server scheduling = True"
qmgr -c "create queue batch queue_type=execution"
qmgr -c "set queue batch resources_default.nodes=1"
qmgr -c "set queue batch enabled=true"
qmgr -c "set queue batch started=true"
qmgr -c "set server default_queue=batch"
qmgr -c "set server query_other_jobs=true"
qmgr -c 'set server submit_hosts = $hostname' ## ここは このマシンのhostnameを入力してください。
qmgr -c 'set server allow_node_submit=true'
qmgr -c 'p s ' > /root/pbs_now_setting

service torque-server restart
service torque-scheduler restart
service torque-mom restart
```

## 動作のテスト
管理者権限を抜けてください。pbs torque ではrootでジョブをsubmitできません。

```
echo 'sleep 10' | qsub
pbsnodes
qstat
```
お疲れ様でした。

# torque サーバー と torque クライアントが別のマシンの場合
次に、計算機を追加した場合の事を考えて、torqueクライアントを追加する作業を行います。
## サーバー側での作業
```
 vi /etc/hosts
 # /etc/hosts に追加する計算機のIPアドレスと名前を追加してください。
 vi /var/spool/torque/server_priv/nodes
 # このファイルに追加する計算機のホスト名を追加してください。
 # 書き方は、 host01 np=4 みたいに、（ホスト名）　np=(コア数) みたいな感じです。
```

## クライアント側の作業 (追加する計算機）
/homeをNFSを使って共有している予定なので、 /var/spool/torque/mom_priv/configは変更が必要。
前もって、torque サーバーのホスト名とIPアドレスが必要。
```
apt-get install --yes torque-mom torque-client
echo "\$usecp *:/home /home" > /var/spool/torque/mom_priv/config
cp /etc/hosts /etc/hosts.orig
sed "s/$TORQUE_SERVER_IP/$TORQUE_SERVER_IP $TORQUE_SERVER /" /etc/hosts.orig > /etc/hosts
echo "$TORQUE_SERVER" > /etc/torque/server_name
pbs_mom
```

# いくつかの便利な機能
 pbs torque では、いくつかの便利機能がある。
 それを使うと、結構便利に使う事ができる。
 というか、デフォルトではすごく簡単なスケジューラしかついてない。
##　node のalias
 /var/spool/torque/server_priv/nodes　は通常
```
 host01 np=4
 host02 np=4
 host03 np=4
```
というような書き方になっているが、別名をつける事ができます。
```
 host01 np=4 mem8G bach mas
 host02 np=4 mem8G mas doc
 host03 np=4 mem16G doc
```
みたいな。それでジョブをsubmit するときに、
```
 #!/bin/bash
 #PBS -l nodes=1:ppn=4:mem8G
```
のような指定ができます。

## 優先度の高いキューを作成する。
```
qmgr -c "create queue high queue_type=execution"
qmgr -c "set queue high priority = 60"
qmgr -c "set queue high enabled=true"
qmgr -c "set queue high started=true"
```
これで、優先度が高い順番から実行される様になります。
また、使用者がこのキューを使用するためには、

```
qsub -q high
```

などとするか、 スクリプトの中に、
```
 #!/bin/bash
 #PBS -q high
```
などとして、使うことができます。

## 解析用計算機とジョブ実行用計算機を分ける。
解析、ジョブ投げる用のマシンが同じだと便利だと思うかもしれませんが、やるべきではありません。
めちゃ重いですから。
そこで、クラスタの中にジョブが流れないようなマシンを作ると便利です。
作り方は、 /var/spool/torque/server_priv/nodes に
```
  host01:ts
```
とするだけです。