TadaoYamaokaの日記

山岡忠夫Homeで公開しているプログラムの開発ネタを中心に書いていきます。

Chainerで学習したモデルを使ってcuDNNで推論する(時間計測)

昨日の日記の続きです。

C++のコードでcuDNNを直接使用して推論を行った場合と、Chainerを使用して推論を行った場合の実行時間の比較を行った。

測定条件

  • MNISTのtest set images(1000画像)のすべてを推論するのに要する時間を測定
  • ミニバッチサイズは、100
  • データ読み込み、ミニバッチデータ準備は計測時間に含めない
  • モデルは畳み込み2層、全結合層2層
  • GPUGeForce GTX 1080を使用
  • CUDA 9.0、cuDNN 7.0を使用

測定結果

Chainer 989.7 ms
cuDNN 55 ms

cuDNNを直接使用して推論を行った場合、Chainerを使用して推論を行った場合より、約18倍高速になった。

シングルスレッドでの計測のため、マルチスレッドでマルチGPUを使う場合、PythonにはGILの制約があるため、さらに高速化の効果があると思われる。

推論に速度を求める場合は、cuDNNを直接使用することも検討した方が良さそうだ。

計測には以下のコードを使用した。
github.com
※layers.hのConvLayerのset_paramの「const size_t size = k * k * fsize * fsize;」は、「const size_t size = c * k * fsize * fsize;」の間違いです。