FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Microsoftの機械学習ツールキットCNTKをGPGPUで実行してその威力を知る(Windows編)

前回の記事で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を使うときの手法

hope-is-dream.hatenablog.com

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リソースの消費具合だが、

f:id:msyksphinz:20160214120539p:plain

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を使っていないことが分かるね。それでいて速い。

f:id:msyksphinz:20160214123608p:plain

# 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の上でやったのがまずかったのかな?

msyksphinz.hatenablog.com

今度は、GPGPUでどのような処理が実行されているのか、読み解いていこう。