一応、ユーザとしてpiが存在するのだが、スパコン用には別のユーザを指定していた方が混乱が少ないかと思うので、参考書にしたがってalphaを使うことにした。
$ sudo useradd alpha
これで、alphaのホームディレクトリである /home/alpha ができる。
次に、パスワードを設定しておこう。
$ sudo passwd alpha
そろそろ、マスターとワーカーで設定が変わってくるので、その前にマスターのmicroSDをコピーして、最初のワーカーマシンのmicroSDを作ろう。
メニューのアクセサリ→SD Card Copier により、簡単に複製ができる。
複製ができたら、もう1台のラズパイに挿し、IPアドレスとホスト名を、RP1とそれに対応するIPアドレスに変更しておこう。
まず、マスタ(RP0)にalphaでログインしよう。
SSH(Secure Shell)のためのssh-keygenを使って行う。すると、/home/alpha/.sshに秘密鍵と公開鍵ができる。
ここで、ssh-copy-id を使って、ワーカー(RP1)に公開鍵を送る。
そして、次に、マスタ(RP0)からワーカー(RP1)にsshでログインしようとすると、パスフレーズを聞かれる。でも、パスフレーズが聞かれるのにいちいち応えるのは面倒である。まして、MPIで並列処理をしていて、ラズパイ間でメッセージ交換している時にパスフレーズの交換などやってられない。
ということで、パスフレーズを聞かれないようにしておく必要がある。そのための1つの方法が、パスフレーズの入力を要求された時、何も入力せずRETURNキーを押してしまうことである。
ssh RP1 と入力して、何も聞かれずに接続できるように調整する方法は何種類もあるようでネットに載っているので、説明を省略します。
スパコンとして動かす時、異なるマシンが同じソフトウェア環境になっている必要がある。並列動作させるためのアプリが存在するディレクトリの内容が一致していなければいけない。
これを実現する簡単な方法が、マウントによる方法である。
スパコンのアプリを置くディレクトリを マスターRP0上に、/beta として作る。
そして、このディレクトリをexportsすることで、他のマシンから見えるようにする。
# beta
/beta 10.129.0.0/24(rw,sync)
ワーカーマシンは、/ の下に /beta を作るだけで、実体はRP0の/betaを使うことにする。そのために、/etc/fstabに、次の1行を追加し、起動時に自動的に/betaのマウントが行われるようにする。
RP0:/beta /beta nfs defaults,rw,exec 0 0
最初はワーカーは1台であるが、あとでワーカーのmicroSDをどんどん複製することで、マスターの/betaをすべてのワーカーが共有する。この1行により、どのマシンの/betaも同じフォルダをアクセスしているので、アプリがマシンにより異なることがなくなる。
ただし、注意しなければいけないのは、複数のマシンで同一フォルダを使っているので、同じ名前でファイルを書き込むと、上書きされトラブルが発生する。スパコンで使うプログラム、データなどを各マシンに送る必要がなく、またマシン毎にプログラム、データが異なることが起こり得ないので便利なのだが、注意も必要である。
早足だったが、スパコンとして動かすための環境設定がほぼ済んだので、次から、とりあえず2台でMPIによる並列動作自体の説明に入っていく。