[[labs.beatcraft.com]]~ [[Deep Learning]]~ #contents *Chainer1.5の導入 [#e6341151] 本文書はChainer1.5の導入で躓いた点などについてまとめています。 **構成 [#g32f0eb7] 以下の構成の機器に、これまでは1.3.0からアップデートの都度、1.4.2まで更新を行い試用を続けていました。 ハードウェア構成 ・CPU : Corei7 3770 ・Memory : 32GB ・GPU1(表示用) : NVIDIA GeForce GT730 ・GPU2(CUDA用) : NVIDIA Tesla K20c ソフトウェア構成 ・OS : Ubuntu 14.04.1 LTS ・Python : 2.7 ・CUDA : 6.5 **導入 [#l80f650c] 当初1.5.0リリース後にsudo pip install --upgrade chainerでアップグレードしようとした際にはMemoryError等で失敗していましたが、~ その後リリースされた1.5.1で改善されています。同バージョンのリリースと同時にインストールガイドが公開されたので、そちらを参考~ にしつつ以下の手順でクリーンインストールを実施しました(以下sudoを省略しています)。 参考:Chainer Install Guide : http://docs.chainer.org/en/stable/install.html ***1) chainer-cuda-depsのアンインストール [#a706db24] 本来1.4系でCuPYを利用するようになった段階で不要な物でしたが、入れたままになっていたので念のためアンインストールを行います。 pip uninstall chainer-cuda-deps ***2) pipのアップグレード [#ze1f1f57] 同様にchainerのアンインストールを行おうとしたところ、pipがchainerを発見出来ない現象が起きたため、pipをアップグレードしました。 pip install --upgrade pip ***3) chainerのアンインストール [#k5bfa6b6] インストールフォルダを見ると複数バージョンのパッケージが残っていたため、以下のアンインストール手順を二度繰り返しました。 pip uninstall chainer ***4) libhdf5のインストール [#d3245e20] インストールガイドではgccと一緒にインストールしていますが、本環境では最新のg++導入済みだったため今回はlibhdf5のみ~ インストールを行いました。 apt-get install libhdf5-dev ***5) chainerのインストール [#zb943f05] ここで改めてchainerをインストールします。3)でアンインストールしている(クリーンインストールとなる) ため、~ --upgradeは付けていません。 pip install chainer **ベンチマーク [#za2a8349] 以上でChainer 1.5.1のインストールに成功したので、MNISTサンプルの学習にかかる時間を time -pで計測し、簡易的なベンチマークを~ 取りました。 time -p pythone train_mnist.py -g 0 ※-g 0 はGPU使用オプションです。 こちらの結果は real 65.34 user 61.02 sys 2.66 となりました。以前1.4.2で計測した際はreal 88秒、user 85秒程度かかっていたため、20秒ほど速くなっています。 **cuDNNの有効化 [#be379e33] ひとまずこれで完了なのですが、上記実行時にcuDNNが有効化されていない旨の警告が表示されています。cuDNNはNVDIAが無償公開している~ Newral Network用のライブラリで、省メモリで高速であるとされています。 cuDNNはNVIDIAの開発者サイト(https://developer.nvidia.com/cudnn)で入手出来ますが、同サイトへの登録と承認が必要です。~ 簡単なアンケート(使用言語やライブラリ、利用目的など)に回答して登録を行ったあと、数時間から数日後にNVIDIAから承認メールが~ 届くとダウンロードが可能になります。 簡単なアンケート(使用言語やライブラリ、利用目的など)に回答して登録を行ったあと、NVIDIAから承認メールが届くとダウンロードが~ 可能になります。承認には数時間から数日かかるようですが、今回は二時間ほどでメールが届きました。 登録時と同じようなアンケートに回答すると、いくつかのバージョンから選択式でcuDNNをダウンロード出来るようになっています。~ 2015年12月現在 v4まで公開されていますが、Chainerがサポートしているのはv2及びv3となっています。使用しているCUDAのバージョンが~ 6.5ならv2、7.0ならv3を選択します。今回はCUDA6.5を使用している環境のため、v2をダウンロードしました。 cuDNNにはインストーラなどは付属しておらず、ヘッダファイルとライブラリがそのまま入っています。今回ダウンロードしたLinux版 v2~ の場合、以下のような構成になっていました。 $ tar zxvf cudnn-6.5-linux-x64-v2.tgz cudnn-6.5-linux-x64-v2/ cudnn-6.5-linux-x64-v2/INSTALL.txt cudnn-6.5-linux-x64-v2/CUDNN_License.pdf cudnn-6.5-linux-x64-v2/cudnn.h cudnn-6.5-linux-x64-v2/libcudnn_static.a cudnn-6.5-linux-x64-v2/libcudnn.so.6.5 cudnn-6.5-linux-x64-v2/libcudnn.so.6.5.48 cudnn-6.5-linux-x64-v2/libcudnn.so これらをCUDAインストールフォルダにコピーします。今回の環境では/usr/local/cudaにCUDAがセットアップされているため、以下の~ ようにしました。 cp cudnn.h /usr/local/cuda/include/ cp lib* /usr/local/cuda/lib64/ 以上でcuDNNのインストールは完了です。 ChainerでcuDNNを有効にするには再インストールが必要になるため、手順3)、5)を再度実行しクリーンインストールを行います。 pip uninstall chainer pip install chainer これでcuDNNを有効化したChainer1.5.1がセットアップ出来ました。再度ベンチマークをとってみると、今度は先の警告は表示されず、結果は real 64.97 user 60.91 sys 2.65 となりました。若干の向上は見られますが、測定誤差の範囲です。もう少し規模の大きなデータで試すと有意な差があらわれるのかもしれません。