MacでのChainerインストールに必要なものの説明とまとめ

この記事は、[人工知能（Chainer/TensorFlow/CSLAIER）のためのpython環境構築](http://qiita.com/yuyayyy/items/3633f2cb4780494b4db9)の続きの記事です。



#目次
1.記事の目的
2.筆者の開発環境
3.インストール時の注意点
4.Chainerのインストール


#記事の目的
この記事では、日本で人気のある人工知能ライブラリであるChainerをインストールします。自分でインストールしてみて、わからないことがたくさんあったので調べたことをまとめてみました。これから、Chainerをインストールする方の参考になれば幸いです。


#筆者の開発環境
・MacBook Pro (Retina, 13inch, Early 2015)
・macOS Sierra (バージョン 10.12.2)
・プロセッサ (2.7 GHz Intel Core i5)
・メモリ (8 GB 1867 MHz DDR3)
・グラフィックス (Intel Iris Graphics 6100 1536 MB)

・Homebrew、pyenv、anaconda2-4.2.0/anaconda3-4.2.0はインストールされている前提です。もしインストールされていない方は、[人工知能（Chainer/TensorFlow/CSLAIER）のためのpython環境構築](http://qiita.com/yuyayyy/items/3633f2cb4780494b4db9)を読んでみてください。


#インストール時の注意点
[Chainerのgit](https://github.com/pfnet/chainer)を見るとChainerを使用するために必要なものは、


>Minimum requirements（最小要件）:
　・Python 2.7.6+, 3.4.3+, 3.5.1+
　・NumPy 1.9, 1.10, 1.11
　・Six 1.9

>Requirements for some features（
一部機能の要件）:
　・CUDA support
　　　　CUDA 6.5, 7.0, 7.5, 8.0
　　　　filelock
　　　　g++ 4.8.4+
　・cuDNN support
　　　　cuDNN v2, v3, v4, v5, v5.1
　・Caffe model support
　　　　Protocol Buffers (pip install protobuf)
　　　　protobuf>=3.0.0 is required for Py3
　・Image dataset support
　　　　Pillow
　・HDF5 serialization support
　　　　h5py 2.5.0
　・Testing utilities
　　　　Mock
　　　　Nose



とかなりたくさんあります（gitはソースコードをダウンロードできる他に、ページの下の方にそのライブラリを使うのに必要なものや簡単な使い方が書いてあるので、初めて使うときの参考になります）。僕はほとんど聞いたことのないものだったので大変だと思っていましたが、最低限の機能を実行するために必要である、「Python」「Numpy」「Six」はanacondaに入っているため、インストールする必要はありません。

また一部機能の要件にある、「g++」はMacであれば初めからインストールされています。「filelock」「Pillow」「h5py」「Nose」も、anacondaに入っているので新たにインストールする必要はありません。

###Numpy
Numpyは、pythonにおいて数値計算を効率的に行うための拡張[モジュール](https://oshiete.goo.ne.jp/qa/303567.html)です。

「NumPyの使い方 - プログラミング速報」
http://programming.blogo.jp/python/numpy/introduction

人工知能に学習させる時には、行列の計算を行うのですが、
Numpyを使うととてもスムーズに計算を行わせることができます。


###Six
Sixは、pythonの２系と３系の違いを吸収するためのパッケージです。
例えば、２系と３系で違う名前のライブラリがあったとしても、Six経由でインストールすると同じ名前で使用することができます。

「Python でバージョンニュートラルなコードを書くためのライブラリ Six」http://momijiame.tumblr.com/post/67465721521/python-%E3%81%A7%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%88%E3%83%A9%E3%83%AB%E3%81%AA%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AE%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA-six


###CUDA
CUDA（クーダと読みます）は、NVIDIA社が提供しているGPUコンピュータ向けの総合開発環境のことだそうです。GPU（グラフィカルプロセッシングユニットの略、画像処理を専門としていて、単純かつ膨大なデータの処理をするのに長けている、CPUは連続的な計算が得意だがGPUは並列的な演算が得意）やCUDAについては下記サイトが参考になります。

「ゼロからはじめるGPUコンピューティング」
http://www.gdep.jp/page/view/248


###filelock
filelockは、排他制御をするためのものです。排他制御とは、プログラムを実行した時に複数のプロセスが利用できる共有の資源に対して競合が発生した時に、あるプロセスに資源を独占的に利用させている場合は、他のプロセスが利用することができないようにすること。


「排他制御とは　「ロック」(lock): -IT用語バイナリ」
http://www.sophia-it.com/content/%E6%8E%92%E4%BB%96%E5%88%B6%E5%BE%A1


###g++
g++とは、
>GNU の GCC に含まれる C++ のコンパイラです。

なんのことだかさっぱりわかりませんでした。
GNUはグニューと読み、OS（オペレーティングシステムの略、コンピュータを動かすためのソフトウェア）でありかつ、コンピュータソフトウェアの広範囲におけるコレクションのことらしいです。

GCCとは、[GNUプロジェクト](http://e-words.jp/w/GNU.html)（UNIX互換ソフトウェア群の開発プロジェクトの総称のこと）が開発と公開をしているコンパイラのことです。

フリーソフトウェアを普及しようとしている団体がUNIXと互換性のあるGNUというOSを作っていて、それをコンパイル（人間が書いたコードをコンピュータが読めるようにすること）するためのものということですかね。

「g++」
http://kaworu.jpn.org/cpp/g++


###cuDNN
cuDNNとは、NVIDIAという会社がDNN（Deep Neural Networkの略、深層学習のこと)開発用に提供しているGPUに最適化したライブラリのことです。

深層学習は単純ながら膨大な計算を行うためにCPUだとかなりの時間がかかってしまったり、場合によってはほとんど進まなくなってしまったりします。深層学習をCPUより早く行えるものだと思えば大丈夫だと思います。

「GTC 2015 - Deep Learning用のCUDAライブラリ「cuDNN」」
http://news.mynavi.jp/articles/2015/04/10/gtc2015_cudnn/


###Protocol Buffers
Protocol Buffersについてはこの記事が非常にわかりやすかったです。

「ProtocolBuffersについて調べてみた」
http://qiita.com/aiueo4u/items/54dc5dd8c4772253634c


###Pillow
Pillowは、pythonの画像処理ライブラリで大量の画像でも一気に加工できます。ちなみに似ているものでPILというのがあるのですが、こちらはpyhton３系に対応していないので、Pillowが使われることが多いです。

人工知能を学習させるには、大量の画像を読み込ませないといけないのですが、読み込ませる画像は大きさを揃えなければならなかったり、画像を加工して枚数を増やしたりします。
そんな時に便利なのがこのライブラリです。

「Python 3.5 対応画像処理ライブラリ Pillow (PIL) の使い方」
https://librabuch.jp/blog/2013/05/python_pillow_pil/


###h5py
[HDF5](http://yukisakamoto.hatenablog.com/entry/20130413/1365825028)というファイルフォーマットを利用するためのライブラリなのかな。

もしこれが原因でChainerがインストールできない場合はこの記事を見てみてください。

「Chainer 1.5のインストールがうまくいかない人への非公式なTips」
http://qiita.com/unnonouno/items/c491b6df59352159cbf0


###Mock
ソフトウェアをテストする時に使うものだと思っておけば良い気がします。

「Moq探訪～その１～：Moqとは何か？Mockとは何か？そしてMockの生成 #adcjcs」
http://blogs.wankuma.com/masaru/archive/2010/12/03/195469.aspx


###Nose
Noseはテスト実行環境だと思ってます。

「Python nose でユニットテストを書いてみた」
http://blog.chocolapod.net/momokan/entry/8


#Chainerのインストール

最低要件はすでにインストール済みですので、早速
Chainerをインストールしてみましょう。

```:Chainerのインストール
$ pip install chainer
```

pipはpythonのパッケージ管理ツールです。pipはanacondaの中にすでに入っているため、新たにインストールする必要はありません。pipでChainerをインストールすることで、現在使用しているpythonのバージョンの環境にChianerをインストールすることができます。

インストールしたChainerは、User/your_name/.pyenv/versions/anaconda2-4.2.0/lib/python2.7/site-packages/chainer　にあります。




これでChainerをインストールすることができました。
次回は、機械学習をGUI（グラフィカルユーザーインターフェース）で行うことができるCSLAIERをインストールします。