一、安装显卡驱动 cuda cudnn

鉴于我下载的CUDA包中自带显卡驱动,故直接安装CUDA和cudnn,安装前关闭桌面xserver和禁用nouveau,禁用这些和安装驱动请参考另一篇博客 install tensorflow,在开头讲解了安装驱动的过程。

鉴于这次实在linux mint 19上安装,其基于Ubuntu 18.04,故重新安装cuda
准备好cuda_10.0.130_410.48_linux.run,可以到官网下载

sudo chmod a+x cuda_10.0.130_410.48_linux.run

sudo sh ./cuda_10.0.130_410.48_linux.run

除了以下两项选择了no,其他都选择yes和默认目录
no

安装完成后注意环境变量
PATH

CUDA_HOME=/usr/local/cuda-10.0
LD_LIBRARY_PATH=$CUDA_HOME/lib64
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:$CUDA_HOME/bin"

到官网下载对应18.04的cuDNN安装

sudo dpkg -i libcudnn7_7.3.1.20-1+cuda10.0_amd64.deb
sudo dpkg -i libcudnn7-dev_7.3.1.20-1+cuda10.0_amd64.deb
sudo dpkg -i libcudnn7-doc_7.3.1.20-1+cuda10.0_amd64.deb

验证是否安装成功,可以参考install tensorflow前半部分,注意安装g++等。

补充:安装opencv
首先要把opencv卸载干净
ubuntu会预装一个libopencv,也要卸载,不然之后caffe运行可能报错。
可以参考:彻底卸载opencv
然后编译运行opencv

二、安装caffe

采用源码编译安装的方法,到github上下载源码,编译之前在环境变量中加入库文件路径。

LD_LIBRARY_PATH=$CUDA_HOME/lib64:/usr/lib/x86_64-linux-gnu:/lib/x86_64-linux-gnu

使其生效

source /etc/environment

在github上下载的zip,解压后进入caffe-master编译。

cp Makefile.config.example Makefile.config
make all
make test
make runtest

编译过程遇到错误:
错误1:

fatal error: cblas.h: No such file or directory

安装atlas

sudo apt-get install libatlas-base-dev

错误2:

fatal error: hdf5.h: No such file or directory

安装hdf5,去官网下载,不过官网较慢,可以在国内网站找压缩包。本文使用hdf5-1.10.4。
解压后编译安装

tar -zxvf hdf5-1.10.4.tar.gz
cd hdf5-1.10.4/
mkdir build
cd build
sudo cmake -j80 …
sudo make
sudo make install

其中80是cpu的核心数,可以加快速度,酌情更改。
编译安装完成后可以发现hdf5.h的存放目录为/usr/local/HDF_Group/HDF5/1.10.4/include/hdf5.h,将其加入环境变量

后来发现之前装过hdf5,只是需要将其指定在makefile.config中,在其中加入:

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include usr/include/hdf5/serial/  
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial/

如果还有错误,请参照这里

错误3:

libcaffe.so: undefined reference to `cv::imread(cv::String const&, int)'

更改makefile.config

USE_CUDNN :=1
WITH_PYTHON_LAYER := 1
OPENCV_VERSION :=3

还有应该去除以下前两行

去除

解决错误后重新编译caffe

sudo make -j80 all
make -j80 test
make -j80 runtest

make -j80 runtest这一步遇到问题4:

.build_release/tools/caffe: error while loading shared libraries: libcudart.so.10.0: cannot open shared object file: No such file or directory

解决:
在/etc/ld.so.conf.d目录下创建cuda.conf,写入cuda路径

/usr/local/cuda/lib64

更新缓存

sudo ldconfig

问题5:
error while loading shared libraries: libprotobuf.so.18
解决:找到这个文件,拷贝到环境变量配置过的地方,比如/usr/local/lib

重新运行

make -j80 runtest

如果结果全部是OK,则安装成功。
OK

如果遇到undefined symbol:
_ZN2cv8imencodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_11_InputArrayERSt6vectorIhSaIhEERKSB_IiSaIiEE错误。
那么尝试在Makefile中更改。
ifeq ($(DEBUG), 1)
COMMON_FLAGS += -DDEBUG -g -O0
NVCCFLAGS += -G
else
COMMON_FLAGS += -DNDEBUG -O2
endif

改为:

ifeq ($(DEBUG), 1)
    COMMON_FLAGS += -DDEBUG -g -O0
    NVCCFLAGS += -G
else
    COMMON_FLAGS += -DNDEBUG -O2
    NVCCFLAGS += -G
endif

然后检查opencv是否同时安装了多个版本,应该值保留一个。

如果要提供python接口

make pycaffe

然后将…/caffe/python添加到PYTHONPATH
然后再python命令行运行import caffe 测试
如果遇到
问题:

can not find module skimage.io

解决:

sudo apt-get install python-numpy python-scipy python-matplotlib python-sklearn python-skimage python-h5py python-protobuf python-leveldb python-networkx python-nose python-pandas python-gflags Cython ipython
sudo apt-get update
make pycaffe