昨日の日記の続きです。
C++のコードでcuDNNを直接使用して推論を行った場合と、Chainerを使用して推論を行った場合の実行時間の比較を行った。
測定条件
- MNISTのtest set images(1000画像)のすべてを推論するのに要する時間を測定
- ミニバッチサイズは、100
- データ読み込み、ミニバッチデータ準備は計測時間に含めない
- モデルは畳み込み2層、全結合層2層
- GPUはGeForce 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;」の間違いです。