機械学習の環境づくり
ゲーム用の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倍近い差があった。
期待できそうだ。