CaffeをUbuntu16.04LTS + GTX1070の環境でインストール

GTX1070を購入したのでCaffeで遊んでみようと思いインストールを試みたのですが、なかなか苦労したのでインストール手順をまとめておきます。

環境

  • Ubuntu 16.04 LTS (64bit)
  • NVIDIA GeForce GTX1070
  • CUDA Toolkit 8.0 RC
  • cuDNN v5.1
  • OpenCV3.1.0
  • GCC5.4
  • Anaconda2-4.1.11

GTX1070は最新のPascalアーキテクチャを採用しており、GPUを使って高速化するにはCUDA Toolkit 8.0 RCを用いる必要があります。RC(Release Candidate)がなので不具合がないのか心配ではありますが、他に選択肢もないのでこれをインストールします。
加えてCaffeにはOpenCVやPython関連の環境が必要です。OpenCVのバージョンは3.1とし、Python関連の環境はAnaconda (Pythonによる機械学習・数値計算のためのパッケージ)で整えました。

 

1. 必要なソフトウェアのダウンロード

Caffeのインストールに必要な以下のソフトウェアをダウンロードしました。

 

2. Anacondaのインストール

以下のように実行して、あとは全て”yes”で大丈夫です。

インストール後は以下のようにアップデートします。

 

3. CUDA Toolkitのインストール

まずは、NVIDIAのドライバをインストールします。(すでにインストールされている場合は不要)
GTX1070を動作させるにはnvidia-367というドライバが必要です。
以下のようにapt-getを使うと簡単にインストールできます。

続いて、CUDA Toolkitをインストールします。
インストーラはRUNインストーラ(.run)としました。Debianインストーラ(.deb)でインストールしたところ、ドライバのバージョンが367.35だと、”CUDA driver version is insufficient”といわれ正しく動作しませんでした。バージョンが367.27というような古いドライバをインストールするのもうまくいかなかったので、結局.runでインストールすることにしました。
手順は以下の通りです。

3.1. GCCのインストール・シンボリックリンクの作成

Ubuntu 16.04ではGCC5.4がインストールされていましたが、CUDA Toolkit 8.0 RCはこのバージョンに対応していませんでした。(現在はパッチファイルを用いれば対応可能、後述)
なのでGCC4.9をインストールします。

3.2. CUDA Toolkitのインストール

続いて、本題となるCUDA Toolkitのインストールですが、GUIサービスを停止させてから実行します。
もしもファイルに実行権限がなかった場合はchmodで変更してください。
なお、GUIサービスが停止した後は、”Ctrl”+”Alt”+”F1″でコマンドラインモードに移行できます。

このとき、デフォルトのドライバをインストールするか尋ねられますが、”no”を選択する必要があります。
その他はデフォルトのままで、サンプルプログラムもインストールしたほうが良いと思います。
最後の行はパッチファイルのインストールです。これでGCC5.4にも対応できます。
GCCのバージョンを5.4にするためにシンボリックリンクを書き換えます。

そして.bashrcに以下のように書き加えてください。これでnvccなどのコマンドが使えます。

3.3. サンプルの実行

GPUの情報を取得できるdeviceQueryを実行してみます。

正しく実行できればひとまずCUDA Toolkitのインストールは完了です。

 

4. OpenCVのインストール

続いてOpenCVをインストールします。CMakeを使ってビルドするので、まずは以下のように必要なパッケージを揃えます。

これらのインストールが終わったらunzipでOpenCVのイントーラを展開し、展開先で以下のようにビルドを実行します。

このときIPPCVのインストールファイル(ippicv_linux_20151201.tgz)がダウンロードが失敗するため、ここからダウンロードして、opencv-3.1.0/3rdparty/ippicv/downloads/linux-xxx/の中に置きます。古いファイルは消してください。
また、ビルドを進めていくとcudalegacyのGraphCutのビルドで失敗しますが、以下のページを参考にopencv-3.1.0/module/cudalegacy/src/の中のgraphcuts.cppを書き換えました。
cudalegacy not compile — nppiGraphcut missing

ビルド終了後、再起動をします。ここで、適当なソースコードをコンパイルして動作確認しようとしましたが、

とエラーが出てしまったので、以下のようにシンボリックリンクを貼って対応しました。

なお、以下のコード(cvtest.cpp)を試しました。lenna.jpegが対応するディレクトリにある前提です。
以下のようにコンパイルします。

正しく画像が表示されれば完了です。

 

5. cuDNNのインストール

以下のように実行すれば完了です。

 

6. Caffeのインストール

ようやくCaffeをインストールする準備が整いました。
まずは以下のように必要なパッケージを揃えます。

続いて、ダウンロードしたcaffe-master.zipを展開し、その展開先に移動して以下のようにMakefike.configを作成します。

そして、それを以下のように変更します。(一部抜粋です)
cuDNNやOpenCV、Anacondaを使うためコメントを外したり、逆にコメントアウトしたりしています。

Makefile.configを編集したらPython関連の必要なソフトをインストールします。

インストール時のエラーを回避するため、以下のように実行すると良いようです。

そして展開先直下に戻り、以下のように実行してビルドします。

このとき、runtestを走らせるときにエラーが出ますが、以下のように.bashrcに記述することで正常に走らせることができました。

さらに、

と.bashrcに記述するとpythonでcaffeをimportできます。<path-to-caffe-master>は自分のインストール環境に合わせてください。

無事にインポートできればインストール完了です。

 

主に参考にしたページ