labs.beatcraft.com
Deep Learning

Chainer1.5の導入

本文書はChainer1.5の導入で躓いた点などについてまとめています。

構成

以下の構成の機器に、これまでは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

導入

 当初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のアンインストール

 本来1.4系でCuPYを利用するようになった段階で不要な物でしたが、入れたままになっていたので念のためアンインストールを行います。

pip uninstall chainer-cuda-deps

2) pipのアップグレード

 同様にchainerのアンインストールを行おうとしたところ、pipがchainerを発見出来ない現象が起きたため、pipをアップグレードしました。

pip install --upgrade pip

3) chainerのアンインストール

 インストールフォルダを見ると複数バージョンのパッケージが残っていたため、以下のアンインストール手順を二度繰り返しました。

pip uninstall chainer

4) libhdf5のインストール

 インストールガイドではgccと一緒にインストールしていますが、本環境では最新のg++導入済みだったため今回はlibhdf5のみ
 インストールを行いました。

apt-get install libhdf5-dev

5) chainerのインストール

 ここで改めてchainerをインストールします。3)でアンインストールしている(クリーンインストールとなる) ため、
 --upgradeは付けていません。

pip install chainer

ベンチマーク

以上で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の有効化

ひとまずこれで完了なのですが、上記実行時にcuDNNが有効化されていない旨の警告が表示されています。cuDNNはNVDIAが無償公開している
Newral Network用のライブラリで、省メモリで高速であるとされています。

cuDNNはNVIDIAの開発者サイト(https://developer.nvidia.com/cudnn)で入手出来ますが、同サイトへの登録と承認が必要です。
簡単なアンケート(使用言語やライブラリ、利用目的など)に回答して登録を行ったあと、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

となりました。若干の向上は見られますが、測定誤差の範囲です。もう少し規模の大きなデータで試すと有意な差があらわれるのかもしれません。


BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2015-12-24 (木) 18:30:17 (574d)