電子計算記

個人的な検証を

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を使って環境を再構築していきましょう。

fujish.hateblo.jp