1.安裝docker鏡像
sudo docker pull nvidia/cuda:9.0-cudnn7-devel-ubuntu16.04
# 創建一個cuda9.0 cudnn7 ubuntu16.04的容器,名字為caffe,同時將本機的/home/hzh目錄掛載到容器的/var/workspace下面
sudo nvidia-docker run -it -v /home/hzh:/var/workspace --name caffe nvidia/cuda:9.0-cudnn7-devel-ubuntu16.04 /bin/bash
2.配置cuda
echo 'add for cuda' >> ~/.bashrc
echo 'export PATH="/usr/local/cuda-9.0/bin:$PATH"' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH="/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH"' >> ~/.bashrc
source ~/.bashrc
3.安裝anaconda和一些庫
anconda對應python版本:

3.1 安裝anaconda
安裝Anaconda3-5.1.0-Linux-x86_64.sh,python版本為3.6,不用新建虛擬環境,可以直接安裝在/root下,安裝時選擇將bin目錄添加到PATH
另外要把lib也加到LD_LIBRARY_PATH,否則后面runtest可能會報錯
echo 'add for anaconda' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH="/root/anaconda3/lib:$LD_LIBRARY_PATH"' >> ~/.bashrc
source ~/.bashrc
3.2 安裝vim和git
apt-get update
apt-get install vim
apt-get install git
4.安裝caffe依賴庫
4.1 boost等庫
因為libboost直接用apt安裝的話好象是python2.7和3.5的版本,3.6要重新編譯再建軟連接一堆亂七八糟的,但是后來發現用conda可以直接安裝libboost1.67(對應py36),省了不少事
conda install boost hdf5 snappy leveldb lmdb gflags glog
4.2 protobuf
protobuf不在~/anaconda3/include
目錄下,而是~/anaconda3/pkgs/libprotobuf-3.5.2-h6f1eeef_0
,所以需要添加到環境變量中:
protoc --version
conda install protobuf==3.5.1
echo 'export PATH="/root/anaconda3/pkgs/libprotobuf-3.5.2-h6f1eeef_0/bin:$PATH"' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH="/root/anaconda3/pkgs/libprotobuf-3.5.2-h6f1eeef_0/lib:$LD_LIBRARY_PATH"' >> ~/.bashrc
source ~/.bashrc
protoc --version
到release頁面下載和protoc(即protobuf-cpp)版本一樣的protobuf-python,然后:
tar -xzvf protobuf-python-3.5.1.tar.gz
cd protobuf-python-3.5.1
cd python
python setup.py build
python setup.py test
python setup.py install
這樣protobuf python runtime就編譯和安裝好了
4.3 OpenBLAS
git clone https://github.com/xianyi/OpenBLAS.git
cd OpenBLAS
make FC=gfortran -j $(($(nproc) + 1))
make PREFIX=~/Openblas install # 安裝到/root下
echo 'export LD_LIBRARY_PATH="/root/Openblas/lib:$LD_LIBRARY_PATH"' >> ~/.bashrc
source ~/.bashrc
4.4 OpenCV
conda install -c menpo opencv3
安裝之后在python中import cv2會出現問題
find / -iname "cv2.cpython-36m-x86_64-linux-gnu.so" # 找到這個so文件
cp cv2.cpython-36m-x86_64-linux-gnu.so /root/anaconda3/lib/python3.6
ln -s cv2.cpython-36m-x86_64-linux-gnu.so cv2.so
此時import cv2,可能會報"ImportError: libgtk-x11-2.0.so.0: cannot open shared object file"
apt-get update
apt-get install libgtk2.0-dev
之后應該沒問題了
5.編譯caffe
git clone https://github.com/BVLC/caffe.git
cd caffe
cp Makefile.config.example Makefile.config
vi Makefile.config
修改以下地方:
USE_CUDNN := 1
前的注釋去掉OPENCV_VERSION := 3
前的注釋去掉- 把
-gencode arch=compute_20/21,code=sm_20/21
兩行刪掉 - 因為安裝的是openblas,
BLAS := atlas
改為BLAS := open
,BLAS_INCLUDE := /root/Openblas/include
,BLAS_LIB := /root/Openblas/lib
- 把
PYTHON_INCLUDE
注掉,解注ANACONDA_HOME
那幾行,同時把3.5改為3.6 - 解注釋
PYTHON_LIBRARIES := boost_python36 python3.6m
,這兩個文件在~/anaconda3/lib目錄下,名為libboost_python36.so和libpython3.6m.so,如果不是這兩個名字,相應修改,可能是libboost_python3.so等 - 解注釋
PYTHON_LIB := $(ANACONDA_HOME)/lib
- 解注釋
WITH_PYTHON_LAYER := 1
- LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu
完整的Makefile.config文件
make clean # 如果之前編譯過的話,清除掉
make all -j8
make test -j8
make runtest -j8
make pycaffe -j8
如果make時出現錯誤,找不到lib*,找不到一個依賴,用上面的find
找到它的位置,再把它的lib所在的位置添加到LD_LIBRARY_PATH
將caffe路徑添加到用戶環境變量,這樣才可以import:
echo 'export CAFFE_ROOT="/home/caffe"' >> ~/.bashrc
echo 'export PYTHONPATH="/home/caffe/python:$PYTHONPATH"' >> ~/.bashrc
source ~/.bashrc
然后打開python,輸入import caffe,沒有報錯就安裝成功了
不放心的還可以跑個mnist:
cd /home/caffe
sh data/mnist/get_mnist.sh
sh examples/mnist/create_mnist.sh
sh examples/mnist/train_lenet.sh
6.安裝ssd
直接把caffe的Makefile.config復制到ssd的目錄下make時會報以下錯誤:
...
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail::cpp_regex_traits_implementation<char>::transform_primary(char const*, char const*) const'
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail::cpp_regex_traits_implementation<char>::transform(char const*, char const*) const'
...
google查了后大概是高版本的gcc編譯時需要c++11的支持,而默認的是不帶的,所以需要重新編譯與anaconda同版本的boost,再用新編譯的lib文件替換原來的文件(不一定是最優的方案,但至少有效...)
./bootstrap.sh
./b2 toolset=gcc
./b2 install --with-python include="~/anaconda3/include/python3.6m/"
ldconfig -v
./bootstrap.sh --with-libraries=python --with-toolset=gcc
./b2 cflags='-fPIC' cxxflags='-fPIC' --with-python include="/root/anaconda3/include/python3.6m/"
cp /home/boost-1.67.0/stage/lib/* /root/anaconda3/lib/
- 下載weiliu89的caffe並切換到ssd分支
cd /home && mkdir ssd && cd ssd
git clone https://github.com/weiliu89/caffe.git
cd caffe
git checkout ssd
- 編譯
make -j8
# Make sure to include $CAFFE_ROOT/python to your PYTHONPATH.
echo 'export PYTHONPATH="/home/ssd/caffe/python:$PYTHONPATH"' >> ~/.bashrc
make py
make test -j8
未報錯即為安裝成功