Edited at

Windows版Anacondaを使わずにChainerをGPUで動かしてみた

More than 1 year has passed since last update.

今回は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が正しく通ってないか、コンパイラ自体に問題があるかもしれません。特にPathINCLUDEの値に関してはマシンによって変わる可能性がございますのでご確認を。


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

環境変数Pathの設定

28.3. venv — 仮想環境の作成

Windows10にCUDA8.0とPyCUDAをインストールしてテストが動くまで

Windows10にCUDA9.0とPyCUDAをインストールしてテストが動きcupyインストールに苦労してChainerのMNISTチュートリアルでGPU使用で速度が約6倍となるのを確かめるまで

WindowsにChainer v3+CUDA9+cuDNN7をインストールする