研究室でいろいろ悲しい事情があり、ガチのニューラルネットワークをフルスクラッチで書いています。

ちゃんと勉強して今はなんとなくかけるようになったのですが、ネットワークが大きくなっていくうちにだんだん実行時間で悩まされるようになりました。

パラメータを調整したいので実行時間がかかると研究の進みに支障が出てくる。

今は10分ちょいなので、10回パラメータ変えて試しても2時間で終わりますが、これが1時間とかになったらやばい。というか、理論的には今出ている案で最悪の場合は10時間超える笑。

研究室には同じような悩みをかかけている人間がいて、openMPやらCUDAやらを使う人間も(CUDAは今はいない)いるんですが、python組でライブラリーをつかてない人間はそういう芸当を持っている人はいなくて、使ってるライブラリーがGPU対応だといいねってかんじでした。

ただ、せっかくpython使ってるんだから、Cupy使えばいいんですよね。

って思ってたんですけど、めんどくさかったり、GPUのドライバーが壊れていたりといままで使ってなかったんです。

ただ、いい加減使おうと持ったので、研究室のメンバー向けに検証を行ったので共有しておきます。

 

検証プログラム

 

巷の検証記事はMnist使ってたり、計算が複雑だったりと、いまいち実感が持てないやつばかりだったので、今回はランダムのn*n行列の積を求めるだけのプログラムにしました。

実行環境はubuntu 16.04、GTX 750 Ti 2GB、chainerとCupyのバージョンは知りませんが最新だと思います。

繰り返しがあるのはうちの研究室はやたら行列計算をforループ内で使うので一応つけてます。

まずはn=10

恩恵が少ないですね。

次はn=100

ここらへんになるとCupyがマストなきがしてきます。

n=1000は


いい感じですね。Cupyの方の速度が上がっているのはたまたまだと思います。

10000*10000で試したんですけど

てでたので諦めます。GPU内のメモリーの問題でしょうか・・・。

n=5000では

 

もっと大きな行列を扱えばもっと恩恵を得られるんでしょうけど、GPU的に限界のようですし、そんなに大きな行列は扱わないのでここまでにしておきます。

とりあえず、バッチ化を検討するつもりです。

 

それでは。