link もっと前
   2018年 8月 15日 -
      2018年 8月 15日  
link もっと後

link 未来から過去へ表示(*)
link 過去から未来へ表示

日々

link permalink

自分のマシンは何 GFLOPS か? その 3

その 1その 2その 3

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: 単独で実行していたときにも使っていた LINPACK パラメータを書いたファイル
  • hostfile: クラスタのノード一覧を書いたファイル

HPL.dat は単独動作と同じで良いです。性能は後で考えるとして、とりあえず動作するはずです。

クラスタのノード一覧 hostfile は単独のときには使っていませんでした。基本的にはクラスタを構成するノードのホスト名(IP アドレスでも良いです)を並べるだけです。

hostfile の記述例

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 がスレーブです。下記のコマンドはマスタ側で実行してください。

クラスタでの LINPACK 実行
$ 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プロセス起動しろと言われても、どのノードがプロセスをいくつ受け持ってくれるかわからないので、怒っている訳ですね。

hostfile を指定し忘れるとこんなエラー
$ 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 のバージョン違いでこんなエラーになって実行できませんでした。

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)にすると激遅で実行が終わりません。

Rock64, Raspberry Pi 3 の 2台クラスタ N=2000
$ 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 ではほぼ性能に変化はありません。

Rock64, Raspberry Pi 3 の 2台クラスタ 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年 8月 15日 10:46]
link 編集する

コメント一覧

  • すずき 
    さすがに x86_64 と arm のクラスタは無理みたい。エラーになってしまう。 
    (2018年08月15日 10:35:51)
  • すずき 
    実行できた。あと実行ファイルパスについて、大きく勘違いしていた。実行ファイルのパスを完全に合わせないとダメみたい。 
    (2018年08月15日 10:42:01)
  • すずき 
    うーん、なんか暴走したり、動かなかったり、うまくいかない。素直に同じアーキテクチャのマシンをたくさん用意したほうが良さそう。 
    (2018年08月15日 10:52:26)
open/close この記事にコメントする



link もっと前
   2018年 8月 15日 -
      2018年 8月 15日  
link もっと後

管理用メニュー

link 記事を新規作成

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDF ファイル RSS 1.0
QR コード QR コード

最終更新: 10/16 01:37

カレンダー

<2018>
<<<08>>>
---1234
567891011
12131415161718
19202122232425
262728293031-

最近のコメント 5件

  • link 18年10月12日
    すずき 「なるほど!\n京急、京成はヤバそうですね...」
    (更新:10/15 23:02)
  • link 18年10月12日
    ちかふみ 「閉会式直後の出国ラッシュ対策のためだそう...」
    (更新:10/15 20:43)
  • link 18年10月12日
    すずき 「あー、なるほど!閉会式の次にくっつけたん...」
    (更新:10/14 15:44)
  • link 18年10月12日
    hdk 「2020年の東京オリンピックが8月9日ま...」
    (更新:10/14 10:45)
  • link 18年09月07日
    すずき 「ありがとう!\nこちらこそ、楽しみにして...」
    (更新:09/11 19:30)

最近の記事 3件

link もっとみる
  • link 18年10月14日
    すずき 「[ROCK64 の I2S とクロック] また忘れてしまいそうなの...」
    (更新:10/16 01:37)
  • link 18年10月13日
    すずき 「[Welcome back ROCK64] やっと ROCK64 ...」
    (更新:10/15 23:20)
  • link 18年10月11日
    すずき 「[俺たちの引っ越しはまだ終わらない] 引っ越しの荷物は、終盤にヤケ...」
    (更新:10/15 23:19)

こんてんつ

open/close wiki
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報