« 居角左美濃急戦についてしらべてみる。動画集 | トップページ | 古いGalaxy note IIでポケモンGo »

2016年7月14日 (木)

CaffeをWindows 7でcuDNN付きでビルド。

しばらくTheano/Lasagneでディープラーニングをしてましたが、Caffeのモデル動物園からImageNetのデータで学習済のモデルをLasagneに読み込んで動かしてみたらどうもCaffeよりかなり遅いっぽいので、Caffeを試してみようとおもったんですが、CaffeのPythonモジュールはVS2013で自分でC/C++ソースからビルドしないといけないのですね。これがもうめっちゃ大変でしたが、なんとか丸2日ほど格闘してできたので覚書。ビルドできたPythonモジュールは229MBあり巨大。公式にサポートされているUbuntuでも試したんだけどなぜかmakeできなかったのにウィンドウズでできた不思議。

速度の問題は、たぶん私のTheano/Lasagneの環境になにか問題があるだけで、この論文によるとCaffeとTheanoの速度はあまり違いがないはずなんですが、何が問題なのか未だにわかりません。それにしてもTensorFlowは家庭用PCでGPU一基だとまだCaffe・Theanoよりも遅いですね。

目安として「GPUでCUDAが使えるとCPUの大体10倍速い。CUDAにあわせてcuDNNが使えるとさらに10倍速い。」と言われますが、私の環境ではCaffeはCPUでもGPUでもTheanoの10倍くらい速いのでCUDA周りだけではなく、BLASとかも関係してそう。ふーむ。Theanoは汎用性高く、Caffeはコンピューターヴィジョンに割りと特化しているんで、ImageNetのモデルだとCaffeが有利?それにしても差が大きすぎ。

まあなんにせよ(私の環境では)Caffeは速い!素晴らしいです。CPUでもForwardパスだけなら使えそうな速度が出て満足。GPUでガンガントレーニング回して、デプロイメントはCPUでも行けるという感じ。

私は試してませんが、このブログCUDA付きでビルドしたWindows 7のCaffeがおいてありました。どうしてもビルドできない場合、試して見るんもありかもしれませんが、大丈夫ですかね。

ビルド方法

Caffeは公式にはLinuxしかサポートされていないので、ユーザーがボランティアで移植している状態だったようですが、マイクソソフトが最近CaffeをWindowsに移植しました。これが一番新しく安定してて、ビルドも簡単です。

ビルド方法はhttps://github.com/BVLC/caffe/tree/windowsのReadmeにある方法でだいたいそのままでオッケーです。

まず、マイクソソフトがメンテナンスしているブランチを取ってきます。gitでcloneしてwindowsブランチをcheckoutするか、単にzipをダウンロードするかします。zipの方が簡単。

このマイクソソフト版CaffeはVS2013に同梱されているNuGetというパッケージマネージメントツールをつかって勝手にOpenCVとかBoostとか必要なものを揃えてくれるのでビルドが楽ちんなんですが、それでもいろいろと落とし穴(下記参照)があってC/C++のコンパイルに慣れていない私の場合かなり苦労しました。

あとの手順は

CommonSettings.propsを変更。

CUDA Toolkit 7.5をインストール

cuDNN v4をインストール GPUが対応しているか確認。cuDNNありなしでは10倍くらい速度が違うらしいので最低でもCUDA Compute Capabilityが3.0くらいないと厳しい。今買うならGTX 1070ですかね。Compute Capability 6.2のはず。

玄人志向 ビデオカードGEFORCE GTX 1070搭載 コストダウンモデル GF-GTX1070-E8GB/BLF

Pythonは書いている通りMinicondaを使う。私の場合はMiniconda2ではなくMiniconda3だったので

conda create -n caffe python=2.7 numpy scipy matplotlib scikit-image pip
pip install protobuf

で作りました。

あとはVisual Studio 2013のコミュニティエディションをインストールして、caffe\windowsフォルダにあるソリューションファイルCaffe.slnを開いて、ビルドします。

Caffe_exe

ビルドしたcaffe.exeを起動して、メッセージが出るのを確認。

最後に

caffe\Build\x64\Release\pycaffeのcaffeフォルダをsite-packagesにコピー。

Anacondaのenvからimport caffeができたら終了。

注意点

落とし穴①

