8. MPIクラスターを作ろう! - ホスト設定ファイル
前回からのつづきです。
7. MPIクラスターを作ろう! - rsyncで実行バイナリをノード間コピー - 電子計算記
複数ノードの指定には--hostを使ってきましたが、設定ファイルを用いた方法もあります。
こっちの方が実行が楽なのと、マルチコアを想定して多重で動かしたりもできるので便利です。
設定ファイルは簡単でホスト名を並べるだけです。
mpiuser@compute-1:~$ vi my_hosts compute-1 compute-2 compute-3 compute-4
実行時は--hostfileでパスを指定します。
mpiuser@compute-1:~$ mpirun -np 4 --hostfile ~/my_hosts ./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
多重でも動くようになります。
mpiuser@compute-1:~$ mpirun -np 5 --hostfile ~/my_hosts ./hello/a.out Hello, world, I am 0 of 5 from compute-1 Hello, world, I am 3 of 5 from compute-3 Hello, world, I am 2 of 5 from compute-2 Hello, world, I am 4 of 5 from compute-4 Hello, world, I am 1 of 5 from compute-1
4ノードなのに5プロセス動いてますね。compute-1上で2プロセスが動いています。
ここで考えるのが、今回は全ノード1コア(Light.S1)だけど2コアなるマルチコアのノードがあればそこに多くプロセスを割り当てたい。
はい、hostfileを使えばコア数に応じた設定も可能です。
ではここで例として、compute-4を2コア(Highcpu.M4)にリサイズして試してみます。
IDCFクラウドでのスペックアップはマシンを停止せずに可能ですが、Lightタイプからは利用できないので、通常の手順の マシンを停止→リサイズ→起動 の流れで変更します。
ではリサイズ完了したという前提で、hostfileの設定を見てみます。
mpiuser@compute-1:~$ vi my_hosts compute-1 compute-2 compute-3 compute-4 slots=2
このようにslotsの値で指定できます。ここでは2コアのマシンなので2としました。
では実行します。
mpiuser@compute-1:~$ mpirun -np 5 --hostfile ~/my_hosts ./hello/a.out Hello, world, I am 0 of 5 from compute-1 Hello, world, I am 2 of 5 from compute-3 Hello, world, I am 1 of 5 from compute-2 Hello, world, I am 3 of 5 from compute-4 Hello, world, I am 4 of 5 from compute-4
見事に2コアのcompute-4上で2プロセスが動いています。
では次からは定番のベンチマークソフトを動かしますと思ってたのですが、やはり毎回rsyncするのは面倒なので、NFSを使って環境を再構築していきましょう。