MATRIX MULTIPLICATION ベンチマーク | AMD Vega and NVIDIA GeForce シリーズ比較 (Japanese)

Introduction

株式会社ACUBE様より、Radeon Pro WX9100をお貸しして頂きましたので、そのレポートと共に弊社ブログへの結果を記載することに致しました。ご協力頂いた、ACUBE様に心より御礼を申し上げます。

このレポートは、Radeon Pro WX9100 製品を主軸に、同社 RadeonRX560/580, RadeonVega56/64/Frontier Edition, 他 NVIDIA 製品で、GeForceシリーズを比較したものになります。

元々の目的は、GPU クラウドコンピューティングにおける DeepLearning において、推論及び学習スピード、ライブラリの動作評価、費用対効果、耐久性及び熱処理効率、安定性、消費電力量、等などを比較し、導入を検討することですが、もっと多くの方々にGPUの能力について知って貰いたいがため記事に書くことにしました。


Matrix Multiplication


*TitanX(M)のみ途中で計測が途切れたので最後の値を機械的に入れています。

計算指標

計算指標としては、一般ニューラルネットワークにおける基礎、ρ(φiωji + βj)の計算で重要な行列 x 行列の速度、及び世界コンペティションやベンチマークでよく使用される CIFAR10 を TensorFlow の公式を使用し 、学習スピードを計測するものとしました。
今回の記事は、”行列計算”のみ掲載します。

行列の掛け算については、
https://github.com/yaroslavvb/stuff/blob/master/matmul_benchmark_seq.py
を参照。

動作環境

AMD側
Ubuntu 16.04.3 x64
HIP-TensorFlow 1.0.1
Python 2.7
Driver: ROCm 1.7, AMDGPUPRO 17.50

NVIDIA側
Ubuntu 16.04.3 x64
TensorFlow r1.6
Python 3.5
Driver: 390.30, CUDA9.0, cuDNN7

HIP-TensorFlow1.0.1 については Python3.5 でのセットアップ方法が不明なため、 Python2.7 を使用しました。また、今ベンチマークにおける指標については CPU 能力は基本不要で、Python2.7/3.5 は変わらないと判断したため、NVIDIA 側は Python3.5+TensorFlow 最新(r1.6)を利用。また、TitanV のCIFAR10においては”TensorCore FP16”を利用できるようにしているため、完全に同じ条件とは言い難いことに注意。

ドライバは Radeon 側は ROCm ベースの最新(17.50)、 NVIDIA 側は 390.30 の完全 TitanV 対応しているドライバ及び、CUDA9.0+cuDNN7 を使用。NVIDIA側に肩を持つような構成になっていますが、HIP-TensorFlowのサポートスピードが早くないため、これは仕方がありません。

考察

行列の掛け算においてはほぼ、予測したとおりの結果となっており、公式で言われてるFlops指標と一致し、違和感の無い指標が取れています。TitanVについては32bit浮動小数点での計算においては、TensorCore(FP16)が使われず、公式の110TFlopsには全く届かないため、FP32を指標とするならば、1080Tiより少し早い程度になります。また、AMD製品もNVIDIA製品に負けず劣らず健闘しているところも注目すべき点でしょう。この事からライブラリをしっかりと組めればFP32指標では、NVIDIAとAMD双方において大きい差分は無いことを意味しますが、実際に後日記述するCIFAR10での差が明確に開くため、HIP-TensorFlowを改善するか、Vertex.aiのPlaidMLを使用すると言ったチューンナップが必用だということが分かっています。