北海道に住みたいと言っているだけのブログ

Surface Book で Chainer + GPU が動かんなあ

Surface Bookディープラーニング環境を構築しようと数ヶ月前からエッサホイサヨイヤッサしてた。

Chainer を入れて、サンプルを学習させるところまでは行けたんだけど、せっかくの GPU をふんだんに使った学習が未だにうまくいかず。

CuPy is not correctly installed. が出ちゃうんだよなあ。

環境

mnist の学習

(C:\Program Files\Anaconda3) C:\Windows\Temp\chainer-master\examples\mnist>python ./train_mnist.py --gpu 0
GPU: 0
# unit: 1000
# Minibatch-size: 100
# epoch: 20

Traceback (most recent call last):
  File "./train_mnist.py", line 107, in <module>
    main()
  File "./train_mnist.py", line 56, in main
    chainer.cuda.get_device(args.gpu).use()  # Make a specified GPU current
  File "C:\Program Files\Anaconda3\lib\site-packages\chainer\cuda.py", line 167, in get_device
    check_cuda_available()
  File "C:\Program Files\Anaconda3\lib\site-packages\chainer\cuda.py", line 85, in check_cuda_available
    raise RuntimeError(msg)
RuntimeError: CUDA environment is not correctly set up
(see https://github.com/pfnet/chainer#installation).CuPy is not correctly installed. Please check your environment, uninstall Chainer and reinstall it with `pip install chainer --no-cache-dir -vvvv`.

考えられること

  • pip uninstall chainer -> pip install chainer --no-cache -vvvv をしたけど、だめ。
  • nvcc へのパスは通ってる。
  • やっぱり import cupy でしくじっているなあ。CuPy が入っていないのは確実っぽい。本来であれば Chainer と一緒にインストールされるはずなのだが。
(C:\Program Files\Anaconda3) C:\Windows\Temp\chainer-master\examples\mnist>python -c "import cupy"
Traceback (most recent call last):
  File "C:\Program Files\Anaconda3\lib\site-packages\cupy\__init__.py", line 8, in <module>
    from cupy import core
  File "C:\Program Files\Anaconda3\lib\site-packages\cupy\core\__init__.py", line 1, in <module>
    from cupy.core import core
ImportError: cannot import name 'core'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Program Files\Anaconda3\lib\site-packages\cupy\__init__.py", line 16, in <module>
    raise six.reraise(RuntimeError, RuntimeError(msg), sys.exc_info()[2])
  File "C:\Program Files\Anaconda3\lib\site-packages\six.py", line 685, in reraise
    raise value.with_traceback(tb)
  File "C:\Program Files\Anaconda3\lib\site-packages\cupy\__init__.py", line 8, in <module>
    from cupy import core
  File "C:\Program Files\Anaconda3\lib\site-packages\cupy\core\__init__.py", line 1, in <module>
    from cupy.core import core
RuntimeError: CuPy is not correctly installed. Please check your environment, uninstall Chainer and reinstall it with `pip install chainer --no-cache-dir -vvvv`.

どれだけググっても、「pip uninstall chainer -> pip install chainer しろ」 という記述ばかり。

突破口が見えず、これで長い間やる気が削がれていた。

CuPy を強制的にインストール

ある日ふと思いついて、無理やり CuPy を入れてみた。

(C:\Program Files\Anaconda3) C:\Windows\Temp\chainer-master\examples\mnist>pip install cupy
Collecting cupy
  Using cached cupy-1.0.0.tar.gz
    Complete output from command python setup.py egg_info:
    running egg_info
    creating pip-egg-info\cupy.egg-info
    writing dependency_links to pip-egg-info\cupy.egg-info\dependency_links.txt
    writing top-level names to pip-egg-info\cupy.egg-info\top_level.txt
    writing pip-egg-info\cupy.egg-info\PKG-INFO
    writing requirements to pip-egg-info\cupy.egg-info\requires.txt
    writing manifest file 'pip-egg-info\cupy.egg-info\SOURCES.txt'
    warning: manifest_maker: standard file '-c' not found

    error: Unable to find vcvarsall.bat
    Executing cythonize
    Options: {'profile': False, 'linetrace': False, 'annotate': False, 'no_cuda': False}
    Include directories: ['C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v7.5\\include']
    Library directories: ['C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v7.5\\bin', 'C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v7.5\\lib\\x64']

error: Unable to find vcvarsall.bat !!! なんかこれ見たことあるぞ。調べてみると、Visual C++ のバージョンに起因するエラーとのこと。

landinghub.visualstudio.com

早速 VC++ 2015 のビルドツールをダウンロードして、インストール。

カスタムインストールにして、インストールするSDKの選択。デフォルトではWin8 SDKにチェックが入っていたけど、念のためWin10のSDKもチェック。

インストール後再起動し、pip install cupy したところ、無事インストールに成功! GPU による学習もうまくいった。

振り返り

  • まずいちばん最初のエラーメッセージ CuPy is not correctly installed. が出る原因だけど、pip install chainer が実は失敗していたと推測。インストールするとぶわーっとメッセージが出るからおそらく失敗した旨を見落としてしまっていたのだろう。
  • ではなぜ Chainer のインストールに失敗したのか。多分、Visual Studio Community 2015 をインストールする際に必要なビルドツールを選択し忘れたのだと思う。
    • C++ Build Tools を入れたら CuPy のビルドに成功したので。

おまけ: CPU と GPU でどれだけ学習速度に差が出たか?

mnist 学習中の画面から適当に引っ張ってきた数字。

  • CPU: 22.03 iters/sec.
  • GPU: 76.31 iters/sec.

速度向上分はまさかのたった3~4倍程度ww

巷では20倍とか、30倍とか言われているから期待しちゃったのに。

Surface BookGPUの遅さは噂に聞いていたが、これほどまでとは。

おまけその2: おすすめのディープラーニング

Chainerによる実践深層学習

今月出たばっかりのこの本、実にわかりやすい。ページ数も多くないので、頑張れる。何より、読んでいて楽しい。そんなに数式が出てこないからかなぁ(あー理系なのに)

薄いとはいえ、深層学習の基礎がしっかりと凝縮されている。

受験時代の名著「物理のエッセンス」を彷彿とさせる完成度(伝わらない