Caffe(本家サイト版)をインストールして試してみる

(2015/12一部改訂)
Caffeはインストールが面倒ということで有名です.面倒だけならまだしも、すでに環境構築済みのマシンにインストールしようとするとソフトの依存関係に問題があるのかインストールに失敗することがあります下手したら延々インストールに時間を費やした挙句,結局インストールできなかったということになります.そこで可能であればOSをクリーンインストールして直後にCaffeをインストールすることをおすすめしますこれならインストールは素直に進みます.以下は、その作業の記録です


前提条件
 Ubuntu 14.04.2 (日本語Remix14.04インストール後,アップデート)※クリーンインストール
 GPU使用(下記ではTITAN)
 (GPU+cuDNN+OpenBLASという組み合わせでのCaffeインストール手順)


1.Caffeのインストール
 下記のサイトおよび本家サイトを参考にしました.
 Caffeインストール - RupyWiki
 Caffe | Installation

 

   現在使用されているビデオドライバは,
   右上のギアのアイコンから、[システム設定]-[ソフトウェアとアップデート]
   を選択し,「追加のドライバー」のタブをクリックすることで確認できます.
   デフォルトでは,Nouveau ディスプレイドライバが使用されています.

f:id:eiji-kb:20150715021133p:plain


   ドライバのインストールのポイントとして以下の2点が言われています.
   ・デフォルトで稼働している nouveau ドライバを無効にする.
   ・ドライバインストールはCUIモードで行なう.

   なお細かい話ですが,
   CUIモードでは日本語が表示されません.◆に文字化けして表示されます.
   「ダウンロード」などの日本語フォルダ名は文字化けして判別できなくなります.

   そこで対策の一つしては,あらかじめホームディレクトリの日本語フォルダ名を英語
   に変更しておく方法があります.

   手順は下記参照.
   Ubuntuでホームディレクトリの中身を英語にする - Qiita

   
   もしくは,フォルダ名を日本語のままにしておきたい場合は,ダウンロードしたドライバを
   一段上のホームディレクトリに移動しておけばよいです.(以下説明はこれを前提とします)

    1)TITANのドライバをNVIDIAドライバダウンロードから入手します.
    TITAN(無印,Black,Z)であれば,以下のように選択.
    (各自所有のグラボに合わせる)

    f:id:eiji-kb:20150727113247p:plain

    [検索]をクリックする.下記はTITANの例.

    f:id:eiji-kb:20150727113543p:plain

    ダウンロードする.

   2)nouveau ドライバの無効化,ドライバのインストール

    (参考サイト)
   How to Install NVIDIA 346.35 Stable Driver in Ubuntu 14.04 | UbuntuHandbook
   Remove nouveau and install nvidia Driver in Ubuntu 15.04 | allaboutlinux.eu
   nvidiaのdriverをインストール(ubuntu) - mikemoke blog
   Ubuntu に最新の NVIDIA Driver をインストールする。 - ZONDEEL BLOG


   上記のサイトを参考にしながら,実際に設定した内容を以下に記します.

   2-1. Ctrl+Alt+T で端末を開きます.
   2-2. 以下のコマンドで既存のドライバを削除します.
     (OSクリーンインストールの場合削除0個と出ます)

sudo apt-get remove nvidia*
sudo apt-get autoremove

   2-3. nouveauドライバの無効化ファイル編集のため,エディタを起動します.

sudo gedit /etc/modprobe.d/blacklist-nouveau.conf

     そして開いたファイルに下記の内容を貼り付け,保存します.

blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off

   2-4. 以下のコマンドを入力して,nouveauを無効化します.

echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf
sudo update-initramfs -u

   
   2-5. マシンを再起動します.

   2-6. 再起動後Ubuntuにログインし,
     Ctrl + Alt + F1
     を押し,CUIを起動します.
   
   2-7. CUI画面から,ユーザIDとパスワードを入力してログインします.
   
   2-8. GUIサービスデーモンを停止します.

