DLIB with CUDAでCNNを使ってみた in Windows
DLIBのコンパイル
DLIBのCUDAを有効にするためには、CUDA 8.0(RC版じゃないですよ)とcuDNN 5.0以上が必要です。また、Windowsも64bit環境でなければならないので注意してください。
まず、cuDNNは下記のURLからダウンロードしてください。バージョンは5.0でも5.1でもどっちでも構いません。
cuDNN
developer.nvidia.com
このcuDNNを適当な所に解凍し、さらに以下のCMakeを実行します。
cmake -DCOMPILER_CAN_DO_CPP_11=ON -DCMAKE_PREFIX_PATH=<cuDNNのルートディクレトリ> <dlibのルートディレクトリ>
ただし、このままだとコンフィギャレーションエラーが出るので、以下の様に"dlib/cmake_utils/test_for_cudnn/find_cudnn.txt"を以下のように書き換えます(githubのリポジトリにある最新版のdlibを使う場合、このバグは修正済みなので飛ばしてOK)。
message(STATUS "Looking for cuDNN install...") # Look for cudnn, we will look in the same place as other CUDA # libraries and also a few other places as well. find_path(cudnn_include cudnn.h HINTS ${CUDA_INCLUDE_DIRS} ENV CUDNN_INCLUDE_DIR ENV CUDNN_HOME PATHS /usr/local ENV CPATH PATH_SUFFIXES include ) get_filename_component(cudnn_hint_path "${CUDA_CUBLAS_LIBRARIES}" PATH) find_library(cudnn cudnn HINTS ${cudnn_hint_path} ENV CUDNN_LIBRARY_DIR ENV CUDNN_HOME PATHS /usr/local /usr/local/cuda ENV LD_LIBRARY_PATH PATH_SUFFIXES lib64 lib x64 ) mark_as_advanced(cudnn cudnn_include)
これでコンパイルすれば、無事CMakeも通ると思います。
結果
推定精度は前回と同じなんだけど、実行時間(学習時間)が爆速になりました。
以前は学習に2日程かかっていたものが20sで終わるようになりました(GTX 970で実行)
まあ、DLIBではそもそもCPUにおける並列化すらしていないようなので当たり前といえば当たり前ですが。