Sponsored Link

(9) cuda-convnetを試してみる

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

NVIDIA GTX-650の載ったマシンがあるので cuda-convnet なるGPU実装版NeuralNetプログラムを動かしてみる。ホームページはこちら(↓)
https://code.google.com/p/cuda-convnet/

トレーニングデータセットとして MNIST は提供されていないので…
今回は同ホームページで提供されている CIFAR-10 データセットを使用する。

(1) cuda-convnetをインストール

インストール手順はこちらに書かれている。
今回インストールするマシンには CUDA 6.0 , SDK 4.2 をインストールしてある。
この辺りのゴタゴタに3時間以上も費やしてしまった…
20140702_01

(2) データセットをダウンロード

データセットのダウンロードはこちらから。
20140702_02

(3) プログラムを実行

プログラムの実行手順はこちらに書かれている。
20140702_03

(4) 実行結果

今回は 10 epochs 指定で実行してみた。

[user@linux]$ python convnet.py --data-path=../data/cifar-10/ --save-path=../save --test-range=6 --train-range=1-5 --layer-def=./example-layers/layers-19pct.cfg --layer-params=./example-layers/layer-params-19pct.cfg --data-provider=cifar --test-freq=13

10epoch目の結果はこんな感じになった。
error rate = 0.366100 (accuracy=73.4%)
・1epochの処理に要する時間はおよそ 40秒前後 → octaveと比較するとめちゃくちゃ速い!

------------------------------------------------------- 
Layer 'conv1' weights[0]: 2.856662e-02 [1.153782e-04] 
Layer 'conv1' biases: 9.223316e-03 [3.505556e-06] 
Layer 'conv2' weights[0]: 1.143599e-02 [2.939290e-05] 
Layer 'conv2' biases: 7.934627e-03 [3.020574e-06] 
Layer 'conv3' weights[0]: 1.032112e-02 [2.550705e-05] 
Layer 'conv3' biases: 7.986603e-03 [2.903473e-06] 
Layer 'fc10' weights[0]: 2.028455e-03 [1.244750e-04] 
Layer 'fc10' biases: 2.140154e-01 [1.096559e-04] 
-------------------------------------------------------
Saved checkpoint to ../save/ConvNet__2014-07-02_23.33.24
======================================================= (8.310 sec)
10.1... logprob:  1.094434, 0.383200 (6.475 sec)
10.2... logprob:  1.132439, 0.391000 (6.473 sec)
10.3... logprob:  1.077382, 0.378500 (6.475 sec)
10.4... logprob:  1.107526, 0.386300 (6.474 sec)
10.5... logprob:  1.072043, 0.371800 
======================Test output======================
logprob:  1.077383, 0.366100 
------------------------------------------------------- 

ちなみにうちのGPUの性能はこんな感じです。

Device 0: "GeForce GTX 650"
  CUDA Driver Version / Runtime Version          6.0 / 6.0
  CUDA Capability Major/Minor version number:    3.0
  Total amount of global memory:                 1023 MBytes (1073020928 bytes)
  ( 2) Multiprocessors, (192) CUDA Cores/MP:     384 CUDA Cores
  GPU Clock rate:                                1058 MHz (1.06 GHz)
  Memory Clock rate:                             2500 Mhz
  Memory Bus Width:                              128-bit
  L2 Cache Size:                                 262144 bytes
  Maximum Texture Dimension Size (x,y,z)         1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
  Maximum Layered 1D Texture Size, (num) layers  1D=(16384), 2048 layers
  Maximum Layered 2D Texture Size, (num) layers  2D=(16384, 16384), 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total number of registers available per block: 65536
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  2048
  Maximum number of threads per block:           1024
  Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
  Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 1 copy engine(s)
  Run time limit on kernels:                     No
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing (UVA):      Yes
  Device PCI Bus ID / PCI location ID:           1 / 0

近日中に cuda-convnet上でMNISTをトレーニングしてみよう。

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>

*