sudo service lightdm stop

 
   2-9. インストーラの実行権限を変更します.

sudo chmod 755 NVIDIA-Linux-x86_64-352.63.run


   2-10. インストーラを実行します.

sudo ./NVIDIA-Linux-x86_64-352.63.run

 
   2-11. ライセンス同意確認が表示されますので内容を確認し同意したら,[Accept]を選択します.

f:id:eiji-kb:20150720183132j:plain

   2-12. 私の環境ではプレインストールスクリプトが失敗したと表示されました.
     そのまま[Continue installaton]を選択して次に進みます.
f:id:eiji-kb:20150719040245j:plain

    2-13. UEFIのセキュリティーブートのためにNVIDA Kernel moduleを署名するか
     尋ねてきます.ここは[Install without signing]を選択しました.

f:id:eiji-kb:20150719040613j:plain

   2-14. 32bit互換ライブラリのインストール先を見つけることができませんと警告が出ます.
      そのまま[OK]を押します.(2015/12追記 最新バージョンでは32bitライブラリを導入するか聞いてくるようです。いずれにせよ導入しません)

f:id:eiji-kb:20150727115725p:plain

   2-15. libvdpau ライブラリについての紹介が表示されます.[OK]を押します.

f:id:eiji-kb:20150719042219j:plain

   2-16. NVIDIA XドライバをXconfigurationに反映させるか尋ねてきます.
      [Yes]を選択しました.

f:id:eiji-kb:20150719042705j:plain

    2-17. Xconfigurationの更新とNVIDIAドライバのインストールが成功したと表示されます.
      [OK]を押します.

f:id:eiji-kb:20150719043427j:plain

    2-18. 以上でドライバのインストールは終了です.
        機械を再起動します.
   
   起動後,ドライバを確認すると,以下の画面となります.
   (ドライバがNouveau から,手動インストールされたドライバになる)

f:id:eiji-kb:20150719043648p:plain

   ドライバインストール後は,
   Ubuntu起動時にNVIDIAのロゴが一瞬表示されるようになります.
 

  (2)CUDAのインストール
    (参考サイト)
    Getting Started Linux :: CUDA Toolkit Documentation
    Ubuntu14.04 ServerでCUDA 6.5.14の環境を整える

   1)CUDA7をCUDA 7 Downloadsから入手します.
    [Linux x86]のタブを選択します.
    RUNFILEでのインストールを行いますのでRUNを選択します.

f:id:eiji-kb:20150716041721p:plain

    ダウンロードした cuda_7.0.28_linux.run は
    コンソールでインストールを行いますので,
    ダウンロードフォルダから一段上のホームディレクトリへ移動しておきます.

   2)RUNFILEでインストールのため,
    テキストモード(ランレベル3)でマシンを再起動します.
    ググったところ方法はいくつかありますが,
    ここでは起動時のGRUBメニューから起動オプションを追加して起動する方法で説明します.
     
    2-1. マシンを再起動します.
     GRUBメニューが表示されたら,Ubuntuが選択された状態で「e」キーを押します.

f:id:eiji-kb:20150722044730j:plain

テキストモード(ランレベル3)に再起動します。
テキストモード(ランレベル3)に再起動します。

      2-2. ”linux"行に起動オプションを追加します.
     "splash"の次に,” text 3 "(テキストモード,ランレベル3)と追記します.
     下記は追記した後の写真です.
     (この変更は一過性のもので,今回ブートのみ有効です
      次回ブート時は,追記内容は消去されます)

     追記後,[F10]キーを押して,再ブートします.

f:id:eiji-kb:20150727124847j:plain

      2-3. 念のため,ログイン後,
      ”runlevel"コマンドでランレベルが3となっているか確認しました.

      f:id:eiji-kb:20150727120801p:plain

     2-4. CUDAのインストーラは,NVIDIAビデオドライバが含まれていますが.
      (1)で既に最新バージョンをインストールしていますので不要です.
      そこでCUDAtoolkitとサンプルを個別にインストールするために,
      それ専用のインストーラを生成します.

      最初に,インストーラの実行権限を変更します.

