6. MPIクラスターを作ろう! - 複数ノードへスケールアウト
前回からのつづきです。
5. MPIクラスターを作ろう! - コンパイルと実行 - 電子計算記
単一ノードでMPI環境が動作することが確認できたので、これを複数ノードへスケールアウトしていきましょう。
クラウドならテンプレートを使ってどんどん複製できるので楽で良いですね。
これまで使ってきたマシンをもとにテンプレートを作っていきますが、その前に1個だけコマンドを実行しておいてください。
root@compute-1:~# apt install rsync -y
複数ノードでMPIのプログラムを実行するには、各ノードにコンパイルしたバイナリを配置する必要があります。
やり方はいくつかありますが、手っ取り早くrsyncを使おうと思ってまして。
また、複製に際しホスト名を完全にDHCPに依存するため以下のファイルを削除してください。(Ubuntu16.04の場合)
root@compute-1:~# rm /etc/hostname
では、インストールを終えたら仮想マシンを止めてテンプレートを作成しましょう。
その前にテンプレート化する前にこれまでやってきたポイントをおさらいします。
・OpenMPIがインストールされている
・mpiuserが作成されている
・mpiuserにキーペアが設置済み
最低限ここまで揃っていれば大丈夫です。
では、テンプレートの作成ですが作成方法はいくつかありますがどれでもよいです。
テンプレートの作成方法を教えてください。 | IDCFクラウド
テンプレート作成後、そこから仮想マシンを作成していきましょう。
リージョンとゾーンはcompute-1と同じところに作成してください。
マシンタイプもcompute-1と同じLight.S1を例に進めます。
イメージはマイテンプレートからさきほど作成したテンプレートを選びます。
仮想マシン台数は何台でもよいですが、ここでは3台とし、compute-1と合わせて4ノードクラスターを作ります。
仮想マシン名は、compute-2からcompute-4までにしてます。
では、compute-1を起動しそこにSSH接続し、mpiuserでログインしましょう。
2ノードで動かしてみます。
mpiuser@compute-1:~$ mpirun -np 2 --host compute-1,compute-2 hostname Warning: Permanently added the ECDSA host key for IP address '10.33.0.30' to the list of known hosts. compute-1 compute-2
2ノード目のホスト名も返ってきたので成功です。警告文は初回のみだけ出るものなので無視で大丈夫です。
4ノードだとこんな感じです。今回のコード上、表示の順番は返ってきた順番に依存するので実行毎に変わる可能性があります。
mpiuser@compute-1:~$ mpirun -np 4 --host compute-1,compute-2,compute-3,compute-4 hostname compute-1 compute-3 compute-2 compute-4
最後に前回動かした、Hello Worldを動かしてみます。
mpiuser@compute-1:~$ mpirun -np 4 --host compute-1,compute-2,compute-3,compute-4 ./hello/a.out Hello, world, I am 0 of 4 from compute-1 Hello, world, I am 2 of 4 from compute-3 Hello, world, I am 1 of 4 from compute-2 Hello, world, I am 3 of 4 from compute-4
4プロセスがそれぞれ異なったノード上で動いていることが確認できますね。
さて、今回のa.outは、テンプレートから複製したマシンなので、全ノードに配置されているためそのまま実行できました。
コードを変更したときや、別のソフトウェアを動かすときはどうすればよいでしょうか。このへんの話を次回へつづけます。