GeForce RTX 2080 Tiを使って、ニューラルネットワークの推論でTensorCoreが使えるかを試してみた。
TitanVでは、TensorCoreを使うことで、将棋AIの推論が2.57倍高速になった。
2080 Tiにも、TensorCoreが544個搭載されており、TitanVの640個より少ないが、CUDAコアで計算するよりも速くなると思われる。
環境構築
まず、CUDAのバージョンを2080 Tiに対応したバージョンにする必要があるので、最新の10.0にバージョンアップした。
それに合わせて、cuDNNも最新の7.3.1にした。
ベンチマークプログラム
TitanVで測定したときと同じベンチマークプログラムを使用した。
将棋AIのResNet 10ブロックのニューラルネットワークの推論速度を測定する。
DeepLearningShogi/gpubenchmark.cpp at master · TadaoYamaoka/DeepLearningShogi · GitHub
測定結果
TitanVの速度も参考のため測定した。
また、1080 Tiの前回の測定結果も記載する。
結果は以下の通り。
- 10万局面推論の平均時間
- バッチサイズ128
単位:ms
GPU | TensorCore無効 | TensorCore有効 | 比率(無効/有効) |
---|---|---|---|
2080 Ti | 13.955 | 11.966 | 1.17 |
Titan V | 11.963 | 12.057 | 0.99 |
1080 Ti※ | 16.218 | 16.201 | 1.00 |
※CUDA 9.2+cuDNN 7.2
考察
2080 Ti
2080TiでTensorCoreを有効にすると、1.17倍高速になっている。
前回、CUDA 9.2+cuDNN 7.2で、TitanVで測定した結果では、2.57倍だったのに対して高速化の幅は小さくなっている。
Titan V
一方、Titan Vでは、TensorCoreを有効にすると、速度が0.99倍と、前回の結果と大きく異なる結果になった。
原因を調べるため、プロファイラで使用されているアルゴリズムを確認したところ、前回は、volta_s884cudnn_fp16~がトップにあったが、volta_sgemm_128x64_nnになっていた。
cudnnGetConvolutionForwardAlgorithm_v7で、自動で選択されるアルゴリズムを調べたところ、前回は、すべての畳み込み層で、CUDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_PRECOMP_GEMMが使用されていたが、今回は25層のうち21層でCUDNN_CONVOLUTION_FWD_ALGO_WINOGRAD_NONFUSEDが使用されていた。
そこで、前回と同じアルゴリズムにするため、明示的にCUDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_PRECOMP_GEMMが使用されるようにして再測定した。
GPU | TensorCore無効 | TensorCore有効 | 比率(無効/有効) |
---|---|---|---|
Titan V | 11.963 | 6.557 | 1.82 |
結果、TensorCoreが無効の場合より、1.82倍高速になった。
前回は、TensorCoreを使った場合は、6.888msだったので、ほぼ同じになっている。
プロファイラで使用されているアルゴリズムを確認したところ、前回と同じvolta_s884cudnn_fp16~がトップになった。
また、前回よりTensorCoreが無効の場合の速度が速くなっていた。
CUDA 10.0+cuDNN 7.3.1でTensorCoreが無効のアルゴリズムが改善されているようだ。
なお、2080 Tiでは、自動で選択されるアルゴリズムは、すべてCUDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_PRECOMP_GEMMとなっていた。
まとめ
GeForce RTX 2080 Tiでも、TensorCoreを使うことで推論の速度が改善されることが確認できた。
CUDA、cuDNNのバージョンによっては、自動で選択されるアルゴリズムではTensorCoreが使われない場合があることがわかった。
その場合、明示的にアルゴリズムを指定する必要がある。