sudo chmod 755 cuda_7.0.28_linux.run

    2-5. インストーラを生成するため-extractオプションを付けて実行します.

sudo ./cuda_7.0.28_linux.run -extract=$HOME/nvidia_install

    オプションで指定したフォルダにドライバとツールキットとサンプルのインストーラが生成されます.

    2-7. 生成先フォルダに移動します.

cd nvidia_install

     2-8. Cudaのインストーラを実行します.

sudo ./cuda-linux64-rel-7.0.28-19326674.run

     2-9. EULAが表示されます.スペースキーで進んでください.
      最後にオプションを聞いてきます下記のとおり入力しました.

        ・ソフトウェア使用許諾(EULA): accept
        ・インストールパス:[Enter] (デフォルト)
        ・デスクトップメニューショートカットの作成:[Enter] (デフォルト)
        ・シンボリックリンクの作成:[Enter] (デフォルト)

f:id:eiji-kb:20150722044045j:plain

      「Installation Complete」と表示されたら,インストール終了です.

     2-10. 引き続きサンプルのインストーラを実行します.
      先のツールキットのインストールと似たような手順です.

sudo ./cuda-samples-linux-7.0.28-19326674.run 

       インストーラのオプションは次のとおり入力しました.

        ・ソフトウェア使用許諾(EULA): accept
        ・インストールパス:[Enter] (デフォルト)

    f:id:eiji-kb:20150722044206j:plain

     2-11. 次に "Enter CUDA install path [default is /usr/local/cuda-7.0]"
      と表示されるので,確認して[Enter]を押します.

      「Installation Complete」と表示されたら,インストール終了です.
      ここでUbnuntuを再起動しました.
      また,インストールフォルダは作業完了後にでも削除してください.

   3) Pathの設定
    3-1. エディタで .profile にパスを追記します.

gedit .profile

    3-2. 下記を末尾に追加し,保存しました.

export PATH=$PATH:/usr/local/cuda-7.0/bin
export LD_LIBRARY_PATH=/usr/local/cuda-7.0/lib64:$LD_LIBRARY_PATH
export CUDA_ROOT=/usr/local/cuda-7.0/bin

    3-3. パスを反映させます.

source ~/.profile


   4)g++のインストール

    CUDAのサンプルをmakeしようとしたところ,
    g++が入っていないと言われましたので,インストールしました.
    (サンプルのmakeはCUDAのインストール確認のため行いました.これは
     Caffeインストールにあたっての必須事項ではないため,詳細は割愛します)     

sudo apt-get install g++


  (3)cuDNNのインストール
   (参考サイト)
   cuDNNインストール - RupyWiki


   cuDNNを使用した方が処理速度が速くなるとのことでインストールしました.
   なおダウンロードにはアカウント登録が必要です.
   (これは個人的に前おこなったので説明は割愛させていただきます...)

   1)NVIDIA cuDNN – GPU Accelerated Deep Learning
    から,cuDNN v2 Library for Linuxをダウンロードしました.
    そのほか,Users Guide や Code Sampleもダウンロードしておきました.

f:id:eiji-kb:20150723190913p:plain

   2)Downloadsフォルダに解凍します.
    そのあと,/usr/local フォルダに移動します.

sudo cp -r cudnn-6.5-linux-x64-v2 /usr/local/

   3)エディタで .profile にパスを追記します.

gedit .profile

   4)下記を末尾に追加し,保存しました.

export LD_LIBRARY_PATH=/usr/local/cudnn-6.5-linux-x64-v2:$LD_LIBRARY_PATH

   5)インクルードファイルやライブラリファイルを必要な場所にコピーします.

