2014年11月4日火曜日

Torqueサーバーを1から立ち上げる為の7ステップ

Torqueサーバーを立ち上げるステップをまとめました。

一つ一つの要素技術の説明は良くまとまっている記事がたくさんあるのでそちらに譲り、この記事では全体の流れを説明することを目的とします

Steps

1. 計算機にUbuntuをインストールする
2. ノード間のネットワークを構築する
3. 必要なパッケージをインストールする
4. OpenSSHサーバーを立ち上げる
5. torqueの設定をする
6. NFSの設定をする
7. メールの設定をする

適宜済んでいる設定をスキップして読んでください。



1. 計算機にUbuntuをインストールする


まず、全ての計算機に同じバージョンのUbuntuを入れる。
特に問題が起こったということは聞かないが、OSレベルの実装を多く含むことを行うことになるので念のため同じバージョンを使うべきだろう。またジョブを実行する環境が均一である方が望ましいだろう。
また、ここではUbuntuを例に説明しているが他のDebian系のOSでも同様に設定できるはず。


2. ノード間のネットワークを構築する


ヘッドノードとスレイブノードで必要なものが異なる
ヘッドノードとは、Torqueのジョブスケジュリングや、他のノードの状態を管理するユニークなノードである。スレイブノードは実際にジョブを実行するノードである。
ヘッドノードはハブとなる計算機だが、実験自体はスレイブノードで行われる為ヘッドにはそこまでのスペックは要求されない。ただしヘッドが落ちるとシステム全体が止まってしまうので頑強なものが良い。あるいは、ヘッドノードでコンパイルなどのメモリを食う作業を禁止にするべきだろう。

2-1. 物理層のネットワークを構築する

OpenMPIなどでノード間の通信が重要である場合を除いて、特に工夫をする必要はないだろう。
スイッチングハブを購入し、LANケーブルでヘッドとノードをつなげる。2014年現在大方のLANケーブルは1Gbpsである。ので、1Gbpsよりも遅いハブを使うと重大なボトルネックになってしまう。今は1Gbpsに対応したスイッチングハブも安く購入できる。何かと通信は行うので1Gbpsのものを買った方が良いだろう。

2-2. Ubuntu上でネットワークを設定する

Ubuntuでのネットワーク設定はGUIからもCLIからも可能であるが、クラスタの設定をいちいちGUIからやるのは面倒である。CLIで同時に設定できた方がバグも少ないのでCLIをおすすめする。
こちらのUbuntu PCをルータ代わりにして、新しくLANを構築してみるという記事が非常に丁寧にかかれているのでHow Toはこちらに任せたい。ただし、ここではDHCPではなく固定IPアドレスを使う。
Torqueの場合のIPアドレスのコツは0, 1, 2と始めるのではなく、100, 101, 102と始めるということで、この方がのちのち拡張しやすい。


3. 必要なパッケージをインストールする

3-1. Torqueの為のパッケージをインストールする

ヘッドとスレイブで必要とするパッケージが異なる。

ヘッドノード
sudo apt-get install openssh-server
sudo apt-get install torque-server
sudo apt-get install torque-scheduler
sudo apt-get install wakeonlan
sudo apt-get install nfs-kernel-serversudo apt-get install mail-utils
sudo apt-get install postfix

スレイブノード
sudo apt-get install openssh-server
sudo apt-get install torque-mom
sudo apt-get install torque-client
sudo apt-get install nfs-common
さて、パッケージの説明をしたい。

openssh-server
sshサーバー。sshで入れなければ何も出来ない。セキュリティに関しては最低限パスワード認証を禁止してポート番号を変えておくと良い。
 
torque-server
torqueのサーバー。qsubやqdelなどのインターフェイスはここで定義されている模様。

torque-scheduler
ジョブスケジュラー。どのジョブをどのノードで実行するかなどの意思決定を行う。いろんな研究成果を生かした、とても賢い人工知能だと言える。

wakeonlan
コマンドラインからLANにあるコンピュータを起動することが出来る。
サーバーの稼働率や設置場所にも依るが、いちいち電源ボタンを押すのは非効率である。ヘッドからコマンドラインでスレイブノードを起動できるようすると環境構築に便利である。使い方はこちらに

nfs-kernel-server
NFS(Network File System)の為のサーバー。NFSとは簡単に言うとネットワーク上でファイルシステムを共有するというものである。Torqueでは各ノードにあるファイルを統一するのに使われる。ユーザーはヘッドにファイルを置くことで実際の実行環境にも同様にファイルを置くことが出来るということだ。NFSとは何かについてはこちらの記事がわかりやすい
 
mail-utils
postfix
メールサーバー。Torqueには実行終了をメールで知らせる機能があるが、その送信の為に必要になる。また、サーバーは特に夏にはCPU温度をモニタリングする必要がある。CPU温度が閾値を超えたらメールを送るなどの処理をする為にもメールサーバーは有用である。