Python2.7でも3.5でもCUDA toolkitは7.5をインストールする。Theanoの公式サイトのインストールガイドにはPython2.7はVS2008が必要な関係でCUDAは5.5までしか使えないと書いている。しかし、実際は7.5あっさり使えた。AnacondaのPythonだから?GPUが新し目だとCUDA toolkit 5.5ではサポートないのではまった。

落とし穴②

CUDA関係のヘッダーファイルにUnicode文字があり、これが原因でビルドエラーになる。

対処法は、コンパネの「地域と言語」の設定からNon-Unicodeアプリの言語設定でEnglishを選択する。私はJapaneseにしていたのでこれが原因でエラーになりました。

落とし穴③

CommonSettings.propsをぬかりなく変更する。

7行目  CpuOnlyBuild を fasle か true に設定する。

8行目  UseCuDNN を fasle か true に設定する。 もちろんCpuOnlyBuildがtrueならfalseでないといけない。

9行目  CudaVersion は普通は7.5のままでいいでしょう。

13行目 PythonSupport はもちろん true にする。

21行目 CudaArchitectureはCUDA Compute Capability tableにあるCompute Capabilityの値にする。例えばGeForce GTX 960だと5.0なのでcompute_50,sm_50にして、それ以外を削除するとビルドがちょっと速くなる。初期値にcompute_35,sm_35;compute_52,sm_52とあるが3.0まで落としてもビルドできた。やっぱ3.5以上でないとダメみたい。2.1だとnvccがなぜか怒る。Theanoは2.1でも使えるのでなぜだろう?

公式サイトだと、3.0以上のGPUをLinux上でしかテストしてないので、それ以外の環境では使えるかわからないけどたぶんうごくんじゃない?みたいに書いている。Linuxなら古いGPUも行けるのかも。ウィンドウズではおそらく3.5以上が必須っぽい。

CUDA compute capability: devices with compute capability <= 2.0 may have to reduce CUDA thread numbers and batch sizes due to hardware constraints. Brew with caution; we recommend compute capability >= 3.0.

24行目 CuDnnPathは私の場合空のままで、cuDNNのcudnn64_4.dllやcudnn.lib、cudnn.hファイルはC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5以下の対応するフォルダにコピーした。

48行目 PythonDirをちゃんと設定する。初期値はC:\Miniconda2\になっているけど、私の場合Anacondaの64ビットの2.7のenvをつくったのでそのフォルダ(C:\Miniconda3\envs\caffe)を指定した。

落とし穴④

Visual Studioでビルドする前に色々と設定を確認する。

VS2013の使い方が全然判らないので、このブログのBefore compileとCompileの項目をかなり参考にしました。

とくに「ビルド」メニューのコンフィグレーションマネージャーからすべてのプロジェクトをReleaseとx64にするのを忘れないこと。

ソリューションエクスプローラーからcaffeなどのプロジェクトを右クリックして、プロパティをみて、コンフィグレーションプロパティの一般(General)にあるConfiguration typeをApplication (.exe)にするのを忘れない。

ビルド失敗したらCleanしてからビルドし直す。

などなど。いろいろもう忘れたけど確認することがあります。でかいのでまずはlibcaffeをビルドするのが吉かもしれません。一つを除いてぜんぶlibcaffeに依存しているのでlibcaffeがビルドできないと始まりませんし、これがビルドできれば残りはすんなり行くと思います。

« 居角左美濃急戦についてしらべてみる。動画集 | トップページ | 古いGalaxy note IIでポケモンGo »

Python」カテゴリの記事

ディープラーニング」カテゴリの記事

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1169291/66495414

この記事へのトラックバック一覧です: CaffeをWindows 7でcuDNN付きでビルド。:

« 居角左美濃急戦についてしらべてみる。動画集 | トップページ | 古いGalaxy note IIでポケモンGo »

広告欄


やっつけタイムライン

広告欄

はてブ

人目の訪問です。

  • follow us in feedly

    かなり更新が不定期なため、RSSリーダーをオススメします。現在Feedlyに122人登録頂いています。多謝!RSSを表示

    ブログランキング用 にほんブログ村 IT技術ブログ Pythonへ ブログランキングならblogram






    Jenny Mayhem
2017年7月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

IT技術注目記事

無料ブログはココログ