2016/01/30

[ai]『深層学習』の8章に挫折してCNTKを試す (1)

話し合えばいつかは理解できる日が来るんじゃないかと読んでいた『深層学習』の8章。
だめだ・・・さっぱり頭に入ってこない・・・。

しかし、私の経験度が上がることによって理解できる日は来るかもしれない。
そういうわけで、まずはここで挫折を認め、違うことをやってみよう。

前はCaffeをやったけど、サンプルを動かしただけだ。
じゃあ、せっかくなので、最近オープンソースになったMicrosoftのCNTKのサンプルを動かしてみよう。


CNTKのWikiがあったので、順番にやっていこう。
セットアップ、例、使い方、という順になっているので、上2つだけやってみる。
準備運動せずにいきなり深入りすると、足が吊るのだ。

 

セットアップ

  • Setup CNTK on your machine

    説明が少ないな。。。
    既にビルドしたものがあるから、ダウンロードして設定するか、自分でWindows版のビルドLinux版のビルドでやるか。

    どちらにせよ、64bitのOSが必須となっている。
    また、GPUを使うのかCPUのみなのかで分かれる。
    この辺はCaffeもそうだった。
    しかし、MicrosoftだからWindows版だけかと思っていたのだが、Linux版もあるとは驚きだ。

    Windowsでビルドするなら、Visual Studio2013でやるそうだ。
    よくわからんが「1bit-SGD」というのを使いたいなら説明が別途あるらしい。

    しかし、それがないとしても、ビルドはえらくめんどくさそうだ。
    CUDA、Boost、ACML、MKL、MS-MPI、OpenCV・・・。
    でも、Caffeだってそうだったじゃないか。
    アナコンダだっけ、あのpythonをインストールしておけば簡単だったのかもしれないけど、あれがない、これがない、と大変だった。

    あ、ビルドの仕方に注意事項が書かれていた。

    • ビルドマシンのlocaleはEnglishになってるの前提
    • 長いファイルパスのとこに置いてたらだめ
    • Visual Studio2013がクリーンインストールされてないとだめ。VS2012とかVS2010がインストールされたままだと変になる

    うん、ビルドはあきらめよう♪

     

    うちのメインマシンはWindows7 64bitなので、ここ向けにインストールする。
    Caffeだと、VirtualBoxで動かしていたので、マシンが全体的に重くなるのよね・・・。
    新しいPCを買って、メモリが増やせるようになったら、そのときは、ね。

    リリース版のダウンロードは、こちら
    今日(2016/01/30)は、r2016-01-26版が最新だ。
    Windows版のサイズはLinux版の倍くらいあるな・・・。

    GPU版とCPU版の違いは、バイナリじゃなくてCUDAが有効になっているかどうかなのか?
    わからんので先にMS-MPIをインストールする。
    これは、MicrosoftのMessage Passing Interface、らしい。
    なんかわからんが、Active Directoryとか出てくるので、分散処理するとかそういう用途か?
    これは、GPU版とかCPU版とか関係なさそうな気がするが・・・。
    ランタイムとSDKと書いてあるので、MSMpiSetup.exeとmsmpisdk.msiをインストール。
    今日は、v7が最新のようだ。

    残るは、CUDAだけになった。
    これをインストールしたらGPU版で、しなかったらCPU版ということだろうか。
    うちのビデオカードは、GT710というやつで、検索するとCUDAをサポートしているそうだ。
    で、やることは「最新版のNVIDIAドライバをインストールしておけ」と。
    あれ、じゃあ、普通にNVIDIAのビデオカードを使っていたらGPU版になるのかい?
    CUDA SDKはインストールしないならしないでよさそうだ。

    環境変数ACML_FMAに0を設定するように、と。
    検索すると、AMD関係のようだ。
    SSE/FMA4/FMA3とかあるから、MAC命令とかSIMD命令とかその辺?
    環境変数をGUI設定するのがめんどくさいので、コマンドプロンプトで試そう。

     

    CNTK.exeの実行

    何も考えず、ダウンロードしたCNTKバイナリのzipを解凍して、下の方にCNTK-20160126-Windows-64bit-ACML5.3.1-CUDA7.0というフォルダがあるので、そこでコマンドプロンプトを開く。
    「set ACML_FMA=0」して、CNTK.exeを実行!

    image

    嘘つき!
    動くって言ったやん!

    よくわからんが、頭にcuがついたファイルらしいから、CUDAか?
    CUDAでインストールしなかったのは、SDKか?
    https://developer.nvidia.com/cuda-downloads
    ここの下にダウンロードするボタンがあるから、OSとかを選択してダウンロード。
    1GB近くある・・・。ネットワーク版にすればよかった。。。
    そして、インストール。

    image

    ば、ばかなっ!

    いや・・・そういえばNVIDIAのドライバをインストールするときに、最低限にするためにいろいろ外したような気がする。
    悔しいが、フルインストールしよう。
    PhysXがあやしい気がする。

    やったけど、だめだった。
    気にせず、続行させた。
    Visual Studioと統合するうんぬん出てきたが、それもOKして進める。
    なんとなく、Toolkitというやつだけあればよさそうなのだが、わからんので全部入れる。
    いっぱいインストールされていないが・・・いいだろう。

    そして、CNTK.exeを実行!
    ・・・変わらず。
    あれか? 環境変数のパスが通っていないだけか?
    Program Filesを検索すると・・・cublas64_75.dllというのが見つかった。
    ってことは、CUDA 7.5じゃなくて、CUDA 7.0が必要ということか・・・。
    よく見れば、CNTKのファイル名にも「CUDA7.0」って付いてるな。

  • https://developer.nvidia.com/cuda-toolkit-70
    今回は、Toolkitだけにしてみた。
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0\bin\cublas64_70.dllにある。
    念のため、set PATHで追加して実行・・・ダメだ。
    腹が立ったので、dllをCNTK.exeと同じフォルダにコピーして実行・・・あ、別のDLLがないって。

    curand64_70.dllもコピーすると、コマンドは進んだ。
    が、EXCEPTION occurred・・・。
    コマンドラインがどうのこうのってことは、これは単体で動くプログラムじゃないんだ。

    そういえば、Examplesがあるのを忘れていた。


    サンプル

  • Examples
  • あまり読まず、Caffeでも試したMNISTのをやってみよう。
    手書き数字画像の識別ですな。

    CNTKのzipを解凍した中に、Examples\Image\MNIST\AdditionalFilesにpythonのファイルがあるので、pythonを実行すればよいらしい。
    ・・・numpyがない、と。
    そうね、あの環境はVM上に作ったものだから、こっちにはないんだ。
    PyCharmの環境もあって、そっちにはインストールしてるんだが・・・あ、Yottaがインストールしたpythonがパスの上にいやがる。
    Yottaめ・・・。
    と、ともかく、numpyなど入ってれば、スクリプトは進んだ勝手に終わった。

     

    set PATHで、CNTK.exeの入ったフォルダを先頭に追加し、Dataフォルダに移動して実行

    > cntk configFile=../Config/01_OneHidden.config

    注意は、パスのデリミタが/ということだ。
    \は試してないけどね。

    実行すると、「Redirecting stderr to file ../Output/01_OneHidden_out_train_test.log」と出てきて、なんかずっと悩んでいる。
    数時間待たされるのか?と思ったが、そういうこともなく、数分で終わった。2分くらいかな。

     

    で?
    outputフォルダに何か入っているらしい。

    image

    うん、何か入っている。
    けど、バイナリファイルで、なんだかよくわからない。。。。

    このMNISTサンプルの目的は、NDL(Network Description Language)はこんなものですよ、ということを示すためのものらしい。
    へー、ほー、ふーん。。。


    手足が冷えてきたので、今日はここまで。
    もうちょっと、使っている人のブログなどを見て、情報を集めてきます・・・。

    0 件のコメント:

    コメントを投稿

    コメントありがとうございます。
    スパムかもしれない、と私が思ったら、
    申し訳ないですが勝手に削除することもあります。