torque-mom
torque-client
ジョブを受け取って実行する為のパッケージ。


3-2. 環境の移植をする


上で説明したパッケージは汎用的なものだが、環境に応じて必要なパッケージを設定する必要がある。
もし既にあるUbuntuのパッケージを移植する必要があるなら、以下の手順で移植することが出来る。

1. 移植元のコンピュータのパッケージリストを得る
sudo dpkg --get-selections | awk '{print $1}'  > pkglist

2. 移植先のコンピュータにpkglistを送る(USBなどで)

3. 移植先のコンピュータでパッケージをインストールする
cat pkglist | xargs sudo aptitude install -y

これで移植元のパッケージが揃うことになります。ただしバージョンなど、すべて同じ設定になる訳ではありませんし、パッケージではないものはなくなります。



4. OpenSSHサーバー・クライアントの設定をする


4-1. 鍵の生成と交換

openssh-serverをインストールした時点でサーバーは立ち上がっている。ただしお互いにログインする為には公開鍵を共有する必要がある。

ssh-keygen

で固有の秘密鍵・公開鍵のペアを生成することが出来る。

sshサーバーは自身の~/.ssh/authorized_keysに書かれた公開鍵を持つクライアントのみとセッションを開く。ので、すべてのノードで鍵を生成し、すべてのノードのauthorized_keysにコピーする必要がある。あるいは、すべて共通の鍵を利用するということも出来なくはないが、セキュリティ上別の鍵にした方が良いだろう。

4-2. ホストの設定


/etc/hostsと/etc/hosts.allowに通信先のホスト名を記入する必要がある。

/etc/hostsはUbuntuインストール時は自分のPC名とローカルホストとipv6関連のみがかかれているはずである。ここに自分と他のノードのIPアドレスを列記する。ここでの設定はTorqueにも使われる。
 
/etc/hosts
127.0.0.1    localhost
127.0.1.1    yuu

10.44.0.100    head
10.44.0.101    node001
10.44.0.102    node002
# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
/etc/hosts.allowはTCP接続を許可する相手を指定できる。ここでまとめてローカルネットワーク内のホストを許可することが出来る。

/etc/hosts.allow
portmap: 10.44.0. ALLOW
lockd: 10.44.0. ALLOW
rquotad: 10.44.0. ALLOW
statd: 10.44.0. ALLOW

5. torqueの設定をする


ここの設定はTORQUEの導入・設定に譲る。よくあるエラーに対する対処法もかかれている。
ひとつ追加したいのは、サービスをリスタートすると問題が解決することが多いということである。
torque-serverなどはserviceとして常にバックで走るソフトなので、実行中に設定変更されてもすぐには反映されない。その為環境構築中はこまめに

sudo service torque-server stop
sudo service torque-scheduler stop
sudo service torque-scheduler start
sudo service torque-server start

とすると良い。これでエラーが解決することは多い。スレイブノード側の場合はtorque-momとtorque-clientでこれを行う。


この時点ジョブを実行することが出来るようになっているはずである。ヘッドノードで

pbsnodes

と打って

node001
     state = down
     np = 8
     ntype = cluster 
node002
     state = down
     np = 8
     ntype = cluster
のように出力されたらノードが認識されているということである。
スレイブノードで

pbsnodes -a

と打つとstate = freeとなるはずである。
そうでない場合はここまでの設定を見直す必要がある。

6. NFSの設定をする

ヘッドノードをそのままNFSサーバーとして使うことが出来るが、ノードの数が多いクラスタの場合はヘッドとは別にNFSサーバーを置くべきだろう。その場合も設定方法に違いはない。
How To Set Up an NFS Mount on Ubuntu 14.04が良くまとまっている。
日本語だとUbuntuでNFSサーバの設定をするがわかりやすい。


7. メールの設定をする


postfixをインストールしただけだと多くのメールに送信出来ない。
それは今のメールサーバはPort 25を禁止にしているからである。Port 25はメールの為の標準のポート番号とされている。しかしそのため、多くのスパムメールはPort 25によって送られていた。それを受けてどのメールサーバもPort 25からはメールを受信しない設定をしている。

GmailのアカウントがあればGoogleのメールサーバを使うのがわかりやすい。
サーバでメールを送るまでに設定方法が書かれているのでこちらを参照されたい。





以上の7ステップでTorqueのサーバーを立ち上げることが出来る。試しに以下のコマンドを
複雑に思えるが各要素技術は概念としてはシンプルなものであり、また非常に汎用的に使われているものが多い。Torqueサーバーの有用性はさながら、これを立ち上げることは良い勉強にもなるだろう。






0 件のコメント:

コメントを投稿