Re: [OpenFOAM] 複数台PCによる並列環境の構築方法

1,397 views
Skip to first unread message

Kaneda Makoto

unread,
Jul 21, 2013, 10:35:23 AM7/21/13
to open...@googlegroups.com
中谷先生

金田です。
私は HPC専門ではありませんが、試しに VMware Playerを
使って PCクラスタを組んでみたことがありますので、
その経験を書いてみます。
HPCのプロからのダメ出しを歓迎します。

使用した OSは CentOS 6.2(64bit)、ネットワークは
イーサネット(IPv4)、ノード間の通信は rshです。
OpenFOAMはマスターノードの /opt/OpenFOAMにのみ
インストールし(計算ノードにはインストール
しませんでした)、NFSを使ってマスターノードの
/optと /homeを全ノードで共有できるようにしました。

私が試した構成をお勧めしているわけではありませんので、
必要に応じてカスタマイズされることをお勧めします
(rshの代わりに sshを使ったり、NFSマウントをやめたり、
Infinibandを使ったり)。
以下、CentOS 6用の設定になりますので、DEXCSとは
設定ファイルやコマンドが異なりますが、ご容赦ください。

●PCクラスタはマスタノード(ユーザがログインするノード)
と計算ノードで構成されます。
小規模のクラスタでは、マスタノードでも計算を行わせる
ことが多いようです(マスタノード兼計算ノード)。
今回は全3台ですから、兼ねるやり方で良いと思います。

●ネットワークの設定方法(全ノードで行います)

マスタノードと各計算ノードは内部ネットワークで接続します。
ネットワークカードは、計算ノードでは最低1つ(内部ネット
ワーク用)、マスタノードでは最低2つ(内部ネットワーク用と
外部ネットワーク用)必要です。
ユーザーは外部ネットワークからマスターノードに
ログインします。

各ノードの、ホスト名と内部ネットワークのIPアドレスを、
例えば以下のように設定したとします。
・計算ノード0(兼マスターノード):frontend 192.168.100.100
・計算ノード1:compute01 192.168.100.101
・計算ノード2:compute02 192.168.100.102

各ノードの「/etc/hosts」の先頭に以下を挿入し、名前解決の
設定をします。
----------------------- (begin) -----------------------
192.168.100.100 frontend
192.168.100.101 compute01
192.168.100.102 compute02
------------------------ (end) ------------------------

ノード間のアクセスを可能にします。

「/etc/hosts.deny」を編集
----------------------- (begin) -----------------------
ALL:ALL
------------------------ (end) ------------------------

「/etc/hosts.allow」を編集
----------------------- (begin) -----------------------
ALL: 192.168.100.
ALL: 127.0.0.1
------------------------ (end) ------------------------
設定したらネットワークを再起動し、pingを使って各ノード間で
接続できるかご確認ください。

●セキュリティ無効化(全ノードで行います)

ネットワーク内の上位にファイアウォールがいることを前提に、
ファイアーウォールを無効にします。
SELinuxも無効にします。

●rshの設定方法(全ノードで行います)

各ノード間で、パスワードなしでログインできるように
設定します。パスワードを求められると計算が進みません。

rshは rsh-serverを使用しますので、Kerberos 5の rshは
削除することにします。
----------------------- (begin) -----------------------
sudo yum remove krb5-workstation
sudo yum install rsh rsh-server
------------------------ (end) ------------------------

「/etc/xinetd.d/rsh」と「/etc/xinetd.d/rlogin」を編集。
----------------------- (begin) -----------------------
disable = yes
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
disable = no
------------------------ (end) ------------------------

「/etc/hosts.equiv」を編集して信用するホスト名を列挙し、
パスワードなしのアクセスを可能にします。
----------------------- (begin) -----------------------
frontend
compute01
compute02
------------------------ (end) ------------------------

端末で以下を実行します。
----------------------- (begin) -----------------------
sudo chmod 600 /etc/hosts.equiv

sudo -i chkconfig rsh on
sudo -i chkconfig rlogin on
sudo -i chkconfig --list rsh
sudo -i chkconfig --list rlogin
------------------------ (end) ------------------------

xinetdを再起動します。
----------------------- (begin) -----------------------
sudo -i service xinetd restart
------------------------ (end) ------------------------
設定したら、ノード間でパスワードなしのログインが
できるか、rshコマンドを使ってご確認ください。

●1つ確認させてください。
並列処理は OpenFOAMのみでしょうか?
それとも ParaViewの並列可視化も行いますでしょうか?

OpenFOAMのみであれば、計算ノードはランレベル3にし、
Xを立ち上げずに軽くしておくのが一般的のようです。

ParaViewの並列可視化も行うのであれば、通常のやり方では
計算ノードでもXを立ち上げて(ランレベル5)、OpenGLを
使えるようにします。
このとき、rshで Xを飛ばせるように設定する必要がありますが、
並列可視化をされるか不明ですので、設定法はとりあえず
省略します。