cd /usr/local/cudnn-6.5-linux-x64-v2
sudo cp cudnn.h /usr/local/cuda-7.0/include
sudo cp libcudnn* /usr/local/cuda-7.0/lib64

 

  (4) BLASのインストール
    OpenBLAS,ATLAS,IntelMKLから選択できますが,
   パフォーマンスが良いOpenBLASをインストールしました.
   IntelMKLは商用なので避けました.
   (参考)
   Easy Installation of an Optimized Theano on Current Ubuntu — Theano 0.7 documentation


    1)gitが入っていないので,インストールします.

sudo apt-get install git

    2)コンパイルFORTRANが必要なので,インストールします.

sudo apt-get install gfortran

    3)gitでOpenBLASを入手します.

git clone https://github.com/xianyi/OpenBLAS

    4) ダウンロード後,makeします.

cd OpenBLAS
make FC=gfortran

    下記が表示されます.
f:id:eiji-kb:20150723202441p:plain

   5)つづけて,下記を入力します.

sudo make PREFIX=/usr/local install

     下記が表示されたら終了です.

f:id:eiji-kb:20150723202707p:plain



  (4)その他の依存関係ソフトのインストール.
   (1)のサイトを参考.

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler


  (5)Caffe本体のインストール
   1)gitでCaffeを入手します.

git clone https://github.com/BVLC/caffe.git

   2)python関係のライブラリ(numpy,cpython等requirements.txts参照)をインストール
    しますが,まずpipがインストールされていないのでそれからインストール.

sudo apt-get install python-pip

   3)caffe/pythonディレクトリに移動し(1行目),pip実行(2行目).

cd caffe/python
for req in $(cat requirements.txt); do sudo pip install $req; done

   4)Caffeフォルダへ移動し,Makefile.configファイルをひな形からコピーし,
    コピーしたファイルをエディタで開きます.

cd ..
cp Makefile.config.example Makefile.config
gedit Makefile.config

   5)エディタで開いたファイルに以下の通り変更を加えます.
    (左側数字:は行番号ですので無視してください)

    5-1. CuDNN使用のためコメント(#)をはずします

5: USE_CUDNN := 1

    5-2. OpenBLASを指定.
      そしてOpenBLASのインクルードファイルとライブラリフォルダを指定.

46: BLAS := open

50: BLAS_INCLUDE := /usr/local/include
51: BLAS_LIB := /usr/local/lib

    5-3. 以上の修正が終了したらファイルを保存してエディタを閉じ,
      make実行.

make all
make test

      ちなみに自分の環境で処理時間はmake allで7〜8分,make testで4分程度だった.
      (わざわざマルチコアではコンパイルしませんでした)

    5-4. 以下を入力し,

make runtest

      下記のように[PASSED]と表示されることを確認.

f:id:eiji-kb:20160102102055p:plain

 

  (5)PyCaffeの設定

   1)python-numpyをインストール

sudo apt-get install python-numpy

   2)pyCaffeをmake.

make pycaffe

   3)パス追加のため,ホームディレクトリに移動後、エディタ起動

gedit .profile

   4)末尾に,以下を追加

export PYTHONPATH=$HOME/caffe/python:$PYTHONPATH 

   5)パスを反映させます.

source ~/.profile

 

   以上で作業は終了です.
   次のチュートリアルが動くことを確認して,とりあえずインストール終了としました.


2.Caffeを試してみる
 ネット上ではいろいろチュートリアルがあります.
 今回,下記で試しました.

 ・葉月ちゃんでも出来るDeep learning
  http://files.sig2d.org/sig2d14.pdf
 これは日本語で書かれており,Caffeでの処理の概要を掴むのに良いです.

 なお本文を試していて見落としがちなのは,
 >学習用および判別用の両方のネットワーク定義を変更するのを忘れないこと.
 と書いてあるところです.
 つまり cifar10_quick_train_test.prototxt の num_output の変更と共に,
 cifar10_quick.prototxt の num_output も同じ数に変更します.


