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

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

何も考えずにPyCharmにコピペして実行したら、以下のエラー。

Traceback (most recent call last):
  File "/Users/aaaaaa/PycharmProjects/ml1/chainer_aidiary.py", line 16, in <module>
    cuda.check_cuda_available()
AttributeError: 'module' object has no attribute 'check_cuda_available'

GPUを利用しない設定

gpu_flag = 0

gpu_flag = -1 にすると、GPUを使わない設定になる。
この設定ならエラーなしで実行できた。

GPUを使う設定にした時のエラーは、いろいろ試したけど直せなかった。。 なんか、使ってるiMacのグラフィックは、
intel iris graphicsみたいなので、CUDAが使えず、どう頑張っても無理だったっぽい。
graphics - Can I run CUDA on Intel? - Stack Overflow

調査メモ

結局動かなかったけど、一応メモを残しておく。
追記:chainerのバージョンは、1.3.2だった。

機械学習用のvirtual envをactivateして、pipでchainerをupgradeしてみた。
source bin/activate
pip install --upgrade chainer

エラーに変化なし。

以下の記事を見つけた。
CUDA+chainer環境に苦戦中 - studylog

pycudaというのを入れるといいっぽい。

pycudaインストール (1回目)

pip install pycuda

    *** WARNING: nvcc not in path.
    *** May need to set CUDA_INC_DIR for installation to succeed.

略

src/cpp/cuda.hpp:14:10: fatal error: 'cuda.h' file not found
#include <cuda.h>
         ^
1 error generated.
error: command 'cc' failed with exit status 1

のようなエラーが出た。

調べたら、nvidiaのCUDA Toolkitを入れないといけないっぽい。

CUDA Toolkit

CUDA 7.5 Downloads | NVIDIA Developer
nvidiaのウェブサイトからCUDA Driver と CUDA Toolkit というものをダウンロードしてインストール。
バージョンは、7.5
インストールが終わって、ターミナルからnvccと打ってもコマンドが無いと言われたので、 homeディレクトリで、
vi .zshrc
パスを追加。

export PATH=/Developer/NVIDIA/CUDA-7.5/bin:$PATH
export DYLD_LIBRARY_PATH=/Developer/NVIDIA/CUDA-7.5/lib:$DYLD_LIBRARY_PATH

nvccと打ったら、 nvcc fatal : No input files specified; use option --help for more information
となった。
CUDA Toolkitのインストールはできた。

pycudaインストール (2回目)

pip install pycuda

エラー

ld: warning: directory not found for option '-L/Developer/NVIDIA/CUDA-7.5/lib64'
ld: warning: directory not found for option '-L/Developer/NVIDIA/CUDA-7.5/lib64'
ld: library not found for -lcuda
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: command 'c++' failed with exit status 1

pipを使わずにインストール

メモ:
Mac OSX 10.10 (Yosemite)にpycudaをインストール: すけひろ日記

boostのインストール

./bootstrap.sh --prefix=/opt/local --with-python=python --libdir=/opt/local/lib  --includedir=/opt/local/include$ ./bjam install
Bootstrapping is done. To build, run:
    ./b2
The Boost C++ Libraries were successfully built!
The following directory should be added to compiler include paths:
    /Users/aaaaaa/Documents/boost_temp/boost_1_59_0
The following directory should be added to linker library paths:
    /Users/aaaaaa/Documents/boost_temp/boost_1_59_0/stage/lib

記事を参考にソースからboostをインストールしようとしたけど、
なんか解凍したディレクトリに、boost的な何かがビルドされた気がする。 よくわからないので、brewでboostを入れた。

brew install boost

pycudaインストール(3回目)

git clone http://git.tiker.net/trees/pycuda.git
cd pycuda
python configure.py
vi siteconf.py

BOOST_INC_DIR = ['/usr/local/Cellar/boost/1.57.0/include']
BOOST_LIB_DIR = ['/usr/local/Cellar/boost/1.57.0/lib']
BOOST_COMPILER = 'gcc43'
USE_SHIPPED_BOOST = True
BOOST_PYTHON_LIBNAME = ['boost_python-py27']
BOOST_THREAD_LIBNAME = ['boost_thread']
CUDA_TRACE = False
CUDA_ROOT = '/Developer/NVIDIA/CUDA-7.5'
CUDA_ENABLE_GL = False
CUDA_ENABLE_CURAND = True
CUDADRV_LIB_DIR = ['${CUDA_ROOT}/lib', '${CUDA_ROOT}/lib']
CUDADRV_LIBNAME = ['cuda']
CUDART_LIB_DIR = ['${CUDA_ROOT}/lib', '${CUDA_ROOT}/lib']
CUDART_LIBNAME = ['cudart']
CURAND_LIB_DIR = ['${CUDA_ROOT}/lib', '${CUDA_ROOT}/lib']
CURAND_LIBNAME = ['curand']
CXXFLAGS = []
LDFLAGS = []

※lib64をlibにした。

LDFLAGSを変えて試してみた。

LDFLAGS = ['-L/Developer/NVIDIA/CUDA-6.5/lib']

NVIDIA DRIVERS 7.5.20

make でエラー。

fatal error: /Library/Developer/CommandLineTools/usr/bin/lipo: can't create temporary output file: build/temp.macosx-10.10-x86_64-2.7/src/cpp/cuda.o.lipo (Permission denied)
clang: error: lipo command failed with exit code 1 (use -v to see invocation)

buildディレクトリの中にrootでディレクトリができていたので消した。

c++ -bundle -undefined dynamic_lookup -arch x86_64 -arch i386 -Wl,-F. build/temp.macosx-10.10-x86_64-2.7/src/cpp/cuda.o 
略
-L/Developer/NVIDIA/CUDA-6.5/lib -L/Developer/NVIDIA/CUDA-6.5/lib -lcuda -lcurand -o build/lib.macosx-10.10-x86_64-2.7/pycuda/_driver.so -Xlinker -rpath -Xlinker /Developer/NVIDIA/CUDA-6.5/lib
ld: library not found for -lcuda
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: command 'c++' failed with exit status 1
make: *** [all] Error 1

ld: library not found for -lcuda
というエラーが消えない。

CUDAに対応したGPUが入っていないiMacでやっても無理、という結論に達した。

Geforceが差さっているWindows 10 PCで試したら動いた。 chainer でGPUを利用するメモ(Windows 10) - kubotti’s memo