chainerをGPUで動かしてみた
先日GPUを仕入れたのでchainerをGPUで動かしてみました。
CUDAやpycudaの設定に戸惑い3回ものOSクリーンインストール経て疲れ果てましたけど、ようやく先ほど動き出したようです。CUDAをapt-getで入れると依存関係?がめちゃくちゃになって崩壊しました。
最終的にこの方の記事を参考にさせてもらって何とか動かす事ができました。n-nishida.hatenablog.com
CPUとの簡単な速度比較など
sampleにあったMNISTの分類です。
これは全部共通
batchsize = 100
n_epoch = 5
n_unitsの値だけを変えて色々と試してみました。
n_unitsは下のコードでもわかるように隠れ層の値です。
model = FunctionSet(l1=F.Linear(784, n_units),
l2=F.Linear(n_units, n_units),
l3=F.Linear(n_units, 10))
AはMac 、BとCはUbuntu14.04とOSが違う適当な比較なのであまり鵜呑みにはしないでください。
ちなみにCUDA7.0で、CuDNNはまだ許可が下りてないので入れてません(入れたら同じ条件で比較して追記します)。
A = intel870 : cpu
B = intel3770 : cpu
C = Nvidia 750Ti (括弧内の%は使用率)
n_units = 100
A 18秒
B 13秒
C 11秒 (15%ほど)
n_units = 400
A 55秒
B 42秒
C 12秒 (50%ほど)
n_units = 1000
A 196秒
B 125秒
C 18秒 (90%ほど)
以上です。
中間隠れ層が小さい値の場合はほどんと差がありませんが、増えれば増えるほど差が開きます。
CPUはn_unitsの値に比例して同じように時間もかかるのに対し、GPUは緩やかな伸びに留まってます。
chainerはコード量が少ないので自分のようにいまいち理屈を分かってない人間でもわりと読み書きできるのが嬉しい。青い深層学習本を片手に勉強がんばろう。