LINPACKを単独のマシンで実行してもあまり面白くないので、クラスタで実行したいと思います。役割としてはマスタが1台、スレーブが他全部という分担になります。LINPACKの場合、マスタからスレーブにsshでログインして、ログイン後xhplを実行するようです。
スレーブ側はLINPACKをコンパイルして、xhplをマスタと同じパスに配置すればOK です(HPL.datは要らない)。マスタ側のバイナリが /home/username/a/b/c/xhplに置かれているとしたら、スレーブ側も同じ /home/username/a/b/c/xhplディレクトリに置かなければ起動できないようです。
一番簡単なのはマスタ、スレーブ、全てのノードに同じユーザを作成して、MPI実行用のバイナリを入れるディレクトリを作成することですね。
さらにスレーブはsshの公開鍵認証にしておくと、LINPACK起動時にパスワードを打たなくて良いので楽です。マスタからスレーブにログインできればOKで、スレーブからマスタにログインする設定は不要です。
マスタ側はLINPACKをコンパイルするのは当然として、少しだけ特別な設定が必要です。私はhostfileの存在に気づくまでにかなり時間がかかりました…。
HPL.datは単独動作と同じで良いです。性能は後で考えるとして、とりあえず動作するはずです。
クラスタのノード一覧hostfileは単独のときには使っていませんでした。基本的にはクラスタを構成するノードのホスト名(IPアドレスでも良いです)を並べるだけです。
localhost slots=4
192.168.1.109 slots=4
上記は2台構成(ROCK64がlocalhost、Raspberry Pi 3が192.168.1.109)の記述です。slots= にはそのノードがいくつのプロセスを扱えるかを記述します。どちらも4コア4スレッドのCPUなのでslots=4としています。まあ2とか8とかにしても動きますが、効率は下がります。
実行は下記のようにします。ROCK64がマスタ、Raspberry Pi 3がスレーブです。下記のコマンドはマスタ側で実行してください。
$ cd bin/Linux_ATHLON_CBLAS $ ls HPL.dat hostfile xhpl $ mpirun -n 8 -hostfile hostfile -host localhost,192.168.1.109 xhpl ... ================================================================================ T/V N NB P Q Time Gflops -------------------------------------------------------------------------------- WR00L2L2 2000 64 1 4 3.74 1.429e+00 HPL_pdgesv() start time Wed Aug 15 00:11:49 2018 HPL_pdgesv() end time Wed Aug 15 00:11:53 2018 -------------------------------------------------------------------------------- ||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)= 0.0037309 ...... PASSED ...
MPIの凄いところはROCK64(arm64)とRasPi(arm)のようにアーキテクチャが違うクラスタでも実行できてしまうところです。メッセージパッシングの隠れた利点かもしれません。
動作しているかどうか確認するにはRaspberry Pi 3側でtopなどで見るのが確実だと思います。LINPACK実行中にxhplが4プロセス実行されているはずです(全力で実行した場合)。
ちなみにhostfileを指定し忘れるとこんなエラーになります。8プロセス起動しろと言われても、どのノードがプロセスをいくつ受け持ってくれるかわからないので、怒っている訳ですね。
$ mpirun -n 8 -host localhost,192.168.1.109 xhpl -------------------------------------------------------------------------- There are not enough slots available in the system to satisfy the 8 slots that were requested by the application: xhpl Either request fewer slots for your application, or make more slots available for use. --------------------------------------------------------------------------
それとOpenMPIのバージョンには注意してください。我が家のデスクトップPC(Debian Testing, OpenMPI 3.1.1)とファイルサーバ(Debian Stable, OpenMPI 2.0.2)でx86_64クラスタを構成しようとしたところ、OpenMPIのバージョン違いでこんなエラーになって実行できませんでした。
$ mpirun -n 4 -hostfile hostfile -host localhost,falcon xhpl [blackbird:29131] tcp_peer_recv_connect_ack: invalid header type: 0★★★★こんなエラーで怒られる★★★★ -------------------------------------------------------------------------- ORTE was unable to reliably start one or more daemons. This usually is caused by: * not finding the required libraries and/or binaries on one or more nodes. Please check your PATH and LD_LIBRARY_PATH settings, or configure OMPI with --enable-orterun-prefix-by-default * lack of authority to execute on one or more specified nodes. Please verify your allocation and authorities. * the inability to write startup files into /tmp (--tmpdir/orte_tmpdir_base). Please check with your sys admin to determine the correct location to use. * compilation of the orted with dynamic libraries when static are required (e.g., on Cray). Please check your configure cmd line and consider using one of the contrib/platform definitions for your system type. * an inability to create a connection back to mpirun due to a lack of common network interfaces and/or no route found between them. Please check network connectivity (including firewalls and network routing requirements). --------------------------------------------------------------------------
エラーメッセージはたくさん出ますが、解決に辿り着かないので何とも言えない気分です…。
結論から言ってしまえばROCK64とRaspberry Pi 3のクラスタは意味がなさそうです。なぜならROCK64 1台のほうが速いからです…。
まずは単独実行と同じ問題サイズN=2000での実行結果です。多少上下しますが0.6〜0.7GFlopsくらいです。ROCK64単独(1.4GFlops)の半分以下です。P, Qの値は2, 4が一番良さそうでした。他の値(1, 8や4, 2)にすると激遅で実行が終わりません。
$ mpirun -n 8 -hostfile hostfile -host localhost,192.168.1.109 xhpl ... ================================================================================ T/V N NB P Q Time Gflops -------------------------------------------------------------------------------- WR00R2L4 2000 64 2 4 7.97 6.699e-01 HPL_pdgesv() start time Wed Aug 15 00:41:15 2018 HPL_pdgesv() end time Wed Aug 15 00:41:22 2018 -------------------------------------------------------------------------------- ||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)= 0.0037423 ...... PASSED ================================================================================ T/V N NB P Q Time Gflops -------------------------------------------------------------------------------- WR00R2C2 2000 64 2 4 7.94 6.724e-01 HPL_pdgesv() start time Wed Aug 15 00:41:23 2018 HPL_pdgesv() end time Wed Aug 15 00:41:31 2018 ...
問題サイズが小さすぎたかな?と思いN=4000にしてみました。0.9〜1.3GFlopsとだいぶ性能が上がります。単独実行の場合N=2000とN=4000ではほぼ性能に変化はありません。
$ mpirun -n 8 -hostfile hostfile -host localhost,192.168.1.109 xhpl ... ================================================================================ T/V N NB P Q Time Gflops -------------------------------------------------------------------------------- WR00L2L2 4000 64 2 4 32.17 1.327e+00 HPL_pdgesv() start time Wed Aug 15 00:50:32 2018 HPL_pdgesv() end time Wed Aug 15 00:51:04 2018 -------------------------------------------------------------------------------- ||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)= 0.0018773 ...... PASSED ================================================================================ T/V N NB P Q Time Gflops -------------------------------------------------------------------------------- WR00L2L4 4000 64 2 4 40.92 1.043e+00 HPL_pdgesv() start time Wed Aug 15 00:51:04 2018 HPL_pdgesv() end time Wed Aug 15 00:51:45 2018 ...
性能が違うノードを組み合わせているからなのか、放熱が足りなくてオーバーヒートしているのか、性能がかなり不安定です。たまにSystem負荷が50%台に張り付いて、実行が終わらなくなるときもあります。うーん、たった2台でも難しいものだな。
< | 2018 | > | ||||
<< | < | 08 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | 1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 | - |
合計:
本日:
管理者: Katsuhiro Suzuki(katsuhiro( a t )katsuster.net)
This is Simple Diary 1.0
Copyright(C) Katsuhiro Suzuki 2006-2023.
Powered by PHP 8.2.15.
using GD bundled (2.1.0 compatible)(png support.)