Caffe安装
一、电脑配置
系统:Ubuntu16.04(64-bit)
处理器:Intel® Core™ i7-6700 CPU @ 3.40GHz × 8
图像处理器:NVIDIA 2080 Ti
内存:8GB
二、安装过程
1.安装相关依赖项
$ 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 libopenblas-dev liblapack-dev libatlas-base-dev
$ sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
2.安装NVIDIA驱动
(1)查询NVIDIA驱动
首先去官网(http://www.nvidia.com/Download/index.aspx?lang=en-us)查看适合自己显卡的驱动并下载:
驱动文件后缀名应当是以.run结尾的。我们要把这个文件移动到家目录下,原因是下面我们要切换到文字界面下,如果放到~/下载 下面,我们没有办法进入下载这个目录(没有中文输入法,且中文全部是乱码)
图1 输入显卡型号
图2 显卡驱动搜索结果
(2)安装驱动
在终端下输入: sudo gedit /etc/modprobe.d/blacklist.conf
输入密码后在最后一行加上 blacklist nouveau . 这里是将Ubuntu自带的显卡驱动加入黑名单。
在终端输入: sudo update-initramfs -u
重启电脑
这里要尤其注意,安装显卡驱动要先切换到文字界面,(按Ctrl+Alt+F1~F6).所以,启动电脑后,先进入文字界面。
然后,输入命令 sudo service lightdm stop
现在可以安装驱动了,先进入家目录cd ~,然后: sudo./NVIDIA-Linux-x86_64-435.21.run,按照提示一步步来~
完成后,再次重启电脑。
安装完成之后输入以下指令进行验证: sudo nvidia-smi ,若列出了GPU的信息列表则表示驱动安装成功。如下图:
3.安装CUDA
CUDA是NVIDIA的编程语言平台,想使用GPU就必须要使用cuda。
(1)下载CUDA
首先在官网上(https://developer.nvidia.com/cuda-toolkit-archive)下载CUDA:
(2)下载完成后执行以下命令:
$ sudo chmod 777 cuda_10.0.131_410.48_linux.run
$ sudo ./cuda_10.0.131_410.48_linux.run
注意:执行后会有一系列提示让你确认,但是注意,有个让你选择是否安装nvidia367驱动时,一定要选择否:
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 367.48?
因为前面我们已经安装了更加新的nvidia367,所以这里不要选择安装。其余的都直接默认或者选择是即可。
(3)环境变量配置
打开~/.bashrc文件: sudo gedit ~/.bashrc将以下内容写入到~/.bashrc尾部:
export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
(4)测试CUDA的samples
$ cd /usr/local/cuda-10.0/samples/1_Utilities/deviceQuery
$ sudo make
$ sudo./deviceQuery
如果显示一些关于GPU的信息,则说明安装成功。
4.配置cuDNN
cuDNN是GPU加速计算深层神经网络的库。
首先去官网(https://developer.nvidia.com/rdp/cudnn-download)下载cuDNN,需要注册一个账号才能下载。下载版本号如下图:
下载cudnn-10.0-linux-x64-v7.5.1.10.solitairetheme8之后进行解压:
sudo tar -zxvf ./cudnn-10.0-linux-x64-v7.5.1.10.solitairetheme8
解压完成之后在命令行进行如下操作:
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
之后执行 cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
若显示以下内容表明安装成功
5.安装protobuf
caffe的layer开发以google的protobuf为格式,需要安装该依赖,推荐安装2.6.1版本(gcc版本推荐4.4.7),下载地址为https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz,按照README文件里的步骤安装即可。
安装步骤概括如下:
#tar zxvfprotobuf-2.6.1.tar.gz
#cd protobuf-2.6.1
#./configure
#make
#make check
#make install
继续安装protobuf的python模块(如果不用python,可跳过这一步)
sudo apt-get install python-protobuf
6.安装opencv3.X
从官网(http://opencv.org/downloads.html)下载Opencv,并将其解压到你要安装的位置,假设解压到了/home/opencv。
1 unzip opencv-3.1.0.zip
2 sudo cp ./opencv-3.1.0 /home
3 sudo mv opencv-3.1.0 opencv
安装前准备,创建编译文件夹:
cd ~/opencv
mkdir build
cd build
配置:
1 sudo apt installcmake
2 sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
编译:
sudo make -j8
-j8表示并行计算,根据自己电脑的配置进行设置,配置比较低的电脑可以将数字改小或不使用,直接输make。
可能出现问题:
这是因为opecv3.0与cuda8.0不兼容导致的。解决办法:修改 ~/opencv/modules/cudalegacy/src/graphcuts.cpp文件内容,如图:
其中, #if !defined
(HAVE_CUDA) || defined (CUDA_DISABLER)||(CUDART_VERSION>=8000) 是我们修改的。
以上只是将opencv编译成功,还没将opencv安装,需要运行下面指令进行安装:
sudo make install
7.配置caffe
(1) 使用Git直接下载Caffe非常简单,或者去https://github.com/chuanqi305/ssd.git下载。由于我习惯去github上找代码,所以就直接去下载的源码。
git clone https://github.com/chuanqi305/ssd.git
下载完成后,重命名为caffe.
(2)因为make指令只能make Makefile.config文件,而Makefile.config.example是caffe给出的makefile例子,因此,首先将Makefile.config.example的内容复制到Makefile.config: sudo cp Makefile.config.example
Makefile.config
(3) 打开并修改配置文件:sudo gedit
Makefile.config #打开Makefile.config文件 根据个人情况修改文件:
a.若使用cudnn,则将
#USE_CUDNN := 1
修改成:
USE_CUDNN := 1
b.若使用的opencv版本是3的,则将
#OPENCV_VERSION := 3
修改为:
OPENCV_VERSION := 3
c.若要使用python来编写layer,则将#WITH_PYTHON_LAYER := 1 修改为WITH_PYTHON_LAYER := 1
d.适配CUDA版本
根据CUDA版本将
-gencode arch=compute_20,code=sm_20 \
-gencode arch=compute_20,code=sm_21\
修改为:
#gencode arch=compute_20,code=sm_20 \
#gencode arch=compute_20,code=sm_21\
e.重要的一项
将# Whatever else you find you need goes here.下面的
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改为:
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/usr/lib/x86_64-linux-gnu/hdf5/serial
这是因为ubuntu16.04的文件包含位置发生了变化,尤其是需要用到的hdf5的位置,所以需要更改这一路径.
(4)修改makefile文件打开makefile文件,做如下修改:
将:NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC
$(COMMON_FLAGS)
将:LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
替换为:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
(5)编译
make all -j8 #-j根据自己电脑配置决定
编译过程中可能会出现如下错误:
错误内容1:
"fatal error: hdf5.h: 没有那个文件或目录"
解决办法:
step1: 在Makefile.config文件的第85行,添加/usr/include/hdf5/serial/到INCLUDE_DIRS,也就是把下面第一行代码改为第二行代码。将:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
替换为:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
stept2: 在Makefile文件的第173行,把hdf5_hl 和hdf5修改为hdf5_serial_hl和hdf5_serial,也就是把下面第一行代码改为第二行代码。将:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
改为:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem mhdf5_serial_hl hdf5_serial
错误内容2:
"libcudnn.so.5 cannot open shared object file: No such file ordirectory"
解决办法是将一些文件复制到/usr/local/lib文件夹下:
#注意自己CUDA的版本号!
1 sudo cp/usr/local/cuda-8.0/lib64/libcudart.so.8.0 /usr/local/lib/libcudart.so.8.0 && sudoldconfig
2 sudo cp/usr/local/cuda-8.0/lib64/libcublas.so.8.0 /usr/local/lib/libcublas.so.8.0 && sudoldconfig
3 sudo cp/usr/local/cuda-8.0/lib64/libcurand.so.8.0 /usr/local/lib/libcurand.so.8.0 && sudoldconfig
4 sudo cp/usr/local/cuda-8.0/lib64/libcudnn.so.5 /usr/local/lib/libcudnn.so.5 && sudoldconfig
(6)编译pycaffe
首先编译pycaffe :
make pycaffe -j8
以下是我编译 pycaffe 时出现的错误:
python /caffe/_caffe.cpp:10:31:fatal error: numpy/arrayobject.h: 没有那个文件或目录
解决方法:
sudo apt-get install python-numpy
此外也可能是由于 Makefile.config 文件中 python 路径设置错误出现的错误。
编译pycaffe 成功后,添加环境变量
export PYTHONPATH=
验证一下是否可以在 python 中导入 caffe 包,首先进入 python 环境:
python
然后导入caffe :
>>> import caffe
若不报错则表示 caffe 的 python 接口已正确编译,但是应该不会那么顺利,以下是我导入 caffe 时出现的错误:
错误1:
File "",line 1, in ImportError:No module named caffe
解决方法:
sudo echo export
PYTHONPATH="~/caffe/python" >> ~/.bashrc
source ~/.bashrc
错误2:
ImportError: No module named skimage.io
解决方法:
pip install -U scikit-image #若没有安装pip: sudo apt install python-pip
(7)修改.bashrc文件
PYTHONPATH=${HOME}/caffe/python:$PYTHONPATH
LD_LIBRARY_PATH=${HOME}/caffe/build/lib:$LD_LIBRARY_PATH
(8)测试
sudo make runtest
如果运行之后出现下图,说明caffe配置成功。
到此caffe配置完毕!