Ubuntu14.04にCaffeを入れる

備忘録がてら書いていきます。

#環境
CPU:Core i7-6700
GPU:GTX 960
OS:Ubuntu 14.04 LTS （OSインストール直後)
CUDA 7.0 + cuDNN


#参考サイト
http://kivantium.hateblo.jp/entry/2015/01/03/223607
http://qiita.com/bohemian916/items/a48e6496b04bbbf09fb3
http://nonbiri-tereka.hatenablog.com/entry/2015/02/12/160811
http://ry0.github.io/blog/2015/08/12/ubuntu-nvidia-cuda-7.0/

#確認
`lspci | grep nvidia`
何も出力なし

#依存パッケージのインストール
    sudo apt-get install
    sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
    sudo apt-get install --no-install-recommends libboost-all-dev
    sudo apt-get install build-essential`
gccのバージョンを確認。

    gcc --version
    gcc (Ubuntu 4.8.4-2ubuntu1~14.04.1) 4.8.4

#CUDAのインストール
これが結構骨が折れた。
##必要ファイルのダウンロード。
CUDAのインストーラ`cuda_7.0.28_linux.run`を[ここ](https://developer.nvidia.com/cuda-toolkit-70)から、ダウンロード。バージョンはCaffeの公式サイトで推奨のCUDA7.0。
最新バージョンのグラフィックドライバ`NVIDIA-Linux-x86_64-361.42.run`を[ここ](http://www.nvidia.com/content/DriverDownload-March2009/confirmation.php?url=/XFree86/Linux-x86_64/361.42/NVIDIA-Linux-x86_64-361.42.run&lang=us&type=GeForce)よりダウンロード。

##nouveauの無効化
`sudo emacs /etc/modprobe.d/blacklist-nouveau.conf`
に、以下を記入して保存。

    blacklist nouveau
    blacklist lbm-nouveau
    options nouveau modeset=0
    alias nouveau off
    alias lbm-nouveau off
Optionを追加。

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

更新して再起動。グラフィックドライバが無効化されてる。

    sudo update-initramfs -u
    sudo reboot

#CUDAのインストール
`ctrl`+`alt`+`F1`でコンソール画面へ移動し、X-serverを一時停止。

    sudo service lightdm stop
    sudo init 3

runファイルをダウンロードしたディレクトリに移動して、
`sudo ./cuda_7.0.28_linux.run`でCUDAと一緒にドライバのインストールを試みるも、以下のエラーメッセージでドライバのインストールがうまくいかない。
"the driver installation is unable to locate the kernel source"

ググっていろいろやってみたがうまくいかない。

    sudo apt-get install linux-headers-$(uname -r)
    sudo apt-get install linux-generic
    sudo apt-get install linux-image-extra-virtual

とりあえずCUDAだけインストールしたあとで、ドライバは専用の.runファイルから別途インストールする。
`sudo ./NVIDIA-Linux-x86_64-361.42.run`
distribution-provided pre-instal script failedとか言われるけど、とりあえず実行すればあっさり。

`.bashrc`にパスを追記。

    #CUDA
    export CUDA_HOME=/usr/local/cuda-7.0
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${CUDA_HOME}/lib64
    export PATH=$PATH:${CUDA_HOME}/bin`
サンプルをmakeしてうまく動けばOK。

#cuDNNのインストール
[ここ](https://developer.nvidia.com/cudnn)からインストーラをダウンロード。
      tar -zxf cudnn-7.0-linux-x64-v4.0-prod.tgz
      cd cuda
      sudo cp include/cudnn.h /usr/local/cuda-7.0/include/
      sudo cp lib64/* /usr/local/cuda-7.0/lib64/

#BLASのインストール
    sudo apt-get install libatlas-base-dev

#その他
    sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

#Anaconda
[ここ](https://www.continuum.io/downloads)から、.shファイルをダウンロードして、実行。
自分はpython2.7の方を選びました。

#Caffe
     git clone https://github.com/BVLC/caffe
     cd caffe
     cp Makefile.config.example Makefile.config
以下をコメントアウト。

    USE_CUDNN := 1
もう一箇所。
    
    ANACONDA_HOME := $(HOME)/anaconda2
    PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
                      $(ANACONDA_HOME)/include/python2.7 \
                      $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \
makeする。

    make all -j4
    make test -j4
    make runtest -j4
pythonの依存関係をインストール。

    cd python
    for req in $(cat requirements.txt); do sudo pip install $req; done
makeする。

    cd ../
    make pycaffe

pythonからcaffeをimportできればOK。

    import caffe

PATHを追記。

    export PYTHONPATH=/home/ubuntu/Work/caffe/python:$PYTHONPATH