chainer でGPUを利用するメモ(Windows 10)

Chainerによる畳み込みニューラルネットワークの実装 - 人工知能に関する断創録
この記事に載っているコードを試してみる。
Windows 10で試した結果。

chainerは、Pycharmからpipでインストールできた。

pycudaインストール(その1)

pycudaは、Pycharmのpipでやっても、コマンドラインからやってもインストールに失敗した。

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -DBOOST_PYTHON_SOURCE=1 -DHAVE_CURAND=1 -DPYGPU_PACKAGE=pycuda -DBOOST_THREAD_DONT_USE_CHRONO=1 -DPYGPU_PYCUDA=1 -DBOOST_MULTI_INDEX_DISABLE_SERIALIZATION=1 -DBOOST_THREAD_BUILD_DLL=1 -Dboost=pycudaboost -DBOOST_ALL_NO_LIB=1 -Isrc/cpp -Ibpl-subset/bpl_subset -IC:\Python27\lib\site-packages\numpy\core\include -IC:\Python27\include -IC:\Python27\PC /Tpsrc/cpp/cuda.cpp /Fobuild\temp.win32-2.7\Release\src/cpp/cuda.obj

cuda.cpp

c:\users\aaaaaa\appdata\local\temp\pycharm-packaging1634411973545365466.tmp\pycuda\src\cpp\cuda.hpp(14) : fatal error C1083: include ファイルを開けません。'cuda.h':No such file or directory

error: command '"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\cl.exe"' failed with exit status 2

cuda.hがないというエラー。これはCUDA Toolkitを入れていないからっぽいので、インストールする。

CUDA Toolkit

NVIDIAのウェブサイトから、CUDA Toolkitをダウンロードしてインストール。
CUDA 7.5 Downloads | NVIDIA Developer

cuda_7.5.18_win10_network.exe
をダウンロードしてインストールした。

cl.exe

https://msdn.microsoft.com/ja-jp/library/et4zwx34.aspx

コンパイラは、ビルド環境、/I コンパイラ オプション、/X コンパイラ オプション、および INCLUDE 環境変数で定義された検索パスに従います。

環境変数
変数名: INCLUDE
値: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include
を足した。

pycudaインストール(その2)

Windows7 64bitにPyCUDAとTheanoをインストールしてGPU計算する - Qiita
http://www.lfd.uci.edu/~gohlke/pythonlibs/#pycuda

ネット記事の情報をもとに、.whlという拡張子のファイルをpipを使ってインストールしてみる。

pip install "C:\Users\aaaaaa\Downloads\pycuda-2015.1.3+cuda7518-cp35-none-win_amd64.whl"

pycuda-2015.1.3%2Bcuda7518-cp27-none-win_amd64.whl is not a supported wheel on this platform.

失敗。
pycuda‑2015.1.3+cuda7518 のファイルがたくさんあるけど、他も何回か失敗。
ファイル名の cp35
pythonのバージョンっぽい。35はPython 3.5

pip install "C:\Users\aaaaaa\Downloads\pycuda-2015.1.3+cuda7518-cp27-none-win32.whl" で成功、したけど、これではダメっぽい。
chainerのコードを実行するとエラーになった(はず)。

ファイル名のcp27がPythonのバージョン(2.7)、
win32amd64は、Pythonのexeが32bitか64bitかでうまくいくか決まるっぽい。

元からPCに入っていたPythonは、32bit版のPython 2.7だった。
64bit版のPython 2.7系を入れなおした。
python 64bit版のインストール - kubotti’s memo

chainerのコードを実行

aidiaryのchainerを使ったpythonコードを実行したらエラー。

RuntimeError: CUDA environment is not correctly set up.
library not found. ['cublas64_75.dll', 'cublas64_70.dll', 'cublas64_65.dll']

このエラーがいつ出たのか忘れてしまった。。
たぶん、32bit版Python2.7の状態で実行した時だった。

numpy と scipyのインストール

http://www.lfd.uci.edu/~gohlke/pythonlibs/
から .whl をpip install

aidiary のコードを実行したら、↓のエラー。

ImportError: No module named pylab

pylabが何なのか分かってないけど、、使っている箇所がコメントアウトされていて、
実際には使っていなかったので、
import pylab をコメントアウトした。 エラー解消。

nvcc

aidiary のコードを実行したら、エラー。

Traceback (most recent call last):
  File "C:/Users/aaaaaa/PycharmProjects/gihyo_ml/aidiary_chainer1.py", line 86, in <module>
    optimizer.zero_grads()
  File "C:\Python2710\lib\site-packages\chainer\optimizer.py", line 131, in zero_grads
    g.fill(0)

略

  File "C:\Python2710\lib\subprocess.py", line 573, in check_output
    raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command '['nvcc', '--preprocess', '-Xcompiler', '/wd 4819', '-m64', 'c:\\users\\aaaaaa\\appdata\\local\\temp\\tmprimmvl\\kern.cu']' returned non-zero exit status 1

Pycharmのデバッグモードで動かしたら、output変数か何かに以下のメッセージが入っていた。

'nvcc fatal   : Cannot find compiler \\'cl.exe\\' in PATH

環境変数のPATHに
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin; を足したら、
ついに動いた!

出力結果

最後の数字
1298.96243597
は、経過秒数だと思う。
GPUを使わない設定にしたiMacでは、7000秒以上かかっていた。(たぶん2時間以上)
それが22分くらいで完了した。

load MNIST dataset
epoch: 1
kern.cu
train mean loss: 0.168675
test accuracy: 0.984143
epoch: 2
train mean loss: 0.050884
test accuracy: 0.987143
epoch: 3
train mean loss: 0.035005
test accuracy: 0.990429
epoch: 4
train mean loss: 0.027337
test accuracy: 0.990429
epoch: 5
train mean loss: 0.022279
test accuracy: 0.990429
epoch: 6
train mean loss: 0.019686
test accuracy: 0.990571
epoch: 7
train mean loss: 0.015886
test accuracy: 0.991857
epoch: 8
train mean loss: 0.013832
test accuracy: 0.990857
epoch: 9
train mean loss: 0.011948
test accuracy: 0.990857
epoch: 10
train mean loss: 0.010653
test accuracy: 0.991143
epoch: 11
train mean loss: 0.009253
test accuracy: 0.991571
epoch: 12
train mean loss: 0.009377
test accuracy: 0.991714
epoch: 13
train mean loss: 0.008813
test accuracy: 0.992000
epoch: 14
train mean loss: 0.006887
test accuracy: 0.991000
epoch: 15
train mean loss: 0.008877
test accuracy: 0.992143
epoch: 16
train mean loss: 0.006171
test accuracy: 0.991571
epoch: 17
train mean loss: 0.005138
test accuracy: 0.991143
epoch: 18
train mean loss: 0.005211
test accuracy: 0.992429
epoch: 19
train mean loss: 0.007215
test accuracy: 0.992000
epoch: 20
train mean loss: 0.006014
test accuracy: 0.992429
1298.96243597