2015年07月21日

Mac OSX 10.10 (Yosemite)にpycudaをインストール

今回、仕事の関係でCUDAを使うことになった。
CUDAとはNVIDIAが提供するGPU向けのC言語ライブラリです。
要するにcudaというライブラリを使うとNVIDIA製のGPUを使った計算ができます。

一般的にGPUはCPUよりも格段に並列処理能力が高いため、
上手く利用することで低予算ながらスーパーコンピューター並みの速度を実現できます。
ゲームとかでの物理演算とかもこういうのを利用していると思います。

私は元々pythonで書いていたものをcudaで並列化したかったので、
pythonのライブラリも使えるpycudaを利用することにしました。
pycudaを使うとC言語でCUDAを書くよりも楽らしいですよ。

で、私の環境ってMac OS X Yosemite なんですけれど、
web上を探してもYosemite におけるpycuda環境構築の情報が乏しかったので少し手間取りましたが、
無事インストール、動作確認がとれたのでそのメモ。

環境

  • Mac: MacBook Air (11-inch, Late 2010) [pycudaテスト用なので古くてすみません]
  • OS: Mac OS X 10.10 Yosemite
  • CPU: 1.4 GHz intel Core 2 Duo
  • GPU: NVIDIA GeForce 320M 256 MB

Macは初期化したので、何も入れていない状態です。
ちなみにGPUがNVIDIA製でないとCUDAは使えませんので注意。

やったこと

  1. Xcode, Command Line Toolsをインストール
  2. Boost(1.58) をインストール
  3. CUDA(6.5)をインストール
  4. pip, numpy, python-six をインストール
  5. pycudaをインストール

1. Xcode, Command Line Tools をインストール

CUDAは基本的にはC言語のライブラリ使用にはgccなどのコンパイラが必要です。
また後でやるBoostのインストールにはコンパイラが必須なのでまずコレをやりましょう

この記事の通りでとりあえずOKですが、

App StoreからXcode(6.4)をインストールした後、
ターミナルを起動して

$ xcode-select --install

でも OKな気がします。

確認

ターミナルを起動し

$ gcc

これで

$ clang: error: no input files

とか出ればgccコマンドが入っている事になるので OK

2. Boost をインストール

次にBoostをインストールします。C言語の数値計算ライブラリです。すげー速いらしいです。
Pycudaのインストールで必要です。

Boost の公式サイトにアクセスして最新のソース(1.58 :2015.7時点)をダウンロードします。
Boost_C___Libraries.png

自分の場合は Downloadフォルダにダウンロードしたので、
以下のコマンドはそこで作業することを前提にしています。

$ cd ~/Downloads/boost_1_58_0
$ ./bootstrap.sh --prefix=/opt/local\
$ --with-pyton=python \
$ --libdir=/opt/local/lib \
$ --includedir=/opt/local/include$ ./bjam install

結構時間がかかります(1~2時間)。気長に待ちましょう。

3. CUDA(6.5)をインストール

現在リリースされている最新版は7.0ですが、
自分の環境では上手くいかなかったので
6.5を使っています。
公式サイトから CUDA 6.5 Tool kitをダウンロード。
インストールしました。
CUDAはToolkitを使ってインストールするとダウングレードもできるのでミスっても安心です。
もちろんアンインストールも出来ます。

インストール後、PATHの設定をします。
ターミナルを起動して

$ vim ~/.bash_profile

vimというエディタで.bash_profileというファイルが編集状態になります。
次の文をコピペ(キーボード i を押しインサートモードにしてから貼り付ける)

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

変更保存し、vimを終了する( esc->:wq->enter)

CUDA動作確認

ターミナルを起動し

$ cd /Developer/NVIDIA/CUDA-6.5/samples/
$ 1_Utilities/deviceQuery/deviceQuery

これでなんか色々出てきて、どこかにGPUの名前が出ていればOKです。
逆にダメな場合は