●NFSマウント

マスターノードのみ、「/etc/exports」を編集して
/optと /homeを共有させます。
----------------------- (begin) -----------------------
/opt 192.168.100.0/255.255.255.0(rw,sync,no_root_squash,no_all_squash)
/home 192.168.100.0/255.255.255.0(rw,sync,no_root_squash,no_all_squash)
------------------------ (end) ------------------------

編集したら、マスターノードで以下を実行します(1回行えばOK)。
----------------------- (begin) -----------------------
sudo -i chkconfig rpcbind on
sudo -i chkconfig --list rpcbind
sudo -i service rpcbind start

sudo -i chkconfig nfs on
sudo -i chkconfig --list nfs
sudo -i service nfs start
------------------------ (end) ------------------------

マスターノード以外の計算ノードでは、マシン起動のたびに
以下を実行します。
----------------------- (begin) -----------------------
cd /tmp # NFSマウントしないディレクトリに移動しておく
sudo mount -t nfs frontend:/opt /opt
sudo mount -t nfs frontend:/home /home
------------------------ (end) ------------------------
端末を再起動し、計算ノードからマスターノードの
ファイル(/opt/OpenFOAM 等)が見えれば OKです。

●OpenFOAM用の設定(マスターノードのみ)

「$HOME/.bashrc」に以下を追加します。
----------------------- (begin) -----------------------
#### OpenMPI
export OMPI_MCA_pls_rsh_agent=rsh

#### OpenFOAM
source /opt/OpenFOAM/OpenFOAM-2.2.0/etc/bashrc
------------------------ (end) ------------------------
マスターノードの /homeを共有しているので、$HOME/.bashrcを
書き換えれば全ノードで読めるようになります。
.bashrcを再読み込みさせるには、各マシンで端末を
再起動します。

●PCクラスタで OpenFOAMを動かす方法

マスターノードで「$HOME/hostfile」を編集します。
----------------------- (begin) -----------------------
frontend
compute01
compute02
------------------------ (end) ------------------------
このファイルは全ノードから見えるはずです。

ケースファイルはホームディレクトリの下にあると仮定します。
NFSマウントされていますので、全ノードから読み書きできます。

ケースファイルの「system/decomposeParDict」に並列数を
設定し、ソルバは「foamJob -parallel ***Foam(ソルバ名)」
と実行します。
計算が終了したら、logファイルの中を見て並列計算されて
いることを確認します。

マシンのシャットダウンは、NFSマウントしている関係上、
マスターノードを最後にしてください。

ParaViewの並列可視化については、今回は省略しました。
お役に立てれば幸いです。


> 皆様
>
> お世話になります。
> 岐阜高専の中谷です。
>
> 現在、研究室にある自作のPC上でDEXCS2012(64bit)に
> OpenFOAM-2.2.0 or 2.2.1を改めてインストールし、
> 3台のPCによる並列環境を構築したいと考えております。
>
> ところが、インターネット上で情報を調べてはいるのですが、
> 1. 事前準備
> 2. 複数台PCの並列化を実施するためのインストール方法
> で具体的に何をどうすればよいのか理解が追い付いていない状況です。
>
> 大変恐れ入りますが、どなたかこれらの点に関して、ご教示頂けませんでしょ
うか?
>
> 一応、私としましては、
> 1. DEXCS2012のインストール
> 2. 1台のPCにソースコードからOpenFOAMをインストール
> を行うことは可能です。
>
> また、並列環境構築予定のPCは、3台とも同じスペックで、
> Mother Boad: Intel DX580G
> CPU: Intel Core-i7 950
> Memory: 12GB(4GB×3) → さらに4GB×3まで増設可能であるが、増設すると起
動から数分~数時間経過後に何故かフリーズ
> HDD: 1GB
> となっております。
>
> どうぞよろしくお願い致します。

Kaneda Makoto

unread,
Jul 21, 2013, 9:58:46 AM7/21/13
to open...@googlegroups.com
中谷先生

金田@岐阜高専出身です。
私は HPC専門ではありませんが、試しに VMware Playerを
使って PCクラスタを組んでみたことがありますので、
その経験を書いてみます。
HPCのプロからのダメだしを歓迎します。

Jun

unread,
Jul 26, 2013, 12:38:47 AM7/26/13
to open...@googlegroups.com
金田様
 
岐阜高専の中谷です。
返信が遅くなり申し訳ございません。
 
詳細な説明をいただきましてありがとうございます。
現在使用している環境で試してみたいと思います。
 
また、お尋ねの並列処理につきましては、
今のところは計算時間の短縮を狙っていますので、
OpenFOAMのみの並列処理を考えております。
 
環境構築中に不明な点が出てきましたら、またお尋ねさせて頂くかもしれません。
 
よろしくお願いいたします。
Reply all
Reply to author
Forward
0 new messages