読者です 読者をやめる 読者になる 読者になる

heyheytower

日々のメモです。誰かのお役に立てれば幸いです。

ubuntu12.04.3 で intel compiler + openMPI + NFSv4 + sun grid engine (beowulf 方式)

OpenMPI 環境構築


目的

表題環境の構築を行う。


環境概略

【OS】
ubuntu12.04.3 desktop 1台(execute node 兼 master node)(sge ジョブ投入を許されているユーザは ito です。)
ubuntu12.04.3 server 3台(execute node)

【並列処理の実行環境】
master node にて iccicpcを利用可能にし, またそれらを用いてコンパイルした openMPI は、execute node に NFSv4 で共有する。
ジョブ管理は sun grid engine を用いる。


master node 手順

  1. intel compiler *1 をインストールする
  2. openMPI をintel compiler にて、SGEオプション有りでコンパイルする*2
  3. ldconfigを実行し、oepnmpi の共有ライブラリを設定する*3
  4. NFS+openmpi使用時のネットワーク障害対応*4*5
  5. NFSv4設定*6
  6. SSH・RSH を鍵認証で行うための設定*7
  7. SGE インストール*8
  8. qmon が起動しない問題解決 *9
  9. sun grid engine オンラインドキュメント*10
  10. job 投入テスト*11
  11. job 終了時のメール送信*12

openMPI configureオプションは -h で確認しつつ、NFSv4 設定、qconf オプションなどは man を利用して自分の環境に最適なものを選択した。
openMPI の make は、intel compiler 関連の環境変数を読み込んだ管理者権限で実行した。

ldconfig は各ノードで実行し、共有ライブラリを認識させた。
(各ノードで .bashrc から共有ライブラリディレクトリを認識させているはずですが、
 master node から、mpirun を実行すると、「cannot open shared object file: No such file or directory」で実行できなかったためです。
 ssh calc1 ldd mpirun を実行すると、実際にライブラリが見えていないことも分かります。)

NFSネットワーク障害対応については、qarc.infoと似たような件で、
ネットワーク越しに mpirun を実行した際に別途 tcpdump していたパケットに「reply ok 60 getattr ERROR: unk ****」が大量に含まれていた。
原因は NFSv4 をきちんと理解していないことで、クライアントの /etc/fstab に clientaddr を設定することで解決した。

鍵認証のための ssh-keygen は全てのノードで実行し、 NFS 上で authorized_keys にマージし配布した。

qmon に ubuntu12.04.3 の X server(client ?), X font server にデフォルトである 75dpi を認識させた。

sun grid engine の job 終了時のメール送信は、各ノードでメール設定を行なった。
(上記方法ではノードが多い場合に大変ですので、本来は別の設定が必要なのかもしれません。)
sun grid engine のメール送信は内部的に /usr/bin/mail を用いているので、このコマンドでメールを遅れるように postfix 設定を行います。

master node コマンド実行

#for beowulf
#nfs server operation
sudo apt-get install -y nfs-kernel-server
sudo mkdir -p /export/home/beowulf
sudo mkdir -p /export/opt/intel
sudo mkdir -p /export/opt/openmpi
#mount --bind /opt/intel /export/opt/intel
#mount --bind /opt/openmpi /export/opt/openmpi
#mount --bind /home/beowulf /export/home/beowulf

{
echo ""
echo "# NFSv4"
echo "/export calc*(rw,async,fsid=0,crossmnt)"
} | sudo tee -a /etc/exports
sudo exportfs
sudo /etc/init.d/nfs-kernel-server restart

cat <<_EOT_ >> /home/beowulf/.mpi
calc0 slots=2
calc1 slots=2
calc2 slots=2
calc3 slots=2
_EOT_

# no pass login for calcx ex.http://hgotoh.jp/wiki/doku.php/documents/other/other-004
mkdir /home/ito/.ssh
ssh-keygen -N "" -f /home/ito/.ssh/id_rsa
cp /home/ito/.ssh/id_rsa.pub /home/beowulf/authorized_keys
sudo chmod 777 /home/beowulf/authorized_keys
# after all node setuped
#cp /home/beowulf/authorized_keys /home/ito/.ssh/
#chmod 640 /home/ito/.ssh/authorized_keys

# intel c++, intel MKL
sudo apt-get -y install g++
sudo apt-get -y install ia32-libs
sudo apt-get -y install lib32gcc1
sudo apt-get -y install lib32stdc++6
sudo apt-get -y install libc6-dev-i386
sudo apt-get -y install gcc-multilib
sudo apt-get -y install g++-multilib
tar zxf cpp_studio_xe_2013_sp1_update1.tgz
cd cpp_studio_xe_2013_sp1_update1
sudo ./install.sh
echo "" >> ~/.bashrc
echo "# intel compiler" >> ~/.bashrc
echo "source /opt/intel/composerxe/bin/compilervars.sh intel64" >> ~/.bashrc
source ~/.bashrc
sudo /etc/init.d/apwr3_1 stop
sudo sysv-rc-conf apwr3_1 off
sudo /etc/init.d/sep3_10 stop
sudo sysv-rc-conf sep3_10 off