no CUDA-capable device is detected

と出ます。CUDAのバージョンを変えるなりしてみましょう。

これでCUDAまではOKあとはこれをPythonで使えるようにします。

4. pip, numpy, python-six をインストール

今回はMac標準で入っているpythonを使うことにします。
pyenvやCanopyなどを使ってる場合は適当にかえてください。

pip のインストール

まずpipをインストールします。
pipはpythonのパッケージを管理してくれます。
ターミナルを起動して次のコマンドを打てばOK

$ sudo curl -kL https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python

pip 動作確認

$ pip

なんか helpとか いっぱい出てきたらOK

numpyをインストール

pipを使ってnumpyをインストールします。
これは数値計算用のライブラリでpycudaで必要です。
ターミナルを起動して

$ pip install numpy

でOK

sixをインストール(アップグレード)

これもpycudaで必要みたいです。

$ pip install six
$ pip install six --upgrade

5. pycudaをインストール

さていよいよpycudaのインストール。
主にこの記事を参考にさせていただきました。
Boostと同じく~/Downloadディレクトリで作業してしまいます。
ターミナルを起動し

$ cd ~/Download
$ git clone http://git.tiker.net/trees/pycuda.git
$ cd pycuda
$ python configure.py

siteconf.pyというのが生成されます。makeコマンドの条件を決めるっぽいですね。
これを以下のようにします。

BOOST_INC_DIR = ['/opt/local/include']
BOOST_LIB_DIR = ['/opt/local/lib']
BOOST_COMPILER = 'gcc43'
USE_SHIPPED_BOOST = True
BOOST_PYTHON_LIBNAME = ['boost_python']
BOOST_THREAD_LIBNAME = ['boost_thread']
CUDA_TRACE = False
CUDA_ROOT = '/usr/local/cuda'
CUDA_ENABLE_GL = False
CUDA_ENABLE_CURAND = True
CUDADRV_LIB_DIR = ['${CUDA_ROOT}/lib', '${CUDA_ROOT}/lib64']
CUDADRV_LIBNAME = ['cuda']
CUDART_LIB_DIR = ['${CUDA_ROOT}/lib', '${CUDA_ROOT}/lib64']
CUDART_LIBNAME = ['cudart']
CURAND_LIB_DIR = ['${CUDA_ROOT}/lib', '${CUDA_ROOT}/lib64']
CURAND_LIBNAME = ['curand']
CXXFLAGS = ["-arch", "x86_64", "-arch", "i386"]
LDFLAGS = ["-F/Library/Frameworks", "-arch", "x86_64", "-arch", "i386"]
CXXFLAGS.extend(['-isysroot', '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk'])
LDFLAGS.extend(['-isysroot', '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk'])

CUDAのルートは実際には/Developer/NVIDIA/CUDA-6.5ですが
CUDA_ROOT = ‘/usr/local/cuda’はCUDAのバージョンが変更されても不変なのでこちらの方がいい気がします。

また参考サイトではcompyteが必要と言っているので

良くわかりませんがとりあえず入れました。

$ cd ~/Download/pycuda
$ git clone git://github.com/inducer/compyte.git

そしてpycudaをインストール

$ cd ~/Download/pycuda
$ sudo make
$ sudo make install

これでpycudaインストールは終わり。

pycuda 動作確認

インストール直後はPATHが繋がっていなかったので、とりあえずMacを再起動します。
ターミナルを起動し、pycudaの初期化コマンドを使ってみます。

$ python
>>> import pycuda.autoinit
>>>

問題なくインポート出来ればOK!
webを見るとPATH関連のエラーが多いようです。
なにかおかしかったらCUDAとpycudaのPATHを確認しましょう.

これでpycudaの導入は終わり!
お疲れ様です!
よい並列化ライフを!

おわり

posted by すけひろ at 12:14| Comment(0) | パソコン関連 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: