Ubuntu16.04LTで機械学習ライブラリを動かすまでを記録した.
ライブラリとしてはCaffeを選択.
Caffe
基本↑に沿ってすすめる.
http://robotics4society.com/2016/06/15/ubuntu1604-caffe/
他にも,↑も非常に参考になる.
General dependencies
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
OpenCVのインストール
まずOpenCVに関連するソフトをインストールする.
sudo apt-get install build-essential cmake git sudo apt-get install ffmpeg libopencv-dev libgtk-3-dev python-numpy python3-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libv4l-dev libtbb-dev qtbase5-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip
次に公式サイトからOpenCV3.1をダウンロードする.
http://opencv.org/downloads.html
ダウンロードしたものを解凍して,解凍したディレクトリに移動して,以下のコマンドを実行する.
unzip opencv-3.1.0.zip cd opencv-3.1.0 mkdir build cd build/ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON .. make
cmakeでビルドしたら,次は,makeを使ってインストール.
これがかなり時間かかる.
sudo make install sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf' sudo ldconfig sudo apt-get update
念のため再起動
#インストールできたか確認. pkg-config --cflags opencv pkg-config --libs opencv
(参考)
https://github.com/BVLC/caffe/wiki/Ubuntu-16.04-or-15.10-OpenCV-3.1-Installation-Guide
GPUドライバのインストール
「システム設定」->「詳細」の画面で,グラフィックの欄に正しいGPUが認識されてれば大丈夫.
私の場合はなぜかGallium 0.4 on llvmpipeというドライバを使っていた(謎)
正しくない場合は,「システム設定」->「ソフトウェアとアップデート」->「追加のドライバ」でドライバを選択し,変更の適用をする.
CUDAインストール
CUDAのインストールの際,
ubuntu16.04に対応しているのはCUDA Toolkit 8.0RCのみなので,
CUDA Toolkit 8.0RCをインストールする.
CUDA Toolkit 8.0RCダウンロード
https://developer.nvidia.com/cuda-release-candidate-download
OSやArchなどを入力し,installer typeとしてdebを落とします.
あとは
sudo dpkg -i cuda-repo-ubuntu1604-8-0-rc_8.0.27-1_amd64.deb sudo apt-get update sudo apt-get install cuda
cuDNNのインストール.
NVIDIAのサイトからcuDNNを手動でダウンロードしてくる
https://developer.nvidia.com/cudnn
tar -zxf cudnn-8.0-linux-x64-v5.0-ga.tgz sudo cp -a cuda/lib64/* /usr/local/lib/ sudo cp -a cuda/include/* /usr/local/include/ # sudo cp lib64/libcudnn* /usr/local/cuda/lib64/ # sudo cp include/cudnn.h /usr/local/cuda/include sudo ldconfig
この時点で一回rebootして,
ディスプレイがちゃんと表示されるか確認します.
残りの依存関係
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
(参考)
Ubuntu 16.04へのCUDAインストール方法 - Qiita
http://qiita.com/schwalbe1996/items/8934045b0290f895e2bd
githubからcaffeをクローン
sudo apt-get install git git clone https://github.com/BVLC/caffe.git
python pipによるインストール
同じくcaffeのディレクトリで,
cd python for req in $(cat requirements.txt); do pip install $req; done
make
「boostない」
makeすると,fatal error: boost/function.hpp...
と,boostがないと怒られる
なので,
sudo apt-get install libboost-all-dev
としてboost入れる.
「hdf5ない」
再度makeすると,今度はhdf5がないと怒られる.
sudo apt-get install libhdf5-dev
をして,
Makefile.configのINCLUDE_DIRをいじる.たとえば,↓のようにして,
hdf5のディレクトリを追記する.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
CUDAのパスを通す
makeして,nvccが見つからないと言われた.
Makefile.configの中を見ていると,
cuda toolkitをsudo apt-get install nvidia-cuda-toolkitコマンドでインストールした場合,CUDA_DIR := /usrで指定する必要があるらしい.
CUDA_DIR := /usr/local/cuda
をコメントアウトし,
CUDA_DIR := /usr
をアンコメントアウトして解決.
#CUDA_DIR := /usr/local/cuda CUDA_DIR := /usr
(参考)
http://stackoverflow.com/questions/30500977/fails-to-build-caffe-on-ubuntu-15-04
「memcpyがない」
memcpyが宣言されていないと言われた.
これはubuntu16.04にcaffeインストールするときに起きる問題らしい.
これの回避策はいくつかあって,
1. CMakefile.txtを修正する.
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
2. /usr/local/cuda/include/host_config.hのgcc versionを取り除く
3. CMakefile.txtを修正する
CXXFLAGS += -D_GLIBCXX_USE_CXX11_ABI=0
がある.私は1を選択.
Makefile,406行目を以下のように修正
#NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS) NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
(参考)
https://github.com/BVLC/caffe/issues/4046
Build caffe fails on Ubuntu 16.04 (‘memcpy’ was not declared in this scope) - eagelangel的专栏 - 博客频道 - CSDN.NET
再度「hdf5がない」
上で,Makefile.configのINCLUDE_DIRSでhdf5の場所を正しく書いているのに,
まだ,lhdf5とlhdf5_hlがないと怒られる.
hdf5のライブラリの入っている,/usr/lib/x86_64-linux-gnu/を見ると,
libhdf5.soやlibhdf5_hl.soはなくて,
代わりにそれぞれ,libhdf5_serial.soやlibhdf5_serial_hl.soになっている.
なのでそれぞれシンボリックリンクをはって,
cd /usr/lib/x86_64-linux-gnu sudo ln -s libhdf5_serial.so.10.1.0 libhdf5.so sudo ln -s libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so
(参考)
https://github.com/NVIDIA/DIGITS/issues/156
これでmakeは通るようになった.
make all make test make runtest make pycaffe