今回はchainerをGPUで動かせるようにセットアップをしてみました。調べてみると情報量はありますが、windowsの場合はChainerをAnacondaで環境構築している事が多いようです。普通のpythonから環境構築しようとすると自分で環境変数を追加することが多くなったりして、手間がかかるからだと思います。ただ、僕の場合はすでにpythonの環境構築をしていて、またAnacondaで新たに環境を構築するのはそれはそれで手間がかかるので、すでにWindowsにPythonの環境を構築した人向けに記録を書こうと思います。
※2018年3月2日:追記箇所がいくつかあるので、ご注意ください。
##環境
使用マシンはSurface Bookで、以下はそのスペックです。
OS: Windows 10 Pro 64ビット
CPU: Intel Core i7-6600U
メモリ: 8GB
GPU: NVIDIA GeForce GTX 965M
##事前準備
- python3.6をインストール
- 以下の変数をシステム環境変数の
Path
に追加(Cドライブ直下にPython36フォルダがある場合)
C:\Python36
C:\Python36\Scripts\
- pipコマンドを使えるようにする(Python3.6をインストールした場合はすでに入ってるので大丈夫です)
- エディタはコマンドプロンプトでもPowerShellでもいいです
##構築手順
###仮想環境を作成
普通のPythonからこの先のセットアップをすると、バージョンアップをした時に環境構築の変更が面倒なので、任意の場所に仮想環境を作成しましょう
> python -m venv /path/to/ml_venv
すでにnumpyやmatplotlibなどを仮想環境ではない環境でインストールしている場合はこのコマンドの続きに--system-site-package
を追加すると仮想環境でもそのまま使えます。完成したら、以下のコマンドで実行します
> ml_venv\Scripts\activate
###Microsoft Build Tools 2015 をダウンロード
CupyやCUDAをセットアップするときにC++のコンパイラが必要になるため、以前のVisual Studioソフトウェアのダウンロードから、Visual Studio Community 2015をインストールします。インストールが終わったら以下をシステム環境変数Path
に追加します。
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin
###環境変数を設定
環境変数INCLUDE
として以下を追加します(やり方は先程PythonのPathを設定するときとほぼ同じやり方ですが、変数名にINCLUDE
がない場合は新規ボタンから新たに追加します)
C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt
##CUDA Toolkit
CUDA Toolkit Downloadからマシンのスペックに合わせて選択します。Install Typeに関してはexe(local)はダウンロードに時間がかかるのでnetworkを選択した方がいいです。
##GPUドライバ
ドライバダウンロードからマシンのスペックに合わせてダウンロードします。
##cuDNNをインストール
NVIDIA cuDNNにアクセスし、インストールしたCUDAのバージョン、OSに合わせてダウンロードします。ダウンロードしたら展開し、ファイルをCUDAの該当パスにコピーするか、展開したフォルダのパスを通します。
###再起動
ここまでできたら念のため再起動をします。
##pipで必要なライブラリをインストール
###pycuda(なくても良さそうです)
もしnumpyをインストールしてない場合はここでインストールします
> pip install numpy
インストールできたら、pycudaをインストールします
> pip install pycuda
###cupy
> pip install cupy
※2018年3月2日追記
キャッシュを無効にして再インストールしました。
> pip install cupy --no-cache-dir -vvvv
もし、このときにエラーメッセージでUnicodeDecodeError: 'utf-8' codec can't decode byte 0x83
のようなエラーが出たら、 Win + Python3.6で「pip install」を実行したときに「UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83」と表示される。を参考にして_init_.pyを修正してみましょう。それ以外のエラーが出る場合はコンパイラのPathが正しく通ってないか、コンパイラ自体に問題があるかもしれません。特にPath
やINCLUDE
の値に関してはマシンによって変わる可能性がございますのでご確認を。
###chainer
> pip install chainer
※2018年3月2日追記
こちらもキャッシュを無効にして再インストールしました。
> pip install chainer --no-cache-dir -vvvv
終わったら、正しくインストールできてるか確認するために、以下のコマンドを入力します。
> python -c "import chainer; print(chainer.cuda.available)"
これでもしTrue
が返ってきたら、ChainerはGPU
をつなげています。
##動作チェック
ここまでできたら、実際にプログラムを動かしてみます。今回はchainerのMNISTサンプルで動作チェックを行います。 https://github.com/chainer/chainer/archive/v3.2.0.tar.gz からダウンロードし適当な場所で解凍します(tarファイルなので解凍ソフトが必要です)
終わったら、サンプルを実行します。まずはGPUを使わずに(CPUのみで)実行してみます
> python chainer-3.2.0/examples/mnist/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.190951 0.0908168 0.94225 0.9718 41.0858
2 0.0741212 0.0857352 0.976767 0.9738 88.1086
3 0.0494363 0.0736024 0.984283 0.9775 132.785
4 0.0349904 0.076048 0.9891 0.9787 176.63
5 0.0298322 0.0777685 0.990417 0.9789 224.378
6 0.024639 0.0727158 0.99205 0.9801 267.11
7 0.0199962 0.0723381 0.993633 0.9812 308.429
8 0.014239 0.0818458 0.995267 0.9815 353.45
9 0.0195226 0.0805969 0.993233 0.9794 400.009
10 0.012115 0.0975619 0.996133 0.9793 442.733
11 0.0171161 0.0974695 0.9945 0.9794 485.669
12 0.0133646 0.088806 0.9959 0.98 529.05
13 0.00832344 0.101258 0.997633 0.9789 574.713
14 0.0144544 0.107601 0.995717 0.9792 619.056
15 0.014508 0.0879238 0.9957 0.9831 664.027
16 0.00860224 0.0829529 0.997617 0.9836 709.962
17 0.00989336 0.0946949 0.996967 0.9824 756.367
18 0.00828606 0.0899459 0.997433 0.983 803.215
19 0.00645237 0.112903 0.99785 0.9831 850.539
20 0.0123574 0.116718 0.99655 0.982 902.438
今度は同じプログラムをGPUを使って実行します。先程のコマンドに-g 0
をつけるとGPUが使えます
> python chainer-3.2.0/examples/mnist/train_mnist.py -g 0
結果はこちら
GPU: 0
# unit: 1000
# Minibatch-size: 100
# epoch: 20
C:\Users\***\Documents\ml_venv\lib\site-packages\chainer\cuda.py:85: UserWarning: cuDNN is not enabled.
Please reinstall CuPy after you install cudnn
(see https://docs-cupy.chainer.org/en/stable/install.html#install-cupy-with-cudnn-and-nccl).
'cuDNN is not enabled.\n'
epoch main/loss validation/main/loss main/accuracy validation/main/accuracy elapsed_time
1 0.190668 0.0854138 0.943184 0.9724 5.65133
2 0.0761028 0.0777232 0.976632 0.9763 11.2321
3 0.0496006 0.073066 0.984615 0.9772 16.8865
4 0.0362269 0.0802193 0.988349 0.9784 22.4185
5 0.0299697 0.0765652 0.990099 0.9802 27.9922
6 0.0246631 0.070867 0.991932 0.9824 33.5942
7 0.0206386 0.076023 0.993365 0.9823 38.9228
8 0.0164893 0.0791374 0.994816 0.9809 44.2431
9 0.015917 0.0781484 0.994815 0.982 49.467
10 0.0172795 0.0973235 0.994432 0.9811 54.7838
11 0.0126648 0.0965343 0.996115 0.9786 60.0568
12 0.0118577 0.105981 0.996283 0.9784 65.4209
13 0.0134358 0.0903537 0.995999 0.9822 70.6901
14 0.0139644 0.100845 0.995665 0.9795 75.9644
15 0.00960354 0.121914 0.996966 0.9787 81.3283
16 0.012138 0.114238 0.996432 0.9789 86.6215
17 0.0082195 0.0909245 0.997683 0.984 91.9384
18 0.00706095 0.106649 0.998166 0.9824 97.3137
19 0.0121552 0.118355 0.996316 0.9791 102.588
20 0.00839044 0.108653 0.997416 0.9838 107.956
※実行したときにエラーが出ていますが、結果は問題なく出力されているので修正はまた今度します。
※再インストールを行い、エラーは修正されました。(追記箇所参照)
それぞれの右端にある数字がトータルの時間ですが、GPUを使用したことで速さが8倍近くになりました。
##おまけ
TensorflowをGPU付きで実行できるように設定しようと思いましたが、
Download and install CUDA 8.0 from this URL:https://developer.nvidia.com/cuda-toolkit
といったエラーが出たため、TensorflowはCUDAのバージョンが8.0じゃないと動作しないようです。もしTensorflowもGPUで試したい場合は8.0で改めて環境構築するといいようです。
##参照
Download Python
Windows10にCUDA8.0とPyCUDAをインストールしてテストが動くまで
Windows10にCUDA9.0とPyCUDAをインストールしてテストが動きcupyインストールに苦労してChainerのMNISTチュートリアルでGPU使用で速度が約6倍となるのを確かめるまで