本書はいわゆる将棋AIをPythonで実現する手法の解説本でありながら、ディープラーニングが学べるというものである。
※この画像サイズ指定のマークダウン記法は以下参考
Qiita マークダウン記法 一覧表・チートシート
alignment効いてないけど、。。
Markdown and image alignment
しかし、なんといっても最初の一歩であるChainer環境構築が結構大変。ということで今日はここをまとめておこうと思う。
結局、ほぼほぼ以下の参考のとおりです。
【参考】
・WindowsでChainer(Cuda+Cupy)をインストールしようとしたらハマったのでメモ
###やったこと(やるべきこと)
(1)Pythonのインストール
(2)Visual Studio 2015 Community Editionをインストール
(3)Cudaのインストール
(4)cudnnのインストール
(5)rc.exeとrcdll.dllをコピー
(6)fastrlockのインストール
(7)Cupyのインストール
(8)Chainerのインストールと確認
###(1)Pythonのインストール
本書では、python3.5系をAnaconda3-4.2.0系でインストールするのを推奨しているのでその通りやってみる。
https://repo.continuum.io/archive/
から
Anaconda3-4.2.0-Windows-x86_64.exe 391.4M20 16-09-27 15:57:21
をダウンロードしてインストールしました。
※この本が出たのは昨年なので参考によればchainerがpython3.6系対応してるんですね
https://www.anaconda.com/download/
###(2)Visual Studio 2015 Community Editionをインストール
ここがたぶん最大の難関です。
つまり正規サイトはVSの過去版が昨夜は404が出て削除されていましたが、今日は掲載されています。
https://visualstudio.microsoft.com/ja/vs/older-downloads/
ということで参考が示している以下サイトから入手しました。
https://download.cnet.com/Visual-Studio-Community-2015/3000-2212_4-76440611.html
インストールは本書のとおりの設定つまり
カスタムーVisual C++とPython Tools for Visual Studioをチェック
でインストールします。
※結構時間かかります
###(3)Cudaのインストール
ここは本書の通りでうまくいけると思います。
つまり、
CUDA Toolkit Archive
から
CUDA Toolkit 9.0 (Sept 2017)
をクリックして条件入力してexe(local)をダウンロードしてインストールします。
※上記参考では、Chainer3.6系に対してCUDA Toolkit 9.1 (Dec 2017)を使っています
###(4)cudnnのインストール
cudnnのインストールではNvidiaでユーザ登録する必要があります。
https://developer.nvidia.com/cudnn
リンクをたどっていき
Download cuDNN v7.2.1 (August 7, 2018), for CUDA 9.0
を選び、
cuDNN v7.2.1 Library for Windows 10
をダウンロードして解凍します。
そして解凍先からbin, include, libを先ほどインストールしたcudaに上書きします。
※上書きというのではまりました
これ単に
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0
にドラッグ&ドロップします。怒られても続行します。
###(5)rc.exeとrcdll.dllをコピー
C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64
からrc.exeとrcdll.dllをコピー。
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64
へペースト。
※windows10のversionは異なるようです
###(6)fastrlockのインストール
これ本書には記載ないですが、参考のとおりやらないと先に進めませんでした。
https://pypi.org/project/fastrlock/#files
から
fastrlock-0.3.tar.gz (42.7 kB)
をダウンロードして
python setup.py install
を実行でfastrlockをインストールします。
###(7)Cupyのインストール
Chainerでcudaやcudnnを利用するには、このCupyをインストールできるかが鍵である。
まずはpipを最新版にします。
python -m pip install -U pip
ここまでくれば、単に
pip install cupy
でインストールできると思います。
ちなみに以下の種々のインストールは参考になると思います。
Installation Guide@Cupy
###(8)Chainerのインストールと確認
普通に
pip install chainer
でインストールできると思います。
ここで、インストール確認
>python
Python 3.5.2 |Anaconda 4.2.0 (64-bit)| (default, Jul 5 2016, 11:41:13) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import cupy
>>> import chainer
>>>
最後に、以下cupyとchainerを一度uninstallしてから再度以下のとおり綺麗にインストールしなおします。
pip install cupy --no-cache-dir -vvvv
pip install chainer --no-cache-dir -vvvv
###まとめ
・Chainer事始めでインストールしてGPUを利用できるようになった
・基本的な構築の流れは今回のやり方でいけると思う
・各種フレームワークの更新が早いので半年前の話がもう古くなっていると感じた
・今後Versionを上げる必要があるかもしれない
###おまけ
以下、CPUとGPUでMNISTの例を実行したものを並べてみると、経過時間から実行速度はだいたい一桁違う。
python train_mnist.py -g 0
GPU: 0
# unit: 1000
# Minibatch-size: 100
# epoch: 20
epoch main/loss validation/main/loss main/accuracy validation/main/accuracy elapsed_time
1 0.192806 0.0850449 0.94215 0.9718 9.75484
2 0.0733078 0.0746161 0.977033 0.978 12.9071
3 0.048877 0.0774014 0.983866 0.9775 15.6654
4 0.0326726 0.068165 0.989549 0.9802 18.4044
5 0.0313268 0.0606614 0.989765 0.9833 21.0591
6 0.0246596 0.0687122 0.992049 0.9831 23.7006
7 0.0185879 0.086345 0.993998 0.9791 26.3792
8 0.0177547 0.0804703 0.994165 0.9812 29.0443
9 0.0156006 0.0737531 0.995282 0.9821 31.7208
10 0.0153562 0.099546 0.995032 0.9779 34.442
11 0.00978246 0.106456 0.996966 0.9783 37.1574
12 0.0156983 0.091956 0.995099 0.9816 39.8492
13 0.013879 0.0950948 0.995949 0.9822 42.5079
14 0.0117834 0.101035 0.996732 0.9799 45.2011
15 0.0136471 0.0887717 0.995532 0.9827 47.8526
16 0.00867114 0.100181 0.997465 0.9809 50.5429
17 0.00791029 0.0882384 0.997866 0.9836 53.2253
18 0.0115128 0.126878 0.996415 0.9794 55.9443
19 0.0107526 0.0885034 0.996966 0.9846 58.5775
20 0.00521568 0.102447 0.998316 0.983 61.2171
>python train_mnist.py
GPU: -1
# unit: 1000
# Minibatch-size: 100
# epoch: 20
epoch main/loss validation/main/loss main/accuracy validation/main/accuracy elapsed_time
1 0.189209 0.0875581 0.9427 0.9735 25.3126
2 0.073236 0.0692626 0.9773 0.978 52.0837
3 0.0481918 0.106838 0.984567 0.9681 79.3083
4 0.0348265 0.0659303 0.988783 0.98 106.283
5 0.028921 0.0650097 0.990017 0.9824 133.321
6 0.0229345 0.0768484 0.992683 0.9783 160.562
7 0.0189791 0.0841197 0.99375 0.9797 188.195
8 0.0180559 0.077855 0.993883 0.9807 215.909
9 0.0180099 0.0911617 0.994283 0.9762 243.806
10 0.012737 0.0954341 0.995883 0.9782 272.119
11 0.0187078 0.0765396 0.994367 0.9836 300.487
12 0.00986514 0.098215 0.9971 0.9786 329.268
13 0.00901476 0.0943318 0.997333 0.9815 358.506
14 0.0150975 0.115421 0.99525 0.9768 387.79
15 0.0107619 0.089286 0.996567 0.9814 417.653
16 0.00918265 0.101557 0.997117 0.9823 447.854
17 0.0102194 0.0930422 0.9968 0.9817 478.13
18 0.00661841 0.0889919 0.998283 0.9833 508.768
19 0.0125522 0.110633 0.9965 0.9809 539.433
20 0.0117108 0.10781 0.99675 0.9817 570.328