(22) cuda-convnet2はやってみれない (T_T)

この記事は最終更新から 527日 が経過しています。

2014年7月17日、cuda-convnet の作者が cuda-convnet2 なるプログラムをGIT上に公開した。
現在も開発が進行中で、その様子はこちら(↓)で眺められる。
https://github.com/akrizhevsky/cuda-convnet2
20140822_01

これはぜひやってみよう!

と意気揚々とプログラムをダウンロードし、
  必要なライブラリをインストールし、
    ビルドが成功し、

いざ実行!

=========================
Running on CUDA device(s) 0
Current time: Fri Aug 22 21:51:07 2014
Saving checkpoints to /home/user/cuda/cuda-convnet2/save/cifar-10/ConvNet__2014-08-22_21.51.06
=========================
src/nvmatrix.cu(394) : getLastCudaError() CUDA error : kSetupCurand: Kernel execution failed : (8) invalid device function .

エラーで止まった (TT)

いろいろ調べると、コンパイル時に指定した Compte Capability version が、
マシンに搭載している GPUと合っていないことが原因のようだ。

そこで…
うちの新しい GTX-760 の Compute Capabilityを調べてみる。
これには NVIDIA_CUDA-6.0_Samples に付属の deviceQuery コマンドが使える。

[user@]$ ./deviceQuery
./deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "GeForce GTX 760"
  CUDA Driver Version / Runtime Version          6.0 / 6.0
  CUDA Capability Major/Minor version number:    3.0
  Total amount of global memory:                 2047 MBytes (2146762752 bytes)
  ( 6) Multiprocessors, (192) CUDA Cores/MP:     1152 CUDA Cores
  GPU Clock rate:                                1058 MHz (1.06 GHz)
  Memory Clock rate:                             3004 Mhz
  Memory Bus Width:                              256-bit
  L2 Cache Size:                                 524288 bytes
 :

うちのは Compute Capability version 3.0 なのだそうだ。

では、cuda-convnet2 を Compute Capability ver.3.0 指定でビルドしてみる。
MakeFile中で以下のように書かれているところを探し、すべて3.0指定に書き換えた。

GENCODE_SM35    := -gencode arch=compute_35,code=sm_35
GENCODE_FLAGS   := $(GENCODE_SM35)

再度ビルドを実行する。

[user@]$ ./build.sh clean
[user@]$ ./build.sh

今度こそは!
と cuda-convnet2 で Cifar-10 自動認識を起動!

すると…

さっきよりもヤバゲなエラーが出た (T^T)

=========================
Running on CUDA device(s) 0
Current time: Fri Aug 22 22:00:59 2014
Saving checkpoints to /home/user/cuda/cuda-convnet2/save/cifar-10/ConvNet__2014-08-22_22.00.58
=========================
1.1 (0.00%)...python: src/nvmatrix.cu:1473: virtual cudaTextureObject_t NVMatrix::getTextureObject(): Assertion `_texObj != 0' failed.
Error signal 6:
/home/user/cuda/cuda-convnet2/cuda-convnet2/cudaconvnet/_ConvNet.so(_Z13signalHandleri+0x26)[0x7fb5b9f2a3e6]
/lib64/libc.so.6[0x35e22329a0]
/lib64/libc.so.6(gsignal+0x35)[0x35e2232925]
/lib64/libc.so.6(abort+0x175)[0x35e2234105]
/lib64/libc.so.6[0x35e222ba4e]
/lib64/libc.so.6(__assert_perror_fail+0x0)[0x35e222bb10]
./nvmatrix/libnvmatrix.so(_ZN8NVMatrix16getTextureObjectEv+0x147)[0x7fb5b8c15f67]
./cudaconv3/libcudaconv.so(_Z11_filterActsR8NVMatrixS0_S0_iiiiiiiffb+0x5c25)[0x7fb5b7f984e5]
./cudaconv3/libcudaconv.so(_Z14convFilterActsR8NVMatrixS0_S0_iiiiiiiff+0x30)[0x7fb5b7f9dd30]
/home/user/cuda/cuda-convnet2/cuda-convnet2/cudaconvnet/_ConvNet.so(_ZN9ConvLayer9fpropActsEifji+0x18e)[0x7fb5b9ee5d8e]
/home/user/cuda/cuda-convnet2/cuda-convnet2/cudaconvnet/_ConvNet.so(_ZN5Layer5fpropERSt3mapIiP8NVMatrixSt4lessIiESaISt4pairIKiS2_EEEji+0x240)[0x7fb5b9ef2ab0]
/home/user/cuda/cuda-convnet2/cuda-convnet2/cudaconvnet/_ConvNet.so(_ZN5Layer5fpropEji+0x23f)[0x7fb5b9ef2d4f]
/home/user/cuda/cuda-convnet2/cuda-convnet2/cudaconvnet/_ConvNet.so(_ZN13ConvNetThread3runEv+0x17d)[0x7fb5b9f44d6d]
/home/user/cuda/cuda-convnet2/cuda-convnet2/cudaconvnet/_ConvNet.so(_ZN6Thread18start_pthread_funcEPv+0x9)[0x7fb5b9ef7b69]
/lib64/libpthread.so.0[0x35e26079d1]
/lib64/libc.so.6(clone+0x6d)[0x35e22e8b5d]
CUDA error at src/nvmatrix.cu:522 code=29(cudaErrorCudartUnloading) "cudaSetDevice(d)"
Error signal 11:
/home/user/cuda/cuda-convnet2/cuda-convnet2/cudaconvnet/_ConvNet.so(_Z13signalHandleri+0x26)[0x7fb5b9f2a3e6]
/lib64/libc.so.6[0x35e22329a0]
/lib64/libc.so.6(exit+0x35)[0x35e2235d75]
./nvmatrix/libnvmatrix.so(+0x30886)[0x7fb5b8c15886]
/home/user/cuda/cuda-convnet2/cuda-convnet2/cudaconvnet/_ConvNet.so(_ZN14DataCopyThread3runEv+0x4ac)[0x7fb5b9ee3b9c]
/home/user/cuda/cuda-convnet2/cuda-convnet2/cudaconvnet/_ConvNet.so(_ZN6Thread18start_pthread_funcEPv+0x9)[0x7fb5b9ef7b69]
/lib64/libpthread.so.0[0x35e26079d1]
/lib64/libc.so.6(clone+0x6d)[0x35e22e8b5d]

エラーの内容を見ると、どうやらうちのGTX760では未サポートの機能を使おうとしている様子…

そこで cuda-convnet2 のホームページを改めて見てみると…
20140822_02

Compute Capability 3.5以上じゃないとダメ

と書いてあった…

2014年8月現在、GTX780を手に入れるには 6万円前後のお金が必要だ…
先日Xeon x5570 x2 マシンを 6万円で購入したので、手元にお金は残っていない…

cuda-convnet2 はヤフオクで GTX780が2万円台に値下がりするまでしばらくあきらめよう(T^T)


参考情報

CUDA ZONEのページに GPU型番別の Compute Capavility Version一覧が載っている。
https://developer.nvidia.com/cuda-gpus20140822_03

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*