cvl-robot's diary

研究ノート メモメモ https://github.com/dotchang/

DeepLearningライブラリのChainerがすごい、らしい

Preferred Infrastructure(以下PFI)からスピンオフした会社、Preferred NetworksのリリースしたDeepLearningライブラリのChainerがすごい、と話題になっています。*1

解説
Deep Learning のフレームワーク Chainer を公開しました | Preferred Research
公式
Chainer: A flexible framework of neural networks
GitHub
pfnet/chainer · GitHub
ドキュメント
Chainer – A flexible framework of neural networks — Chainer 1.1.0 documentation

おそらく初露出
ディープラーニング最近の発展とビジネス応用への課題

公式ツイッター
chainer (@ChainerOfficial) on Twitter


はてぶの反応
はてなブックマーク - Deep Learning のフレームワーク Chainer を公開しました | Preferred Research

Hi-king君によるユーザーインストール事例
人工言語処理入門
Hi-KingさんのChainerの解説がとてもわかりやすい - shi3zの長文日記

てれかさんによる紹介
機械学習ライブラリ Chainerの紹介 - のんびりしているエンジニアの日記

kenmatsu4さんによる中身の解説
Python - 【機械学習】ディープラーニング フレームワークChainerを試しながら解説してみる。 - Qiita
Python - 【ディープラーニング】ChainerでAutoencoderを試して結果を可視化してみる。 - Qiita

sinhrksさんによるR-CNN試行記録
Chainer で Deep Learning: model zoo で R-CNN やりたい - StatsFragments

mktozkさんによるMNISTのテスト記
Chainerを使って特徴抽出してみた - mktozkの日記

xiaoxiaさんによるMNISTのテスト記
[win7][python]chainer の mnist を動かす : 女プログラマってどうよ?

ukonllyさんによるEC2のGPUでChainerを動かした事例
ディープラーニングフレームワークChainerをEC2のGPUインスタンスで動かす g2.2xlarge instance - 開発めも2


何がすごいのか注記。

Windowsにすごいインストールしにくい、ではありません。ネガティブな意図は全くありません。
公式の解説に書いてあるように、

  • 今までのディープラーニングライブラリの多くがプログラミング言語上に独自に実装したマクロ言語にちかいような書きかただったのに対してプログラミング言語の制御構文そのまま素直に書けること
  • 行数を短く書けること
  • 可変長データを扱えること
  • CUDA対応が容易

と、これらのおかげで簡単に扱えるようになり、

  • ユーザーが圧倒的に多く増えそうなこと

がすごそうだ、などなどです。

いつものように

このブログのいつものスタンスのように、Windows環境でインストールしてサンプルを動かすところまで、やり散らかしてみます。

Webページには、とても簡単にインストールできることがアピールされています。

Install Chainer:
pip install chainer

Pythonユーザならすぐわかるのでしょうけれど、ほとんど触ったことがないので良くわかりません。GitHubのReadmeを覗いてみると、

Requirements

Minimum requirements:

Python 2.7+ (v2.7.9 is recommended)
NumPy
Requirements to enable CUDA:

CUDA 6.5+
PyCUDA
scikits.cuda (pip install 'scikits.cuda>=0.5.0b1,!=0.042')
Mako (depending through PyCUDA)
Recommended:

CuDNN v2
scikit-learn (to run some examples)
OpenCV 2.4 (to run some examples)

と、あります。CUDAを使えるようにするためには、いろいろ入れる必要がありそうです。

Python2.7

初心者なのでPythonのインストールからはじめます。
Download Python | Python.org
Python 2.7.10 - 2015-05-23 Windows x86-64 MSI installer, Python 2.7.10の64ビット版のインストーラをダウンロードしてそのままダイアログに沿ってインストールします。
ボタンを押してダウンロードすると32ビット版なので注意。
途中、インストールオプションで環境変数の設定を有効にするのを忘れないでください。
忘れた場合は、Windows環境変数のPATHに、>>
C:\Python27;C:\Python27\Scripts;<<を追加しておきます。

CUDA 6.5+

CUDA 7 Downloads
バージョン6.5以上とのことなので、現在の最新版の7をインストールしてみます。どちらも同じだと思いますが、ネットワークインストーラを使いました。

Chainerのインストール

