Windows上にChainer v1.5+CUDA+cuDNNを一番簡単に入れれる方法

Chainerは、1.5からCython、h5pyへ依存するようになりました。Windowsへのインストール方法は[2日目の記事(Chainer1.5.0をWindowsにインストールする)](http://qiita.com/icoxfog417/items/ca1521f9d62183cea234)で書かれているのですが、皆様がもっと簡単にWindows上でまともにChainerを使えるようにいくつか補足を加えたいと思います。

*この内容には間違いが含まれている可能性があります。気付き次第更新します。動作報告歓迎です。コメントによろしくお願いします*

**注意：2015/12/10日現在、Chainer(v1.5.1)は公式にはWindowsをサポートしていません。** git cloneしてnosetestを実行すると、いろいろな機能が実は動いていないという現実を知ることができるかと思います・・・。


# 全体の流れ
- Windowsの準備
 - 64bit Windows環境と新しめのNVIDIAのGPUを用意する（オプション：CUDAを使いたい場合）
- Pythonの準備
 - [Anaconda](https://www.continuum.io/downloads)をインストール
- コンパイラの準備
 - [Microsoft Visual C++ Compiler for Python 2.7](http://www.microsoft.com/en-us/download/details.aspx?id=44266)をインストール（Python2を使いたい場合）
 - [Visual Studio Community 2013](https://www.visualstudio.com/ja-jp/downloads/download-visual-studio-vs#DownloadFamilies_2)をインストール（CUDA、Python3.4を使いたい場合）
 - [Visual Studio Community 2015](https://www.visualstudio.com/ja-jp/downloads/download-visual-studio-vs#DownloadFamilies_2)をインストール（Python3.5を使いたい場合）
- CUDAの準備（オプション）
 - [CUDA Toolkit](https://developer.nvidia.com/cuda-toolkit)をインストールする（本記事では7.5が入っているものとする）
 - [cuDNN](https://developer.nvidia.com/cudnn)をインストールする（オプション）
- Chainerの準備
 - `pip install chainer`する
- 確認方法
 - `python -c "import chainer"` Chainerのテスト
 - `python -c "import cupy"` CUDAのテスト（オプション）
 - `python -c "import cupy.cudnn"` cuDNNのテスト（オプション）

# どんなPython環境を選べばいいか？
まず、CUDAは7.0から64bitのみのサポートとなっています。Chainer+CUDA環境としたい場合は、**Pythonは64bit版**を使ってください。CPUのみの場合はどちらでもいいです。Chainer1.5から依存パッケージとなったh5pyは64bit Python上でのインストールが少々面倒です。その他いろいろな事情を考慮すると、**[Anaconda](https://www.continuum.io/downloads)のPython2.7の64bit版を使うのがベスト**となります。Python2.7、3.4はどちらも使えるので好みで選んで頂ければと思います(3.5は筆者は未確認）。

標準のPythonを使いたい場合は[こちら](http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy)で配布されているパッケージを使うなどの方法があるようです。特に、**64bitかつ非Anaconda環境の場合はChainerインストール前にh5pyを必ずインストール**をしておいてください。

cygwin上でのChainer動作は現在のところ確認できていないです・・・・。

# コンパイラの準備
コンパイラの準備で楽をしたい人はPython2系を使うとちょっと幸せになれます・・・。

## Python2.7を使いたい場合
Python2.7の場合は[Microsoft Visual C++ Compiler for Python 2.7](http://www.microsoft.com/en-us/download/details.aspx?id=44266)をインストールしてください。Pythonはレジストリからこのコンパイラを見つけるので、環境変数等の設定は不要です

## Python3.4を使いたい場合
[Python3系はバージョンによって必要なVisual Studioのバージョンが異なります](http://qiita.com/methane/items/2210712763b91e75fdf0)。ですが、新しいVisual Studioがインストールされていれば、環境変数の設定でこの仕様を回避できます。ここでは、CUDAインストール時の手間を考えて同じものを用意します。両方で利用可能なコンパイラは[Visual Studio Community 2013](https://www.visualstudio.com/ja-jp/downloads/download-visual-studio-vs#DownloadFamilies_2)です。Microsoftのサイトは時々アドレスが変わるので、リンクが切れている場合は探してください（もしくは適切なコンパイラを用意してください）。

VS2013 Communityを入れた場合は環境変数の設定が必要です。`pip install`の前に`set VS100COMNTOOLS=%VS120COMNTOOLS%`を毎回実行するか、環境変数を設定してください。


## Python3.5を使いたい場合（未確認手順）
[Visual Studio Community 2015](https://www.visualstudio.com/ja-jp/downloads/download-visual-studio-vs#DownloadFamilies_2)がです。インストールするだけで使えるようになります。


## CUDAを使いたい場合（オプション）
Visual Studioのコンパイラが必要です。新しすぎるとCUDAのコンパイラnvccがちゃんと動いてれないのでマニュアルを見て適切なバージョンを使ってください。この記事ではCUDA7.5を使っているものとして話を進めます。

Python3.4と同じく[Visual Studio Community 2013](https://www.visualstudio.com/ja-jp/downloads/download-visual-studio-vs#DownloadFamilies_2)をインストールしてください。
環境変数PATHに`C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin`を追加してください。

# CUDAのインストール（オプション）
Chainerを使うからにはCUDAを使わないともったいないです。NVIDIAのサイトから[CUDA Toolkit](https://developer.nvidia.com/cuda-toolkit)をダウンロードしてインストールしてください。
## cuDNN（オプション）
cuDNNはNNに必要な計算を高速かつ省メモリでこなしてくれるライブラリです。ぜひインストールしましょう。[cuDNN](https://developer.nvidia.com/cudnn)でユーザー登録を行って数日するとダウンロードできるようになります。今すぐChainerを使いたい人はこの手順を飛ばしてください。**cuDNNをインストール後にはChainerの再インストールが必要**となります、注意してください（`pip unisntall chainer`後に`pip install chainer`）。

cuDNNを無事ダウンロードできた人は、展開したファイルを`C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5`に上書きしてください。cuDNNv3の場合、`cudnn64_70.dll`が`CUDA\v7.5\bin`フォルダに、`cudnn.h`が`CUDA\v7.5\include`フォルダに`cudnn.lib`が`CUDA\v7.5\lib\x64`に入っていれば大丈夫です。

## CUDAの確認
コマンドラインを立ち上げて、`nvcc`コマンドが使えるか確認してください。

# Chainerのインストール
では、Chainerをインストールしましょう。
`pip install chainer`
インストールできない場合や、各種モジュールが正しくインストールできなかった場合は下のコマンドを利用してください。
`pip install -U chainer -vvvv`

また、cython、pip、setuptoolsが古い場合は無限ループが発生するなどの現象が確認されています。それらのライブラリを最新のバージョンにして試してみてください。

# 確認方法
以下のコマンドを実行してエラーが発生せずにimportができるかを確認してください。
 - `python -c "import chainer"` Chainerのテスト
 - `python -c "import cupy"` CUDAのテスト（オプション）
 - `python -c "import cupy.cudnn"` cuDNNのテスト（オプション）

cupyのインポートに失敗する場合は、以下のテストをもう一度してみてください。
 - `nvcc` nvccが実行できるかのテスト

インストールが正しく出来ているかを確認したい場合は、`pip uninstall chainer` をchainerが無くなるまで複数回実行後、
`pip install --no-cache -vvvv chainer` でキャッシュの無効化とデバッグ表示を有効にしてインストールを行ってください。
インストールに問題がある場合は、エラーログが表示されるはずです。

# その他注意事項
**`chainer-cuda-deps`は現在不要です。インストールしないでください。**

# 参考文献
- [chainerで自然言語処理できるかマン windowsで開発環境を整える](http://chainernlpman.hatenablog.com/entry/2015/11/28/023126)
- [Chainer 1.5のインストールがうまくいかない人への非公式なTips](http://qiita.com/unnonouno/items/c491b6df59352159cbf0)
- [Chainer1.5.0をWindowsにインストールする](http://qiita.com/icoxfog417/items/ca1521f9d62183cea234)