なんか作りたい

PCとかオーディオとか

機械学習の環境づくり

ゲーム用のWindowsPCにて機械学習環境を作った。
何かと厄介なWinでの環境づくりのメモがわり。

バージョン上がるのが早いので要注意。
極力バージョン管理に頼る方向で環境を作ったが、
バージョンの変わり目には様々なトラブルが発生している模様。

Python 3.6 + Anaaconda 5.1 + CUDA9.2 + cupy4.0.0 + Chainer4.0.0

参考: Chainer 4.0.0b1 on Windows10 with CUDA 9.0
Chainer4系がAnaconda3 4.2.0で動かない件 - TadaoYamaokaの日記




0. VisualStudioCommunity2017インストール済みの環境

Windowsプラットフォーム、.NET開発、
C++によるデスクトップ開発、Node.js開発、
Python開発がインストール済み。


1. VisualStudioで入れていたPython + Anaconda 環境のアンインストール

Startより、Visual Studio Installer を起動してPython開発関連をアンインストール
VisualStudioを入れるときに何も考えずに入れたPython環境。
アップデートが動かないなど挙動が怪しかったため使わないことに。
あとあと干渉すると厄介なのでアンインストールしておいた。


2. Anaconda公式から最新版をインストール

特に設定は変更していない。
なんとなくVisualStudioCodeは入れてみた。
インストール後、いきなりアップデートを求められた。
管理者として再起動してアップデートを実行。
時間はかかったがVisualStudio版とは異なりすんなりアップデートされた。


3. CUDA(当時最新版9.2)を公式からインストール

高速インストールで特に設定せずに入れた。
インストール後以下にパスを通す。
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\include
C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt


4. cuDNNのインストール

開発者登録して以下からダウンロード
Deep Learning Software | NVIDIA Developer
解凍して出てきたcudaフォルダの中身を以下にコピー (bin, include, lib) C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2


5. Visual Studio Build Tools 2017のインストール

以下よりBuild Tools for Visual Studio 2017 をダウンロード。
ダウンロード | IDE、Code、Team Foundation Server | Visual Studio
インストール時に「デスクトップ用 VC++ 2015.3 v14.00 (v140) ~」にチェックを入れる。
以下にパスを通す。
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin


6. OpenCVとgitをインストール

管理者権限でAnaconda Navigatorを起動。
Environmentよりメインカラム左上のタブからAllを選択、 opencvとgitを検索してチェックを入れて右下のApplyでインストール。


7. cupy, Chainerのインストール

管理者権限でAnaconda Promptを起動。

python -m pip install --upgrade pip
pip install ipykernel
pip install cupy
pip install chainer


8. 環境のテスト

cupyのテスト

git clone https://github.com/cupy/cupy
cd cupy/examples/kmeans
python ./kmeans.py
 CPU :  9.093696 sec
 GPU :  3.670315 sec

chainerのテスト

git clone https://github.com/chainer/chainer.git
cd chainer/examples/mnist
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.193982    0.0893844             0.940767       0.9721                    24.4747
2           0.0746034   0.0862068             0.977217       0.9725                    49.2936
3           0.0494557   0.0809484             0.9842         0.9763                    75.2933
4           0.0339408   0.0730812             0.988617       0.9782                    99.8586
5           0.0256214   0.0726146             0.991883       0.9813                    124.447
6           0.0255092   0.079795              0.991817       0.9779                    148.996
7           0.0204404   0.085347              0.9932         0.9789                    173.797
8           0.0181168   0.0764722             0.994467       0.9816                    198.803
9           0.0171069   0.0770177             0.9943         0.9811                    224.735
10          0.0154502   0.0688108             0.99475        0.9846                    251.291
11          0.0104188   0.118879              0.996483       0.9782                    276.891
12          0.0173342   0.0792324             0.994633       0.9827                    302.6
13          0.0116578   0.0936232             0.996383       0.9818                    329.337
14          0.00978785  0.0859786             0.996833       0.9831                    355.664
15          0.0126555   0.118123              0.996233       0.9789                    382.17
16          0.00866212  0.0974043             0.997417       0.9816                    408.791
17          0.00789148  0.125891              0.997633       0.9799                    435.819
18          0.0106524   0.0919405             0.9969         0.9844                    463.074
19          0.00540094  0.0872144             0.99835        0.9839                    490.656
20          0.0106859   0.10861               0.99705        0.9814                    518.612


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.191487    0.0896556             0.94185        0.9709                    7.6887
2           0.0748476   0.0773733             0.9767         0.975                     10.214
3           0.0480973   0.0864331             0.984182       0.9766                    12.5942
4           0.0388694   0.0908204             0.987465       0.9752                    15.0238
5           0.0276849   0.0774427             0.991031       0.9797                    17.4726
6           0.0237407   0.0742557             0.991998       0.979                     19.9178
7           0.0187738   0.0739122             0.993699       0.9813                    22.3483
8           0.0206869   0.0807906             0.993582       0.9807                    24.7799
9           0.0167306   0.0676826             0.995032       0.9834                    27.2327
10          0.0133015   0.0975527             0.996032       0.9795                    29.687
11          0.0168166   0.0950911             0.994632       0.9794                    32.0366
12          0.0129202   0.0894664             0.996032       0.9825                    34.5197
13          0.011695    0.0968374             0.996032       0.9802                    37.0026
14          0.0104622   0.114148              0.996782       0.9791                    39.4713
15          0.0138208   0.0907481             0.996199       0.9811                    42.0153
16          0.00958876  0.0776581             0.996966       0.9838                    44.471
17          0.0106891   0.117226              0.996999       0.9798                    46.988
18          0.0100928   0.115924              0.997215       0.9801                    49.4518
19          0.00761388  0.105171              0.997749       0.9821                    51.8007
20          0.00634029  0.107191              0.9983         0.9829                    54.2501

無事動作を確認できた。
CPUとGPUでは学習時間に10倍近い差があった。
期待できそうだ。