前に、AWS-GPUとスパコンを比較する方法(P2インスタンス編)-スパコン用ベンチマークソフトを動かしてみると言うなんともアホっぽい記事を書いた。
上の記事では、GPUがスパコンがどのくらい違うのか比較する意味で、スパコンのベンチマークで使われるLinpackをGPU搭載のマシンで動かしてみてどのくらいの性能が出るか評価した。
上の記事では、EC2のp2インスタンスで比較をしたが、最近EC2に登場したp3インスタンスでLINPACKを動かして評価してみようとという意味だ。スパコンは、メモリもストレージもネットワーク性能も段違いに高性能なので、真に受けないように。
先の記事と同じように、LINPACKベンチマークをaws p2インスタンス(CUDA)で動かしてみる。
ベンチマークの内容を詳しく分かっているわけではないので、間違っているかも知れない。
多くの仕組みは、前回の記事AWS-GPUとスパコンを比較する方法を参考にしている。
AWS p3.2xlargeでLINPACK ベンチマークを動かす。
という訳で、AWSで最もCPUが早そうなマシンを使って、スパコンと性能の比較をしてみる。
今回使用したマシンはこちら
p3.2xlarge
モデル | vCPU | メモリ | GPU |
---|---|---|---|
p3.xlarge | 8core | 16GB | 1(NVIDIA Tesla v100) |
NVidia Tesla v100はNVidiaの最新のGPUでその倍精度浮動小数点の演算能力は 7TelaFlopsあるそうだ。1
LINPACKベンチマーク環境の構築
CUDA実行環境の構築は結構大変だ。
大変なので、linpack実行用のdocker imageを用意してそれを導入すれば動くようにした。。
dockerから透過的にnvidaのGPUを操作する必要があるので、nvidia-dockerを利用する。
nvida-docker環境の作り方は、こちらの記事を参考のこと。
作成したlinpack docker imageはこちらになる。
以下のようにすれば手に入る(CUDA環境での実行を想定している)。
sudo nvidia-docker pull shibacow/linpack_base
で実行環境が手に入る。nvidia9.0-cnn7-devel
をbaseにしている。
LINPACKのベンチマークを実行する。
次のようにして、Linpackを実行する。
root@*********:~/prog/hpl-2.0_FERMI_v15/bin/CUDA# mpirun -np 1 --allow-run-as-root -host localhost ./run_linpack
使ったHPL.dat
チャンピオンデータだけ表示すると
================================================================================
T/V N NB P Q Time Gflops
--------------------------------------------------------------------------------
WR10L2L2 65536 1024 1 1 143.62 1.307e+03
--------------------------------------------------------------------------------
||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)= 0.0044281 ...... PASSED
================================================================================
のようになり、倍精度の浮動小数点で、1307GFlops = 1.307TFlopsを達成した。前のp2.xlarge (Tesla k80)の時の成果が、800GFlopsだったので、大体1.4倍くらいにはなった。
ただ、Nvidia V100の理論性能では、7TFlops位出るので、それに比べればLinpack実行性能は、理論性能の18%程度に留まっている。
パラメータの与え方や、プログラムに問題があったのかも知れない。
このスレッドでNvidiaの人が書いているが、そもそも、Linpackで最新のGPUに対してチューニングしたものは非公開で、現在公開しているCUDA向けのLinpackは最適化されていないそうだ。
Yes, the best HPL performance will come from HPL code specifically provided on a case-by-case basis by NVIDIA. It is not publicly available, and the hpl-2.0_FERMI_v15 will not achieve highest performance on GPUs newer than FERMI.
お手軽に爆速マシンに触る
現在のスパコンの性能が10PFlopsを超えるので、それらには当然太刀打ちできないが、1997年(20年前)のTOP500の一位のスパコンASCI(1.338TFlops/Rmax)には肩を並べるほどの性能がV100にはある(本当はもっと高い性能があるけど)。
そして、この実験は、aws オレゴンリージョンで行い、spot-instanceのp3.2xlargeを使い、かかった金額は、4時間で、3ドル程度だった。
このような最新のマシンを使って性能を評価することは昔だったら数百万はかかっただろうが本当に良い時代になったものである。
(追記) NBodyでflopsを計測する。
LinpackではGPUのハードウェアの実効性能が出せなかった(2割程度)ので、違うプログラムをGPUの実効性能が出せないか調べてみた。
NBodyはCUDAのサンプルに入っている。場所は
/usr/local/cuda-9.0/samples/5_Simulations/nbody
になる(うろ覚え)。
倍精度と単精度でFLopsを調べられるので、調査してみた。
実行結果
抜粋すると、
単精度
ubuntu@***********:/usr/local/cuda-9.0/samples/5_Simulations/nbody$ ./nbody -benchmark -numbodies=8192000 -device=0
= 573.157 billion interactions per second
= 11463.142 single-precision GFLOP/s at 20 flops per interaction
単精度で、11463.142 single-precision GFLOP/s が出た。
倍精度
ubuntu@*********:/usr/local/cuda-9.0/samples/5_Simulations/nbody$ ./nbody -fp64 -benchmark -numbodies=8192000 -device=0
= 186.633 billion interactions per second
= 5599.003 double-precision GFLOP/s at 30 flops per interaction
倍精度で、5599.003 double-precision GFLOP/s が出た。
Nvidia Tesla V100(PCIe)のカタログスペックは、単精度 14 TFlops 倍精度 7 TFlopsとのことなので2。
単精度、倍精度で実効性能80%を達成した(11.4/14,5.599/7)。
このくらいになると流石に速いって感じになる。
2007/06のTop500の中央値250位の性能は次のようなものだ。3
Rank | Site | System | Cores | Rmax (TFlop/s) | Rpeak (TFlop/s) | Power (kW) |
---|---|---|---|---|---|---|
250 | Air Force Research Laboratory United States | Altix 4700 1.6 GHz HPE | 1,024 | 6.0 | 6.6 |
Rmax(実効性能)が、6.0TFlops程度だ。大体2007年のスパコン250位位に性能を、それから10年後のGPUが持っていることになる。