コマンドプロンプトを開いて、適当な場所で

pip install chainer

を実行します。何事もなければ、無事インストールが完了します。

C:\Python27\Src>pip install chainer
You are using pip version 7.0.1, however version 7.0.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting chainer
Using cached chainer-1.0.0.zip
Collecting numpy (from chainer)
Using cached numpy-1.9.2.tar.gz
Installing collected packages: numpy, chainer
Running setup.py install for numpy
Running setup.py install for chainer
Successfully installed chainer-1.0.0 numpy-1.9.2

C:\Python27\Src>

pyCUDAなどのインストール

gitHubのREADMEを見ると、

pip install `chainer-cuda-requirements`

をしなさい、と書いてあります。そのままコピペしてコマンドプロンプトに入れてみても、エラーが出てうまくいきません。
Hi-king君のブログには、

pip install -r chainer/requirements/cuda-requirements.txt

としなさい、とあります。chainerパッケージソースは、C:\Python27\Lib\site-packages\chainerにありますので、
C:\Python27\Lib\site-packagesに移動してコマンドを実行します。

依存関係のあるすべてのライブラリのインストールが始まるのですが、悲しいことにエラーで途中で止まってしまいます。
pytoolsで一度止まり、再度実行すると、pycudaのインストールでcuda.libが無いとエラーが出て止まってしまいます。
これをこのまま正攻法ではうまく解決することができなかったので、搦め手の作戦でプリビルド版pycudaをインストールしてしまうことにします。
Python Extension Packages for Windows - Christoph Gohlke
から、pycuda‑2014.1+cuda7028‑cp27‑none‑win_amd64.whlをダウンロードして、c:\Python27\Srcなど適当な場所に置きます。
.whlファイルというのはpip用パッケージファイルだそうなので、pip installを使うと、

C:\Python27\Src>pip install "pycuda-2014.1+cuda7028-cp27-none-win_amd64.whl"

You are using pip version 7.0.1, however version 7.0.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
pycuda-2014.1+cuda7028-cp27-none-win_amd64 (1).whl is not a supported wheel on t
his platform.

pipが古いと怒られます。言われたとおりに、pip install --upgrade pipとすると、今度は不明なエラーが出てきます。
仕方が無いので、別のコマンドでインストールするようにします。

easy_install -U pip

再度、C:\Python27\Src>pip install "pycuda-2014.1+cuda7028-cp27-none-win_amd64.whl"しても、それでもうまくpyCUDAが入ってくれないので、ためしに

easy_install pycuda

したら入ってくれました。なんだかなぁ?

exampleの実行

Hi-King君に倣って、MNIST(手書き数字データベース)のトレーニングを動かしてみます。
pipではexampleまではインストールしてくれないので、結局gitHubからchainerをdownload Zipして持ってきてc:\Python27\Srcなど適当なフォルダにおきます。

python chainer/examples/mnist/train_mnist.py

としてみると、sklearnが無いとのエラーで実行できません。これはscipyの一部っぽいので、scipyを入れるために
easy_install scipy
をしてみます。

どーにかこーにか、動いてくれるとこんな感じ。

