Chainer
ChainerDay 3

ChainerをMac OSXでビルドする

More than 3 years have passed since last update.

Macでビルドできないよ、という報告を受けたのでMacでビルドできないか探っていたのですが、実はマシンにnVidia GPUがなくてもビルドはできることがわかったので、そのときやったことを報告をします。この記事は必ずしも、Macで 動作することを保証しません 。残念ながら、nVidia GPUの乗ったMacを持っていません・・・。


CUDAのインストール

公式サイトに行って、Mac用のCUDA 7.5をダウンロードします。インストーラーを起動すると、nVidiaのドライバとCUDAのインストールが促されますが、両方共インストールできます。とりあえず入れてみます。実はこれで入ります。

注目すべきは、ディレクトリ構成です。別件で書きましたが、以下のようになっています。注目すべきは、libcuda.dylib/usr/local/cuda/libにしか入っていないことです。他のファイルは、/Developerディレクトリ以下へのシンボリックリンクになっているようです。そのため、Chainerでは、このディレクトリを強制的にライブラリのパスに追加するようにしました。EI Capitanだとどうなるんでしょうね・・・。怖くて試していません。

+ usr

| + local
| + cuda
| + bin --> /Developer/NVIDIA/CUDA-7.5/bin
| + include --> /Developer/NVIDIA/CUDA-7.5/include
| + lib
| + libcuda.dylib
| + libcublas.dylib --> /Developer/NVIDIA/CUDA-7.5/lib/libcublas.dylib
+ Developer
+ NVIDIA
+ CUDA-7.5
+ bin
| + nvcc
+ include
| + cublas.h
+ lib
+ libcublas.dylib


インストール

あとは普通にインストールします。ふつうにCythonが走ってインストールできます。pyenv推奨。

$ pip install chainer


動作確認

動作しないのをわかっていながら動かしてみたら、実行時エラーになりました。Macbook Airだしね。動いた方はご報告を(?)・・・。

% python

Python 3.4.1 (default, Sep 15 2014, 13:51:31)
[GCC 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.40)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cupy
>>> cupy.array([1])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/unno/.pyenv/versions/3.4.1/lib/python3.4/site-packages/cupy/creation/from_data.py", line 27, in array
return core.array(obj, dtype, copy, ndmin)
File "cupy/core/core.pyx", line 1524, in cupy.core.core.array (cupy/core/core.cpp:51766)
File "cupy/core/core.pyx", line 1543, in cupy.core.core.array (cupy/core/core.cpp:51519)
File "cupy/core/core.pyx", line 107, in cupy.core.core.ndarray.__init__ (cupy/core/core.cpp:5117)
File "cupy/cuda/memory.pyx", line 250, in cupy.cuda.memory.alloc (cupy/cuda/memory.cpp:5101)
File "cupy/cuda/memory.pyx", line 230, in cupy.cuda.memory._malloc (cupy/cuda/memory.cpp:5040)
File "cupy/cuda/memory.pyx", line 231, in cupy.cuda.memory._malloc (cupy/cuda/memory.cpp:4955)
File "cupy/cuda/memory.pyx", line 28, in cupy.cuda.memory.Memory.__init__ (cupy/cuda/memory.cpp:1358)
File "cupy/cuda/device.pyx", line 51, in cupy.cuda.device.Device.__init__ (cupy/cuda/device.cpp:1299)
File "cupy/cuda/runtime.pyx", line 127, in cupy.cuda.runtime.getDevice (cupy/cuda/runtime.cpp:2048)
File "cupy/cuda/runtime.pyx", line 106, in cupy.cuda.runtime.check_status (cupy/cuda/runtime.cpp:1815)
cupy.cuda.runtime.CUDARuntimeError: cudaErrorInsufficientDriver: CUDA driver version is insufficient for CUDA runtime version
>>>