ubuntu12.04.3 で intel compiler + openMPI + NFSv4 + sun grid engine (beowulf 方式)
目的
表題環境の構築を行う。
環境概略
【OS】
ubuntu12.04.3 desktop 1台(execute node 兼 master node)(sge ジョブ投入を許されているユーザは ito です。)
ubuntu12.04.3 server 3台(execute node)
【並列処理の実行環境】
master node にて icc・icpcを利用可能にし, またそれらを用いてコンパイルした openMPI は、execute node に NFSv4 で共有する。
ジョブ管理は sun grid engine を用いる。
master node 手順
- intel compiler *1 をインストールする
- openMPI をintel compiler にて、SGEオプション有りでコンパイルする*2
- ldconfigを実行し、oepnmpi の共有ライブラリを設定する*3
- NFS+openmpi使用時のネットワーク障害対応*4*5
- NFSv4設定*6
- SSH・RSH を鍵認証で行うための設定*7
- SGE インストール*8
- qmon が起動しない問題解決 *9
- sun grid engine オンラインドキュメント*10
- job 投入テスト*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 restartcat <<_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 手順
オプションは 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、ソフトバージョン)の違いによっては同じコマンドが実行できなかったり、自分の対応が実は場当たり的対応である可能性もありますので、
その点はご留意いただけましたらと存じます。
以上
*1:http://www.xlsoft.com/jp/products/intel/compilers/ccl/index.html?tab=0
*2:http://d.hatena.ne.jp/maijou2501/20121228/1356712275
*3:http://www.pistolfly.jp/weblog/2011/03/centosimagemagick.html
*4:http://qarc.info/qa/show-10189-268.html
*5:http://codepoets.co.uk/2012/stupid-nfs/
*6:http://masahir0y.blogspot.jp/2012/12/nfs-v3-v4-rhelcentosubuntu.html
*7:http://hgotoh.jp/wiki/doku.php/documents/other/other-004
*8:http://wiki.unixh4cks.com/index.php/Setting_up_Sun_Grid_Engine_on_Ubuntu
*9:https://bugs.launchpad.net/ubuntu/+source/gridengine/+bug/997617
*10:http://gridscheduler.sourceforge.net/htmlman/
*11:http://web.njit.edu/topics/HPC/basement/sge/SGE.html
*12:http://linux.matchy.net/archives/35
*13:http://masahir0y.blogspot.jp/2012/12/nfs-v3-v4-rhelcentosubuntu.html
*14:http://hgotoh.jp/wiki/doku.php/documents/other/other-004
*15:http://wiki.unixh4cks.com/index.php/Setting_up_Sun_Grid_Engine_on_Ubuntu