検証環境 & 想定環境
Host Computer
- OS: Win 10
- CPU: i5 4550
- VirtualHost: Oracle VM VirtualBox
Remote - OS: CentOS 6.10 (Final)
想定環境(検証環境はあくまで練習)
最終的にはXeonを使ったシングルノードのマルチプロセス環境の構築を想定しています。
Torqueを使う以上、マルチクラスタをしたいものですが、LDAPを保守できる環境にないので、必然的にノードは一つが前提になります。
XeonなのでIntel Studioを使った環境も想定されますが、これはOpenMPIのコンパイル時にoptionをしっかり指定すればいいだけなので、詳細は省きます。
Torque について
Torqueはjob managerと呼ばれるソフトウェアの一つで、マルチクラスタ計算を行うときにハードウェアリソースを管理し適切にプロセスを割り当てる管理ソフトです。
ほかにもいくつか種類がありますが、OSSで簡単に導入できるので人気なjob managerです。これ以上の詳細は省きます。
依存ライブラリのインストール
大学内などで(筆者環境)proxy下にある環境の場合、proxyの設定をyum,wget,curlなどに忘れず行ってください。また、CentOS6.4などの古いOSでは、そもそもyumのリポジトリが切れている可能性があるのでyumのリポジトリの再設定などをしてから行ってください。
#yum install epel-release
# yum update
# yum upgrade
# yum install openssl-devel libtool libxml2-devel boost-devel gcc gcc-c++
# yum install git
ここで、参考サイト[1](公式docs)[2]では、libtool-develと書かれていますが、centos6.10のyumリポジトリにはないです。libtoolでいいみたいなので変更。
NUMActlとhwlocのインストール
Hardware Locality(hwloc)は複雑怪奇なCPUの環境(とくにXeonのような環境)をMPIなどのマルチプロセスアプリケーションに統一された表現で情報を与えるためのツール[3]。Torqueもhwlocからハードウェアリソースの情報を得るので先にインストールする必要があります。
hwlocのバージョンはこの後インストールするTorque5系に合わせてhwloc1系をインストールします。
筆者環境は、マルチクラスタを想定していないけれども、単体のマシンはつよつよなので、NUMAを使用してもう少し効率向上を図ります[4]参照。
# yum install numactl-devel
# wget https://download.open-mpi.org/release/hwloc/v1.11/hwloc-1.11.13.tar.gz
# tar xzvf hwloc-1.11.13.tar.gz
# cd hwloc-1.11.13
# mkdir build
# cd build
# ../configure --prefix=/usr/local
# make
# make install
Torqueのインストール(サーバのみ)
というわけで、本題のTorqueのインストール。tar.gzファイルが見つからなかったため、gitよりdownload。
# git clone https://github.com/adaptivecomputing/torque.git -b 5.1.3 torque-5.1.3
# cd torque-5.1.3
# ./autogen.sh
# ./configure
# mkdir ./build
# cd build
ここで、このあと./configureを実行するわけですが、一度./configure --help
を実行してoptionを確認しましょう。環境によっておそらくoptionは大きく変わります。
例えば、マルチクラスタを行う場合では、マスターは--disable-clients
を付けたり逆にクライアントは--diable-server
を付ける必要があるでしょう(クライアント(=ノード)は後述)。
いまの想定環境は大体defaultでいいですが、参考にする人は、注意してください。
また、出力を確認して指定したものが入っているかも確認しましょう。例えば下記の./configure <optioin> > log
のように保存し、log | grep NUMA
やlog | grep hwloc
のように確認できます。
# ../configure --enable-numa-support --with-hwloc-path=/usr/local/
# make
# make install
trqauthdデーモンのセットアップ
ここまででインストールは終了しました。セットアップを行います。
まずは、システム(OS)に認識してもらいます。
# 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
名前解決とポートの解放
ここからはTorqueの設定になります。
設定の方法はあまたあると思うので、一例と思って自分でしっかり調べてください。
まずは、各ノードにipアドレスではなく名前を振る(名前を解決する)必要があります。今回は、/etc/hosts
ファイルを使います。が、localhostはすでにlocalhost.localdomainで名前解決しているのでスルーします。マルチクラスタでは、hostsはDNSといった手法で名前解決の手法を用意してください。
# cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain localhost6
続いてポートも開けます。(多分共通)
# iptables-save > /tmp/iptables.mod
# vi /tmp/iptables.mod
[追記:変更]
# "-A INPUT -j REJECT --reject-with icmp-host-prohibited"
-A INPUT -p tcp --dport 15001 -j ACCEPT
-A INPUT -p tcp --dport 15002 -j ACCEPT
-A INPUT -p tcp --dport 15003 -j ACCEPT
# iptables-restore < /tmp/iptables.mod
# service iptables save
torqueのサーバの設定
torqueにserverを指定します。(サーバのみ)
# echo localhost.localdomain > /var/spool/torque/server_name
serverを立ち上げます。初回一回、サーバのみ。qtermしてからやり直すことができますが、やり直すとあとの設定ファイルが全部飛びます。
# ../torque.setup root
nodesファイルの設定(サーバのみ)
計算に用いるノードの設定を行います。今回はnodeが一つなので非常に簡単です。詳しくは[5]を見ましょう。
ただし、前述の通りNUMAを使用してセットアップするので、[4,7]を参照してセットアップします。
# vi /var/spool/torque/server_priv/nodes
locahost.localdomain np=1 num_node_boards=1
pbs_serverの設定
つぎに、pbs_serverというサーバデーモンを起動します(trqauthdとの違いがわからん)。
# cp contrib / init.d / pbs_server /etc/init.d
# chkconfig --add pbs_server
# service pbs_server restart
Torqueのノードの設定
Torqueで管理・利用されるノードへのインストールは、ここまでbuildした環境と同一であれば個別buildや./configure
を行う必要はなく、build内に、client用のインストローラーを生成できます[6]。
# make packages
今回の想定環境はシングルノードでserverとclientが同一なので、これ以上話しませんが、マルチクラスタの場合は、LDAPとか使ってuidを統一化したり、nfsを使って共通ディレクトリを提供したり、sshのキーを配ったりしたうえで、[6]を参考にnode用のソフトをインストールしてください。
mom.layout
NUMAを使う場合、ノードのCPU構成をmom.layouに設定する必要があります。[7]を参考にしてください。
# vi /var/spool/torque/mom_prov/mom.layout
nodes=0
configファイルの設定
ノード側の設定でserverを指定します
# vi /var/spool/torque/mom_priv/config
$pbsserver localhost.localdomain
$logevent 225
torque-momのセットアップ
# cp contrib/init.d/pbs_mom /etc/init.d
# chkconfig --add pbs_mom
# service pbs_mom start
OpenMPIのインストール
Torqueを使う主な目的はマルチクラスタ計算であり、これを行うためにはMPIを使うことになります。OpenMPIではTorqueと連携することができます。OpenMPIはyumでインストールすることができますが、これではTorqueと連携できません(と思ってます)。なので、ソースコードを落としてコンパイルする必要があります[8]。
OpenMPIのソースコードをダウンロードします。バージョンはyumでインストールできる最新バージョンと同じOpenMPI-1.10を使います。
# cd
# wget https://download.open-mpi.org/release/open-mpi/v1.10/openmpi-1.10.7.tar.gz
# tar xzvf openmpi-1.10.7.tar.gz
# cd openmpi-1.10.7
# mkdir build
# cd build
# ../configure --with-hwloc=/usr/local --with-tm
# make
# make install
インストールが終わったらパスを通します。この時、既存のopenmpiを使っている場合、/usr/localにインストール(default)すると競合して問題を起こす場合があります。この例では、そんなことは気にせずパスを通しますが、必要に応じてインストールディレクトリを変えて、Torqueを使うユーザだけ、.bashrcなどにPATHとLD_LIBRARY_PATHを設定するようにしましょう
# echo /usr/local/lib/openmpi > etc/ld.so.conf/openmpi.conf
# ldconfig
参考サイト
- http://docs.adaptivecomputing.com/torque/5-0-3/Content/topics/hpcSuiteInstall/manual/1-installing/installingTorque.htm
- https://qiita.com/Yasushi-Shinohara/items/bd1218c79724f042d878
- https://www.open-mpi.org/projects/hwloc/doc/v2.0.2/
- http://docs.adaptivecomputing.com/torque/4-1-4/Content/topics/1-installConfig/buildingWithNUMA.htm
- http://docs.adaptivecomputing.com/8-1-3/basic/installGuide/Content/topics/torque/1-installConfig/specifyComputeNodes.htm
- http://docs.adaptivecomputing.com/8-1-3/basic/installGuide/Content/topics/torque/1-installConfig/computeNodes.htm
- https://qiita.com/Baruim/items/a3a839fd71545d4cd109
- https://www.jstage.jst.go.jp/article/mssj/17/4/17_209/_pdf