3.CNNについて

 Deep learningの本として,下記の本が有名ですが、説明がわかりやすく,おすすめします.


 また上の本のCNNの章をスライドで説明されたのが以下です.
 これはスライドのアニメーション的な動きが,直感的な理解を助けてくれます.
  

      

www.slideshare.net



4.謝辞
 インストールにあたってはほぼ他のサイトを参考にしました.感謝いたします

 

(自分用備忘)
Linuxインストール時,内蔵グラフィックにモニタを接続して導入すると,後で内蔵グラフィックと外付グラボの切り替えが問題なくできる(外付グラボに接続してインストールすると,内蔵グラフィックにモニタを接続しても,うまく表示しなかった)

手順(順序とタイミングに注意して行う)
1.UEFIで,内蔵グラフィック(IDG)を選択しておく.
 (1)起動時画面で,[DEL]キー押下し,UEFI起動.
 (2)左ペインの[SETTING]をクリック
   [Advanced]-[Integrated Graphics Configuration]を選択
  Initiate Graphic Adapterを,[IDG]に変更
  左ペインの[SETTING]をクリックTOPメニューに戻り,Save & Exitを選択
  Save Changes and Rebootを選択し,再起動.
2.内蔵GPUのポートにモニタを接続
3.Linux導入
4.導入終了後、再起動時,UEFIを立ち上げ,PEGに変更する.
 (1)起動時画面で,[DEL]キー押下し,UEFI起動.
 (2)左ペインの[SETTING]をクリック
   [Advanced]-[Integrated Graphics Configuration]を選択
  Initiate Graphic Adapterを,[IDG]に変更
  左ペインの[SETTING]をクリックしTOPメニューに戻り,Save & Exitを選択
  Save Changes and Rebootを選択し,再起動.
5.再起動時,すばやく外付グラボのポートにモニタを接続する.
6.外付グラボのドライバをインストール(上記参照)



NVIDIAのドライバインストールについて
下記のような簡便な手順でドライバはインストールできるが、これではどうもディープラーニングフレームワーク側での処理がうまくなされない。TensorFlowでは、GPUでの処理がうまくできない(GPUのメモリ確保してない、処理低速、結局CPUで稼働?)。また、Caffeのインストール(make)にも失敗する。

 

 (1)NVIDIAビデオドライバのインストール(2015/12改訂)
   Nouveauの無効化など関係なく,簡単にインストールできたので改訂.

   (このインストール方法じゃ、GPUで処理がきちんとされなかった。よって削除)

   右上のギアのアイコンから、[システム設定]-[ソフトウェアとアップデート]
   を選択し,「追加のドライバー」のタブをクリック.
   デフォルトでは,X.Org Xerver -Nouveau… ディスプレイドライバが選択されているが,
   NVIDIA binary driver…nvidia-352...(プロプライエタリ,検証済み)を選択する.
   [変更の適用]をクリック.

f:id:eiji-kb:20151220104200p:plain

   右下にオレンジのプログレスバーが表示されるので,しばらく待つ.

f:id:eiji-kb:20151220104834p:plain

   適用後,再起動した.これでOK.

 

352というのは,Titanのドライバのバージョン番号.この番号はNVIDIAドライバダウンロードから自分のグラボを検索すると判る.今回グラボを取り付けた状態でLinuxを導入したため,最初からグラボを認識して,上のように親切に出てきてくれたものと考えられる.

※※以下の方法でもインストールできる.これも4行で済むので簡単.
以下のサイトからの情報.

(※リンク先削除)

sudo add-apt-repository ppa:xorg-edgers/ppa
sudo apt-get update
apt-cache search 'nvidia-[0-9]+$'
sudo apt-get install nvidia-352

352以外もインストール可.(バージョンは3行目実行後,画面に表示される)

 

 

テキストモード(ランレベル3)に再起動します。
テキストモード(ランレベル3)に再起動します。