Raspberry Pi3でスパコン遊び その3

前回はRaspberry Pi3を4台でクラスタ構成を組み、ベンチマークテストHPLを実行した。
結果は1.05GFLOPSだった。
http://d.hatena.ne.jp/debslink/20160801/1469980976


今度はRaspberry Pi3を2台追加し合計6台のクラスタ構成でベンチマークテストHPLを実行。
しかし出力されるFLOPSの値は1.3GFLOPS前後がやっとで、思っていた以上に上昇していなかった。

動作が軽快になれば多少は増加するかなという事で、OSや動作するデーモン等の設定変更でRaspberry Piのチューニングを実施。カーネルHPLの各ライブラリのコンパイルは実施していない。
加えて、CPUのクロックをondemandの600MHzからperformanceの1200MHz固定に設定変更、最終的に1350MHzにまで上げてベンチマークテストを実施した。
目指すはCRAY-2が叩き出した1.9GFLOPS。

HPLベンチマークテストは、HPL.datファイルの以下の値にて実施した。

N: 22528 (後に25600に変更)
NB: 144
P: 2
Q: 3

実行したベンチマークテスト実行コマンドは以下のとおり。

mpirun -np 6 -host 192.168.1.11,192.168.1.12,192.168.1.13,192.168.1.14,192.168.1.15,192.168.1.16 ./xhpl

1.まずはいくつか設定変更し、1200MHzでベンチマークテストを実施。
SWAPを無効化。RAMディスクを使用。

sudo swapoff --all
sudo apt-get remove dphys-swapfile

/etc/fstabを開き、以下3行を追記。

tmpfs	/tmp		tmpfs	defaults,size=32m,noatime,mode=1777	0	0
tmpfs	/var/tmp	tmpfs	defaults,size=16m,noatime,mode=1777	0	0
tmpfs	/var/log	tmpfs	defaults,size=32m,noatime,mode=0755	0	0

sysv-rc-confで以下の不要なデーモンを停止。
dbus
avahi-daemon
alsa-utils
bluetooth
motd
plymouth

GPUに割り当てられているメモリ上限を64MBから16MBに変更し、メモリの空き容量を増加。CUIで運用している為、GPUに割り当てられるメモリは必要最小限で充分である為である。
raspi-configを実行し、memory_splitを選択。
64MBから16MBに修正する。

cpufrequtilsをインストールし、1200MHz固定に設定変更。
/etc/init.d/cpufrequtilsファイルを開き、以下の3行を追記。

ENABLE="true"
GOVERNOR="performance" (ondemandからperformanceに変更し600MHzへの抑制を解除)
MAX_SPEED="0"
MIN_SPEED="0"

物理構成の改善。
Raspberry Pi間を接続しているUTPケーブルを、家に転がっていた長さがまちまちな5mから15mの物から長さ20cmの物に統一し、信号劣化を極力抑える事を試みた。
各Raspberri Piを集約するノード間ネットワークをCoregaのハブからCiscoのCatalyst2960に変更。CDP等余計なパケットを流さない設定にした。

上記のチューニング実施後、 ベンチマークテストを実施。(CPU Clock: 1200MHz)
結果: 4891.74秒 1,558MFLOPS (1.558GFLOPS)


2.FLOPSの更なる増加を期待し、1200MHzから1300MHzにオーバークロックを実施。
/boot/config.txtファイルを開き、以下の2行を追記。

arm_freq=1300
over_voltage=5

再起動後、ベンチマークテストを実施。
(CPU Clock: 1300MHz)
結果: 4545.52秒 1.670MFLOPS (1.670GFLOPS)
一気に120MFLOPSも上がった。これは期待出来るか。


3.熱暴走対策
自分の環境では、1300HMzを超えてオーバークロック設定すると、ベンチマークテスト実行中にCPUが高熱になりRaspberry Piが無反応になる事象が多発した。
ここで言う無反応とは、Tera Termが落ちsshログインが不可能になる事を指す。
電源を落とし5分程放置した後に再度電源を入れると、元のとおり使用可能になる。CPU自体が破損した訳ではないようだ。
家にある小型扇風機(アピックス AFT-440M)で風を当てながらベンチマークテストを実施。

"cat /sys/class/thermal/thermal_zone0/temp"コマンドで温度を計ると、扇風機無しでは60度以上に上昇していたが、43度程度にまで下がっていた。


CPU Clock値1305MHzでベンチマークテスト実施。
結果: 4546.51秒 1.677e+00 (1.677GFLOPS)

CPU Clock値1310MHzでベンチマークテスト実施。
結果: 4511.31秒 1.690e+00 (1.690GFLOPS)


4.N値を25600に上げてベンチマークテストを実施。
25600を超えて設定するとFLOPS値が下がった為、25600に固定しベンチマークテストを継続する。

CPU Clock値1310MHzでベンチマークテスト実施。
結果: 6557.93秒 1.706e+00 (1.706GFLOPS)


5.少しづつオーバークロックしながらベンチマークテストを実施。

CPU Clock値1330MHzでベンチマークテスト実施。
結果: 6469.93秒 1.729e+00 (1.729GFLOPS)

CPU Clock値1335MHzでベンチマークテスト実施。
結果: 6457.63秒 1.732e+00 (1.732GFLOPS)

CPU Clock値1340MHzでベンチマークテスト実施。
結果: 6435.76秒 1.738e+00 (1.738GFLOPS)

CPU Clock値1350MHzでベンチマークテスト実施。
結果: 6368.89秒 1.756e+00 (1.756GFLOPS)


...しかし、1350MHzを超えると小型扇風機で強風を当てても無反応になる事が多くなり、CPUのオーバークロックは1350MHzで断念。
今回は1.756GFLOPSを最終的な結果とする。150MFLOPS程度届かないもののCRAY-2と同程度の結果を出す事が出来た。

Raspberry Pi3 6台クラスタ構成時の理論ピーク演算性能が28.8GFLOPSに対し、ベンチマークテストの結果(実効ピーク演算性能)は1.76GFLOPSだった。Efficiencyは0.06。
元々持っている性能のたった6%しか出し切れてない。これはまだまだチューニングの余地が有る事を示している。

更に台数を増やせば簡単にFLOPS値を上げる事が出来る。
しかし当面は6台構成のまま、OSやHPLのチューニングで高い値を叩き出してみたい。次回はHPLの各ライブラリをapt-getコマンドでインストールしていたが、ソースからビルドしてインストールし、ベンチマークテストを実施してみよう。


http://d.hatena.ne.jp/debslink/20160724/1469358050 (Raspberry Pi3でスパコン遊び その1)
http://d.hatena.ne.jp/debslink/20160801/1469980976 (Raspberry Pi3でスパコン遊び その2)