のつづき& Theano + CUDA - まんぼう日記 の顛末.
まずは「2時間目 Part3」のプログラムをCPUとGPUのそれぞれで実行して比較してみます.
CPUのみで実行.takataka3.py というのは,この実験のためのpythonプログラムです.
$ time THEANO_FLAGS=mode=FAST_RUN,device=cpu,floatX=float32 python takataka3.py real 9m43.569s user 15m30.330s sys 0m39.931s
「2時間目 Part3」のときとはマシンが違うしfloatの精度も違う(デフォルトはfloat64)ので単純な比較はできませんが,ほぼ同じ結果.いくつかの計測値を列挙すると
- 学習終了までのepoch数: 47
- Time this epoch(プログラムがepoch毎に教えてくれる,1epochにかかった時間(CPU時間か実時間かは不明)): 最初の方は4秒程度,最後の方は5.3秒程度
- 誤識別率:
$ ../../print_monitor.py mlp_2_best.pkl | grep misclass train_y_misclass : 0.0 valid_y_misclass : 0.0176 test_y_misclass : 0.0182
で,GPUも使うと…
$ time THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32 python takataka3.py real 7m49.416s user 6m38.617s sys 0m17.307s
- 学習終了までのepoch数: 31
- Time this epoch: 5.5秒程度
- 誤識別率:
train_y_misclass : 0.000419999996666 valid_y_misclass : 0.0198999904096 test_y_misclass : 0.0189999919385
MLPの学習結果は重みの初期値に依存するので,いずれも1回ずつの実行結果だけ見ていろいろ言うことはできませんが… 1 epoch にかかってる時間はGPU使ったら逆に遅くなってます.timeコマンドの出力でCPU時間(user time)が減ってるのは一部の計算をGPUに投げてるんやからまあ当たり前やろうし…
もっと豪勢なGPU積んだマシンじゃないとありがたみがないってことかな? ただ,CPUだけ使う条件で計算中の様子を観察(Mac OS X 10.8 Mountain Lion の「アクティビティモニタ」で)してると,マルチスレッドで動いてるけどCPU使用率は100%程度にしかなってない…クアッドコアのマシン(スペックは Theano + CUDA - まんぼう日記 参照)やから,全コアをフルにぶん回すようなプログラムやと400%とか800%近い値になるので,少なくともこのチュートリアルのサンプルはCPUだけでもあまり効率よく計算できてないわけです…
無理にGPU使わなくても,自分でCPUを効率よく使うプログラムを書ければそっちの方が高速かもしれない気がしてきた.そんなプログラムを書く時間があるかどうかって方が問題ですが.
でも,convolutional net のサンプルはひょっとしてGPU使うと爆速だったりして(3時間目に書いたようにCPUだとすごい時間かかるのです),と希望を抱きつつ実行してみると…
Segmentation Fault しちゃいました…
むー.Theano + CUDA - まんぼう日記でいらんことしてるせいって可能性あるけど….むむー.
Numpy / Theano で行列の積を高速に計算するには - まんぼう日記 へつづく.
続 Theano + CUDA - まんぼう日記 も参考になるかも.