# openMPI
cd ~/Downloads
wget -q http://www.open-mpi.org/software/ompi/v1.6/downloads/openmpi-1.6.5.tar.bz2
tar xjf openmpi-1.6.5.tar.bz2
cd ~/Downloads/openmpi-1.6.5/
./configure CC=icc CFLAGS=-m64 CXX=icpc CXXFLAGS=-m64 LDFLAGS="-shared-intel" --prefix=/opt/openmpi --with-sge --enable-mpi-thread-multiple --enable-mpirun-prefix-by-default --enable-mpi-interface-warning --with-wrapper-cflags=-m64 --with-wrapper-cxxflags=-m64
#su -
#source /opt/intel/bin/compilervars.sh intel64
#cd /home/ito/Downloads/openmpi-1.6.5
#make
#make install
cat <<_EOT_ >> ~/.bashrc

# openMPI
export MANPATH=$MANPATH:/opt/openmpi/share/man
export PATH=$PATH:/opt/openmpi/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/openmpi/lib
_EOT_
source ~/.bashrc

# ld.so.conf
echo "/opt/intel/composer_xe_2013_sp1.1.106/compiler/lib/intel64"
echo "/opt/intel/composer_xe_2013_sp1.1.106/mpirt/lib/intel64"
echo "/opt/intel/composer_xe_2013_sp1.1.106/ipp/lib/intel64"
echo "/opt/intel/composer_xe_2013_sp1.1.106/compiler/lib/intel64"
echo "/opt/intel/composer_xe_2013_sp1.1.106/mkl/lib/intel64"
echo "/opt/intel/composer_xe_2013_sp1.1.106/tbb/lib/intel64/gcc4.4"
echo "/opt/openmpi/lib"
} | sudo tee -a /etc/ld.so.conf
sudo ldconfig

# sun grid engine
sudo apt-get install -y gridengine-master
sudo apt-get install -y gridengine-client
sudo apt-get install -y gridengine-exec
sudo apt-get install -y gridengine-qmon
sudo -u sgeadmin qconf -am ito
qconf -au ito users
qconf -as calc0
qconf -ahgrp @allhosts
qconf -aattr hostgroup hostlist calc0 @allhosts
qconf -aattr hostgroup hostlist calc1 @allhosts
qconf -aattr hostgroup hostlist calc2 @allhosts
qconf -aattr hostgroup hostlist calc3 @allhosts
qconf -aq main.q
qconf -aattr queue hostlist @allhosts main.q
qconf -aattr queue slots "[calc0=2]" main.q
qconf -aattr queue slots "[calc1=3]" main.q
qconf -aattr queue slots "[calc2=3]" main.q
qconf -aattr queue slots "[calc3=3]" main.q
qconf -ap mpi

/etc/init.d/gridengine-exec restart
/etc/init.d/gridengine-master restart

# qmon
echo "xset fp+ /usr/share/fonts/X11/75dpi" > ~/.xinitrc

# mail setting

execute node 手順

  1. NFSv4設定*13
  2. SSH・RSH を鍵認証で行うための設定*14
  3. SGE インストール*15
  4. job 終了時のメール送信*16

オプションは man nfs を読み、最適なものを選択した。
(NFSv4 クライアント設定では「clientaddr=172.16.*.*」を設定することが重要です。)


execute node 手順

# nfs
sudo mkdir /home/beowulf
{
echo ""
echo "# nfs"
echo "calc0:/home/beowulf /home/beowulf nfs4 intr,clientaddr=172.16.*.*,noatime,default 0 0"
echo "calc0:/opt /opt nfs4 intr,clientaddr=172.16.*.*,noatime,nocto,actimeo=3600,ro,async 0 0"

} | sudo tee -a /etc/fstab
sudo mount -a

# ssh no pass login
mkdir /home/ito/.ssh
ssh-keygen -N "" -f /home/ito/.ssh/id_rsa
cat /home/ito/.ssh/id_rsa.pub >> /home/beowulf/authorized_keys
# after all node setuped
#cp /home/beowulf/authorized_keys /home/ito/.ssh/
#chmod 640 /home/ito/.ssh/authorized_keys


# bashrc
cat <<_EOT_ >> ~/.bashrc

# intel compiler
source /opt/intel/composerxe/bin/compilervars.sh intel64

# openMPI
export MANPATH=$MANPATH:/opt/openmpi/share/man
export PATH=$PATH:/opt/openmpi/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/openmpi/lib
_EOT_
source ~/.bashrc


# ld.so.conf
{
echo "/opt/intel/composer_xe_2013_sp1.1.106/compiler/lib/intel64"
echo "/opt/intel/composer_xe_2013_sp1.1.106/mpirt/lib/intel64"
echo "/opt/intel/composer_xe_2013_sp1.1.106/ipp/lib/intel64"
echo "/opt/intel/composer_xe_2013_sp1.1.106/compiler/lib/intel64"
echo "/opt/intel/composer_xe_2013_sp1.1.106/mkl/lib/intel64"
echo "/opt/intel/composer_xe_2013_sp1.1.106/tbb/lib/intel64/gcc4.4"
echo "/opt/openmpi/lib"
} | sudo tee -a /etc/ld.so.conf
sudo ldconfig

# mail setting

所感

環境(OS、ソフトバージョン)の違いによっては同じコマンドが実行できなかったり、自分の対応が実は場当たり的対応である可能性もありますので、
その点はご留意いただけましたらと存じます。


以上