前回の記事でCNTKをWindowsに無事にインストールできたので、早速GPGPUで実行してどれくらい加速されるのか確かめてみよう。 CNTKの威力は、GPGPUで実行されたときのその速度にある。それを確認するためには、関数のプロファイリングとかを取ってみたいところだが、まずは基礎体力のチェックとして、MNISTを実行したときの性能を測定してみよう。
あまりにも有名なこのグラフだ。
[http://blogs.technet.com/cfs-file.ashx/key/communityserver-blogs-components-weblogfiles/00-00-00-90-35/speed_2D00_comparison.PNG:image=http://blogs.technet.com/cfs-file.ashx/key/communityserver-blogs-components-weblogfiles/00-00-00-90-35/speed_2D00_comparison.PNG]
1. MNISTをCPUとGPGPUで実行して実行時間を測定する
1.0 下準備
CNTKをWindowsで動作させるにあたり、以下のサイトを参考にさせてもらった。感謝。
1.0.1 Cygwin上でnumpyを使うときの手法
1.0.2 Windows上でCNTKを実行する際の下準備
hiro99ma blog: [ai]『深層学習』の8章に挫折してCNTKを試す (1)
僕のブログも参考にされて下さっているようで、感謝です!
1.1 CPUのみで実行する
CPUのみのバイナリは、CNTKのバイナリのx64/Release_CPUonlyに格納されている。ちなみに、Cygwin上で実行した。コマンドプロンプトでも実行してみたが、大して影響は無いようだ。
time CNTK.exe configFile=../Config/01_OneHidden.cntk ... real 5m29.619s user 0m0.000s sys 0m0.015s
5分くらいかかってるよ。ちなみに、そのときのCPUリソースの消費具合だが、
Core-i7 8コアを使っているのだが、見事に8コア使い切っている。同一環境でのTensorFlowの環境を構築していないので何とも言えないが、このあたりきっちりCPUリソースを使い切ってくるのはすごいな。
1.2 GPGPU付きで実行するときに必要なこと
GPGPUで実行するときは、ライブラリのパスが足りていないのか、いくつか怒られたので、C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0\bin\あたりのライブラリをコピーするか、LD_LIBRARY_PATHに通してやる。 僕の場合はCygwin上で実行しているのだが、何故かモジュールロードに失敗するので、いくつかのdllをCNTKのバイナリファイルの位置にコピーしておいた。 ちなみにGPU付きのCNTKのバイナリはx64/Release/に格納している。ここに"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0\bin"のcublas64_70.dllとcurand64_70.dllをコピーしておいた。
ちなみに、GPU付きでの実行中の様子である。殆どCPUを使っていないことが分かるね。それでいて速い。
# 01_OneHidden.cntkの実行結果 real 0m35.478s user 0m0.000s sys 0m0.015s # 02_Convolution.cntkの実行結果 real 0m46.616s user 0m0.000s sys 0m0.000s # 03_ConvBatchNorm.cntkの実行結果 real 0m22.204s user 0m0.000s sys 0m0.000s
前回、「02_Convolutionは20分待っても終了しない」と言っていたのだが、それにしても速いな。前回はVagrantの上でやったのがまずかったのかな?
今度は、GPGPUでどのような処理が実行されているのか、読み解いていこう。