heyheytower

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

並列プログラミングのための、 linux クラスタ環境の構築

慣れた人なら1時間ほどで作れるだろうと思われる、
表題環境の構築法について記載する。

NFSSSH、OpenMPI、については特に詳細は述べません。
自分自身、他の方の優れたサイトで得た知識ですので、
グーグル先生に尋ねて勉強してください。

はっきり言って、初めてクラスタ環境を構築する人がこのサイトを見ても
意味がわからないと、憤るだろうなと思います。
この記事の意図としては、
たった60行程度のコマンドライン作業でクラスタ環境を作れることが分かれば敷居が下がるだろうな
と思ったからです。

その点を加味し、流し読みし概略を掴むこと、
または構築の一助になれば幸いです。

準備

HW:NEC Express5800(鼻毛サーバ)×2 *1
OS:ubuntu10.04desktop*2, ubuntu10.04server

構築概略

鼻毛サーバは2コアのため、今回は物理4コアの並列環境を作れることになります。
今回の環境の利点は以下です。

  1. コストパフォーマンスが良いこと
  2. スケールアウトが簡単

方法

master-ubuntu
  • 必要なライブラリをインストール。
  • master-ubuntuディレクトリを共有。
  • 名前解決のためにhostsを編集。
  • OpenMPI のためのホストファイルの作成。
#nfs server operation
mkdir /home/beowulf
sudo apt-get -y install openmpi-bin
sudo apt-get -y install openmpi-dev
sudo apt-get -y install nfs-kernel-server
{
sudo echo ""
sudo echo "## for beowulf"
sudo echo "/home/beowulf 172.16.0.0/255.255.255.0(rw,async,no_root_squash)"
} >> /etc/exports
sudo /etc/init.d/nfs-kernel-server restart

{
echo "172.16.0.2 master-ubuntu"
echo "172.16.0.5 slave-ubuntu"
} >> /etc/hosts

touch /home/beowulf/.mpi_hostfile
{
echo "# The Hostfile for Open MPI"
echo "master-ubuntu slots=2"
echo "slave-ubuntu slots=2"
} >> /home/beowulf/.mpi_hostfile
slave-ubuntu
  • 必要なライブラリをインストール。
  • master-ubuntuディレクトリを自動でマウントするように設定。
  • 名前解決のためにhostsを編集。
# install
sudo apt-get update
sudo apt-get -y install ssh
sudo apt-get -y install nfs-common
sudo apt-get -y install openmpi-bin
sudo apt-get -y install openmpi-dev

{
echo "172.16.0.2 master-ubuntu"
echo "172.16.0.5 slave-ubuntu"
} >> /etc/hosts

#nfs
mkdir -p /home/beowulf
sudo echo "172.16.0.2:/home/beowulf /home/beowulf nfs rw,soft 0 0" >> /etc/fstab
sudo mount -a

パス無しsshの設定

最低限しか書いていませんので、悪しからず。

slave-ubuntu
#no pass login for ssh
ssh-keygen -t rsa
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
cp /root/.ssh/id_rsa /home/beowulf/
master-ubuntu

※下記は秘密鍵パスフレーズを設定した場合に必要だったので本件では不要でした。(修正2015/05/16)

eval `ssh-agent`
su
ssh-add /home/beowulf/id_rsa
#ssh-agent stop
#eval `ssh-agent -k`

まとめ

2台のubuntuによるlinuxクラスタ環境構築ができた。
(テストは他サイトに載っているので、試してみてください)
(プログラムは共有フォルダ内で実行することを忘れないで下さい)

自分は他にも arch-linux で同様の環境が組めることを確認しています。

本環境のベンチマーク向上課題としては、以下があります。

  • ドライブアクセス速度を早くするためSSDを使用し、RAID0を組む
  • OpenMPIで用いるネットワークを別にする(ギガ対応のネットワークを作る)
  • OS を arch-linux など軽いものを使用する(不要なサービスを動かさない)

以上。

*1:今回使うフレームワークの OpenMPI では同じアーキテクチャの PC が必要。

*2:メインマシンが普段使い desktop版のため