SSブログ

PyOpenCLがMacで動いていない模様。 [プログラミング]

MacにPyOpenCLを入れたのだけれど、どうにも動いてない感じ。ソースに入っているdemo.pyがきちんと動いてないようなのである。実行結果は

$ python demo.py
[ 0. 0. 0. ..., 0. 0. 0.]
0.0

で何も入ってない。足し算をしているだけなので、まぁありえないんじゃないかと。
print(a_np)、print(b_np)で見てみても、ランダムで値が入っているようなので、GPUにデータを渡す時か戻す時にできていないか、実行の時にデータが飛んじゃうか。どっちにしてもエラーが出てくれないから厳しい。エラーが出たら出たで面倒ですが。

問題として考えられることは
・MacのOpenCLが腐ってる。
・PyOpenCLがおかしい。
・Pythonのバージョンとかがあってない
とかそういうところ。あ〜調べるのが面倒。


なぜ面倒かって?

PythonからOpenCLを呼んでいるところ。
Macのサポートがひどい(ひどかった)こと。
OpenCLでも多分printfデバッグができないこと。

そんな感じ。

OpenCLからPythonへきちんとエラーが渡されているかどうかも調べてないし、エラーがきちんと出るのかわかったのはPythonのところでした。

PyOpenCL自体を調べる前に、MacのOpenCLが直っているかどうか、カードベンダーから提供されているソースを再度コンパイルしてみる。直ってなかったら、どっちみち動くとは思えない。


ずーっと前のMacのOpenCLの様子。
 http://miff.blog.so-net.ne.jp/2011-11-25
そういえばこんなこともしていたね。

https://developer.apple.com/library/mac/samplecode/OpenCLOfflineCompilation/Listings/kernel_cl.html#//apple_ref/doc/uid/DTS40011196-kernel_cl-DontLinkElementID_4

サンプルを動かそうとしたけど、まともに動いてくれず。

$ ./test -t gpu64 -f kernel.gpu64.bc
Using OpenCL device: ATI Radeon HD 6490M
Warning: user specified the 'gpu64' option on the 32bit architecture.
clBuildProgram failed. Error: -11
clCreateKernel failed. Error: -45
clSetKernelArg failed. Error: -48
clEnqueueNDRangeKernel failed. Error: -48
Validation failed at index 0
Kernel FAILED!

こんな簡単なソースでさえコンパイルは通るが実行が通らない。実行時にコマンドを変えて動くようにできそうな気がするが、それにしたって恐らくエラーは出るんだろう。

$ ./test -t gpu32 -f kernel.gpu32.bc
Using OpenCL device: ATI Radeon HD 6490M
Validation successful.

あ、Radeonは32bitだったんだ。PyOpenCLもそこいらへんの齟齬が出てそうな気もする。というか成功した、と出しただけで、他のこまごまとした結果を出してくんないのな。サンプルなんてそういうところ出してなんぼだと思うけど、疲れているのでソースを直したりしない。

一応今でも動くということで。まぁこれくらい通らなくてどうする、というか、これ以上複雑になるとダメだった気がした。複雑と言っても軽く分岐したりするぐらいだよ? 思い出したがそれでOpenCLとMacは捨てたんだった…。だからつまらない検証はこれ以上しない。PyOpenCLが動くかどうかが大事。


Pythonのテストらしきものがあったので、ソースコードを引っ張り回してみる。
 https://pypi.python.org/pypi/pyopencl
testフォルダにあるものを動かしてみた。


$ python test_array.py

《中略》

../../../.pyenv/versions/2.7.10/lib/python2.7/site-packages/pyopencl-2016.1-py2.7-macosx-10.11-x86_64.egg/pyopencl/__init__.py:509: RuntimeError
==================== 5 failed, 71 passed, 1 skipped, 1 xfailed in 16.44 seconds ====================


エラーが出てる。なんのエラーかがわからないのが気持ち悪いのだが、さっきAppleのソースコードで32bitにしないでエラーになったのと近い数のエラーが出たのがちょっと気がかり。ARMでさえ64bit化している今日で、GPUが32bitかぁ。まぁ4、5年前のマシンだからしょうがないといえばそうなのだけれど。というか、現在はどうなっているのだろう。メモリが32bit以上なければ問題ないのかもしれないですけどね。

$ python test_algorithm.py
《中略》
../../../.pyenv/versions/2.7.10/lib/python2.7/site-packages/pyopencl-2016.1-py2.7-macosx-10.11-x86_64.egg/pyopencl/__init__.py:509: RuntimeError
======================== 19 failed, 74 passed, 1 skipped in 166.59 seconds =========================


$ python test_clmath.py
《中略》
test_clmath.py:102: AssertionError
========================= 9 failed, 35 passed, 10 skipped in 10.81 seconds =========================


あ、最後だけエラーが出なかった。
$  python test_wrapper.py 
======================================= test session starts ========================================
platform darwin -- Python 2.7.10, pytest-2.9.2, py-1.4.31, pluggy-0.3.1
rootdir: /Users/ユーザー/Downloads/pyopencl-2016.1, inifile: 
collected 49 items 

test_wrapper.py ...........s.s.....................xx............

========================= 45 passed, 2 skipped, 2 xfailed in 3.20 seconds ==========================


ん〜最後の除いて軒並みエラーが出てますね。インストール作業は軒並みeasy_installでやったので、きちんとしたお作法でやれば少しはマシになるかもしれない。


もう面倒になったので、MacではPyOpenCLやらないで、Chainerやります。まぁMacのOpenCLがダメなのはわかっていたんだけど、何も直ってなかったw。GeForceならこんな苦労もせずにできたものを。そのうちLinuxマシンにGeForce挿して本格的にやるかも。まぁぼちぼちで。


《後記》
https://wiki.tiker.net/PyOpenCL/Installation/Mac


pip install numpy # Installs version 1.9
git clone http://git.tiker.net/trees/pyopencl.git
cd pyopencl
git submodule init
git submodule update
python configure.py
python setup.py build
make
python setup.py install

をやったが前にやったよりもテスト結果は悪かった。基本的にAppleのOpenCLの実装の悪さと、Radeonの古さによりOpenCL1.2対応しかしていないことによる問題もあるかもしれない。どっちにしても古いMacでとかRadeonなMacでのGPGPUは絶望的かもしれない。Macでどうしてもやりたい人はGeforce入りのものを買ったほうがいいと思います。

タグ:GPGPU
コメント(0) 
共通テーマ:パソコン・インターネット

コメント 0