ubuntu18環境でCaffeをビルドする


概要

Ubuntu18.04環境でCaffeをビルドしたときにメモを残しておく。

このメモは、ubuntu16のCaffeビルド手順をベースにしている。
そのため、本来不要な作業も含まれているかもしれない。

errorやfailedは出ないことは確認したが、warningメッセージはいろいろ表示されていた。(今回は無視した)
なお、ちゃんと動作確認したわけではない。

主な参考サイト
https://gist.github.com/pjspillai/87625e1b6a129335eb363a4131a301f2
http://caffe.berkeleyvision.org/installation.html

PC環境

項目
CPU Core-i7 8700
GPU RTX 2080 Ti
メモリ 64GB
OS 18.04.1 LTS (Bionic Beaver)
Nvidia Driver 430.34
項目 インストール先パス
CUDA 10.0.130 /usr/local/cuda-10.0
cuDNN 7.4.2.2 $(HOME)/cudnn/cudnnv742_cuda100
Python環境 Anaconda 3.5.2(Python3.6.8) $(HOME)/anaconda/anaconda352

CUDAやcuDNN、Anacondaのインストール手順は省略。

作業項目

  • 環境変数の設定
  • openCV3のインストール
  • OSパッケージのインストール
  • Caffeソースコードの入手
  • Makefile.configの作成
  • Makefileの修正
  • CMakeLists.txtの追記
  • Caffeのビルド
  • pycaffeのビルド
  • 環境変数の設定
  • 動作確認(import確認)

環境変数の設定

ホームディレクトリ直下の.bash_profileに、anaconda/cuda/cudnn用の環境変数を追記する。
.bash_profileはなければ作成する。

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# anaconda(python3) "base" environment
export ANACONDA=$HOME/anaconda/anaconda352
export LD_LIBRARY_PATH=$ANACONDA/lib:$LD_LIBRARY_PATH
export PATH=$ANACONDA/bin:$PATH

# cuda10.0
export CUDA_HOME=/usr/local/cuda-10.0
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
export PATH=$CUDA_HOME/bin:$PATH

# cudnn7
export CUDNN=$HOME/cudnn/cudnnv742_cuda100
export LD_LIBRARY_PATH=$CUDNN/lib64:$LD_LIBRARY_PATH

openCV3のインストール

anacondaのpython環境にopenCV3をインストールする。

conda install -c menpo opencv=3

OSパッケージのインストール

公式サイトを参考に、OSパッケージをインストール(要rootまたはsudo)。

apt-get install protobuf-compiler
apt-get install libboost-all-dev
apt-get install build-essential cmake git pkg-config
apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler libatlas-base-dev libboost-all-dev libgflags-dev libgoogle-glog-dev liblmdb-dev
apt-get install python-pip
apt-get install python-dev
apt-get install python-numpy python-scipy
apt-get install python3-dev
apt-get install python3-numpy python3-scipy
apt-get install libopencv-dev

Caffeソースコードの入手

Caffe1.0のソースコードを入手する。

wget https://github.com/BVLC/caffe/archive/1.0.tar.gz

tar.gzファイルを展開する。

tar -xvf ./1.0.tar.gz

Caffeのソースコードは、ホームディレクトリに展開している(任意の場所でOK)。

$HOME/caffe-1.0

Makefile.configの作成

Makefile.configファイルをテンプレートからコピー作成し、中身を修正する。

コピー

cp Makefile.config.example Makefile.config

Makefile.configの修正(修正部分のみ抜粋)

# cuDNNを使用するのでコメントアウト
USE_CUDNN := 1

# openCV3を使用する
OPENCV_VERSION := 3

# CUDAインストールディレクトリに合わせてパスを設定する
CUDA_DIR := /usr/local/cuda-10.0

# CUDA_ARCHの2行目から有効になるように変更する
#CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
CUDA_ARCH := -gencode arch=compute_20,code=sm_21 \

# anacondaインストール先パスに合わせる
ANACONDA_HOME := $(ホーム)/anaconda/anaconda352

PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
                $(ANACONDA_HOME)/include/python3.6m \
                $(ANACONDA_HOME)/lib/python3.6/site-packages/numpy/core/include

PYTHON_LIBRARIES := boost_python-py36 python3.6m

PYTHON_LIB := $(ANACONDA_HOME)/lib

# pythonレイヤを使用する場合はコメントアウト
WITH_PYTHON_LAYER := 1

# cuDNNのパスを忘れずにセットする
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial $(ホーム)/cudnn/cudnnv742_cuda100/include

# cuDNNのパスを忘れずにセットする
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial $(ホーム)/cudnn/cudnnv742_cuda100/lib64

Makefileの修正

405行目付近のNVCCFLAGS行を修正する

NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

CMakeLists.txtの追記

CMakeLists.txtの末尾に、以下の行を追記する

# ---[ Includes
set(${CMAKE_CXX_FLAGS} "-D_FORCE_INLINES ${CMAKE_CXX_FLAGS}")

Caffeのビルド

ここからがCaffeのビルド作業。

makeの実行。末尾の数字は並列数。

make all -j12
make test -j12

テスト

make runtest -j12

こんなログが最後に表示されればOK。さすが2080Ti。めっちゃ早いな。。

[----------] Global test environment tear-down
[==========] 2101 tests from 277 test cases ran. (261658 ms total)
[  PASSED  ] 2101 tests.

※エラーが発生したら、make cleanを実行する。

make clean

pycaffeのビルド

pycaffeのmake

make pycaffe -j12

エラーになる場合には、caffe-1.0/python/requirements.txtを満たしているか確認する

自分の環境では未実施だが、念のためメモしておく(各種ライブラリのインストールコマンド)

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

環境変数の設定

.bash_profileに、PYTHONPATHの環境変数を追記する

export PYTHONPATH=$HOME/caffe-1.0/python

動作確認(import確認)

pythonを対話形式で起動して、caffeをimportする。
エラーがでなければまずは成功

import caffe

以上。
数年前の論文で、caffeのコードを使用していることがあるので、自分はまだcaffeと付き合っていかないといけないんだけど
caffeを使用している人ってもうあまりいないのかな。