C:\Python27\Src>python chainer/examples/mnist/train_mnist.py --gpu=0
C:\Python27\lib\site-packages\scikits\cuda\cublas.py:273: UserWarning: creating CUBLAS context to get version number
warnings.warn('creating CUBLAS context to get version number')
fetch MNIST dataset
epoch 1
train mean loss=0.306786188462, accuracy=0.905849980625
test mean loss=0.113493760865, accuracy=0.963599978685
epoch 2
train mean loss=0.139079807708, accuracy=0.958166643878
test mean loss=0.0890373891999, accuracy=0.970099974871
epoch 3
train mean loss=0.109997754642, accuracy=0.965649973452
test mean loss=0.0795224017871, accuracy=0.974599972963
epoch 4
train mean loss=0.0917859388577, accuracy=0.971499970555
test mean loss=0.073240505328, accuracy=0.97779997468
epoch 5
train mean loss=0.0833765683455, accuracy=0.973849968414
test mean loss=0.0683212573198, accuracy=0.979299973845
epoch 6
train mean loss=0.0766474742768, accuracy=0.97638330241
test mean loss=0.063418156154, accuracy=0.980099976659
epoch 7
train mean loss=0.067410419425, accuracy=0.978983300924
test mean loss=0.0646204504395, accuracy=0.980999974608
epoch 8
train mean loss=0.0682146364241, accuracy=0.978966634572
test mean loss=0.0602863396564, accuracy=0.982399975657
epoch 9
train mean loss=0.0608139315932, accuracy=0.98093330125
test mean loss=0.0617811113021, accuracy=0.981899975538
epoch 10
train mean loss=0.0606179020866, accuracy=0.980583300392
test mean loss=0.0636145667713, accuracy=0.982399974465
epoch 11
train mean loss=0.0576722102691, accuracy=0.982099967202
test mean loss=0.0656754320448, accuracy=0.981999973655
epoch 12
train mean loss=0.0559694529099, accuracy=0.982966634134
test mean loss=0.0679412587003, accuracy=0.980999975204
epoch 13
train mean loss=0.0499226394409, accuracy=0.98391663452
test mean loss=0.0610606807985, accuracy=0.982999975085
epoch 14
train mean loss=0.0506608592724, accuracy=0.98413329949
test mean loss=0.0630035862713, accuracy=0.982499975562
epoch 15
train mean loss=0.0496960212413, accuracy=0.98439996769
test mean loss=0.0606312751885, accuracy=0.983599977493
epoch 16
train mean loss=0.0483314509546, accuracy=0.984716634254
test mean loss=0.0615491026078, accuracy=0.984199975133
epoch 17
train mean loss=0.0454906783598, accuracy=0.985766634842
test mean loss=0.0733622892188, accuracy=0.981299977303
epoch 18
train mean loss=0.0453769801884, accuracy=0.986183302402
test mean loss=0.0641495033387, accuracy=0.982499976158
epoch 19
train mean loss=0.0435018022994, accuracy=0.987049969335
test mean loss=0.06271149139, accuracy=0.985099976063
epoch 20
train mean loss=0.0425746999255, accuracy=0.987483302355
test mean loss=0.0616144765261, accuracy=0.983399974704

何が悪いのか知らないけれど、面倒くさい・・・
途中、試行錯誤していたのでここには書いてないものもインストールしているかもしれません。
http://aka.ms/vcpython27なんてのも入れた記憶が。。。

とりあえずexampleをcudaで動かすまでの手順の整理

  • Python27の64bit版をインストール.環境変数PATHの設定をしておく。
  • GitHub https://github.com/pfnet/chainer からdownload zipでchainerをダウンロード。c:\Python27\Srcに置く。以下の作業はc:\Python27\Srcをカレントディレクトリとして行う。

numpy-1.9.2+mkl-cp27-none-win_amd64.whl
pycuda-2014.1+cuda7028-cp27-none-win_amd64.whl
scipy-0.15.1-cp27-none-win_amd64.whl
scikit_learn-0.16.1-cp27-none-win_amd64.whl

  • pipのバージョンアップ

pip install --upgrade pip
easy_install -U pip
pip install --upgrade pip
easy_install pip

  • 関連ライブラリのwhlを使ったpipによるインストール

pip insall numpy-1.9.2+mkl-cp27-none-win_amd64.whl

pip install pycuda-2014.1+cuda7028-cp27-none-win_amd64.whl
pip install pycuda-2014.1+cuda7028-cp27-none-win_amd64.whl
pip install pycuda-2014.1+cuda7028-cp27-none-win_amd64.whl
easy_install pycuda

pip install scikit_learn-0.16.1-cp27-none-win_amd64.whl

pip install scipy-0.15.1-cp27-none-win_amd64.whl

  • chainerのインストール

pip install chainer

  • cudaのrequirementsをインストール

pip install -r chainer/chainer/requirements/cuda-requirements.txt
pip install -r chainer/chainer/requirements/cuda-requirements.txt

  • exampleをCPUでテスト

python chainer/examples/mnist/train_mnist.py

  • exampleをGPUでテスト

python chainer/examples/mnist/train_mnist.py --gpu=0

インストーラの機嫌が良くわかりませんね・・・。

深層学習 (機械学習プロフェッショナルシリーズ)

深層学習 (機械学習プロフェッショナルシリーズ)

*1:ライブラリ以上に会社が凄そう?上場すればモルフォ以上?そのまえにGoogleに買収されそう?