TorchをcuDNNに対応させてみた

torch

NVIDIAのMachine LearningリポジトリでUbuntu 14.04にインストールしたTorch(torch7-nv)にcudnn.torchをインストールして、cuDNNに対応させてみました。

スポンサーリンク

経緯

Torchのneural-styleで画風を変換してみた
NVIDIAのMachine LearningリポジトリでUbuntu 14.04にインストールしたTorch(torch7-nv)で、画風を変換するneural-styleを試してみました。

上の記事のneural-styleは、-backendオプションでnncudnnclnnを選択できるようになっています。
-backendオプションのデフォルトのnnは、少し紛らわしいのですが、通常のnnではなく、CUDAを使用するcunnとなっています。また、cudnnは、文字通りcuDNNを使用し、clnnは、OpenCLを使用します。

前回の記事では、-backendオプションを設定していないので、CUDAを使用していたことになります。
実は、cuDNNを使用するcudnn.torchを以下のコマンドでインストールしたのですが、

$ sudo luarocks install cudnn

-backend cudnnを追加するとエラーが発生していました。

$ th neural_style.lua -content_image content.jpg -style_image style.png \
-output_image output.jpg -gpu 0 -backend cudnn

対策

GitHubのcudnn.torch(https://github.com/soumith/cudnn.torch)を確認してみると、masterブランチは、cuDNN R5(cuDNN 5)に対応しているようなのですが、自分のPC環境では、TensorFlowやChainerの関係で、CUDAディレクトリにはcuDNN 4をコピーしているので、cuDNN 4に対応したcudnn.torchのR4ブランチを以下のコマンドでインストールしてみました。

$ sudo luarocks install https://raw.githubusercontent.com/soumith/cudnn.torch/R4/cudnn-scm-1.rockspec

現状では、以下のコマンドでもエラーが発生していません。

$ th neural_style.lua -content_image content.jpg -style_image style.png \
-output_image output.jpg -gpu 0 -backend cudnn

但し、-backend cudnnを追加しただけでは、GPUのVRAM使用量が半分位になりますが、処理時間は、ほとんど変わらないか少し遅くなりますので、-backend cudnn -cudnn_autotune -optimizer adamを追加した以下のコマンドに変更することで、処理時間も少し短くなります。

$ th neural_style.lua -content_image content.jpg -style_image style.png \
-output_image output.jpg -gpu 0 -backend cudnn -cudnn_autotune -optimizer adam

まとめ

NVIDIAのMachine LearningリポジトリでUbuntu 14.04にインストールしたTorchに、cudnn.torchのR4ブランチをインストールして、cuDNNに対応させてみました。