Caffe安装教程(Ubuntu16.04+GTX 980+CUDA9.1+Python3.5+Caffe)

基本依赖项:

$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 update
然后再次尝试。

CUDA9.1安装:

NVIDIA驱动安装:

安装CUDA之前需要先根据显卡下载驱动,注意,CUDA9.1要求驱动版本为R390,我使用的显卡是NVIDIA GEFORCE GTX 980,去NVIDIA官网下载驱动:


390.42版本的驱动,安装之后会出现分辨率自动设为大概800x600,无法调整的问题,最终选择使用390.25驱动NVIDIA-Linux-x86_64-390.25.run

首先将系统默认驱动nouveau加入黑名单:

$sudo gedit /etc/modprobe.d/blacklist.conf

gedit打开blacklist.conf后在最后一行添加以下然后保存:

$sudo update-initramfs -u 

然后重启电脑:

$shutdown -r now

开机后,按ctrl + alt + f1 进入纯命令行界面,然后输入以下关闭桌面显示环境管理器:

$sudo service lightdm stop

进入到你的驱动下载路径,安装驱动:

$sudo chomod +x NVIDIA-Linux-x86_64-390.25.run
$sudo ./NVIDIA-Linux-x86_64-390.25.run -no-x-check -no-nouveau-check -no-opengl-files

按提示一步一步安装,注意其中有一步询问是否更改x-config文件,选择yes.

安装结束后,输入如下命令检验:

$sudo nvidia-smi

如果显示当前GPU的驱动等信息,则驱动安装成功。

CUDA安装:


根据我的系统,按如上做了选择,我选择runfile(local)进行安装。在下载.run文件时,最开始可能是因为网络原因,导致一直.run文件下载完成但是大小都不对,导致后面的安装无法正常进行,所以读者在这一步时一定要看好自己下载的文件的大小是否正确。

然后按上面所说,进入你的.run文件的下载路径,输入以下指令:

$sudo sh cuda_9.1.85_387.26_linux.run

然后按提示来进行安装,以下是我的安装界面和选择:


因为我们之前已经安装过驱动,所以在询问是否安装CUDA自带驱动时选择no


以上时安装完成界面给的一些提示,其中要求我们做一些额外的设置path等工作:

$sudo gedit ~/.bashrc

在.bashrc文件最后添加:

# for cuda install
export PATH=/usr/local/cuda-9.1/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

执行命令:

sudo gedit /etc/profile

在profile文件最后添加:

# for cuda install
PATH=/usr/local/cuda-9.1/bin:$PATH
export PATH

然后执行:

$source /etc/profile 
$sudo gedit /etc/ld.so.conf.d/cuda.conf

在cuda.conf文件最后添加:

/usr/local/cuda-9.1/lib64

执行命令使生效

$sudo ldconfig

测试CUDA的samples:

$cd /usr/local/cuda-9.1/samples/1_Utilities/deviceQuery
$sudo make 
$sudo ./deviceQuery
看到一些关于GPU的信息,则CUDA安装成功。

cuDNN 安装:

cuDNN官网https://developer.nvidia.com/cudnn,cuDNN(CUDA Deep Neural Network)相比标准的CUDA,它在一些常用的神经网络操作上进行了性能的优化,比如卷积,pooling,归一化,以及激活层等等。

下载前需要先进行注册登录(可能需要翻墙不然总是会卡在登录界面),然后进入下载界面:


基于我的系统是Ubuntu16.04,所以选择红框内的三个deb文件进行安装,首先进入你的deb文件下载目录:

安装runtime library:

$sudo dpkg -i libcudnn7_7.0.3.11-1+cuda9.0_amd64.deb

安装developer library:

$sudo dpkg -i libcudnn7-dev_7.0.3.11-1+cuda9.0_amd64.deb

安装code examples 和 user guide:

$sudo dpkg -i libcudnn7-doc_7.0.3.11-1+cuda9.0_amd64.deb

然后我们进行测试cuDNN是否正确安装,编译/usr/src/cudnn_samples_v7路径下的mnistCUDNN示例:

$cp -r /usr/src/cudnn_samples_v7/ $HOME
$cd  $HOME/cudnn_samples_v7/mnistCUDNN
$make clean && make
$./mnistCUDNN

如果cuDNN安装成功你会看到 Test passed! 字样。

使用cuDNN: 在编译的时候在你的Makefile.config文件中设置USE_CUDNN := 1

BLAS安装:

BLAS(Basic Linear Algebra Subprograms)即基础线性代数子程序库,里面拥有大量已经编写好的关于线性代数运算的程序。作为caffe的后端以来库使用。

BLAS有三种实现可供选择,ATLAS,Intel MKL,OpenBLAS这里我们选择免费的而且安装比较简单的ATLAS,在bash下执行:

$sudo apt-get install libatlas-base-dev 

即完成安装,在使用时,需在你的Makefile.config文件中设置 BLAS := open

openCV3.4.1安装:

基本依赖:

[compiler]$ sudo apt-get install build-essential
[required]$ sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
[optional]$ sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

下载openCV3.4.1源代码,解压到一个你的目录下,以下用<opencv_dir>代表,进入<opencv_dir>目录下:

执行以下命令,用cmake进行编译:

$rm CMakeCache.txt
$mkdir build
$cd build
$cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

一定要在cmake编译之前移除CMakeCache.txt文件,否则会报错FATAL: In-source builds are not allowed.

进入你的<opencv_dir>/build目录下执行:

$make -j7 # runs 7 jobs in parallel
$sudo make install

openCV安装完成!

安装python-opencv

$sudo apt-get install opencv-python 
$sudo apt-get install python-numpy

这样就可以在python中直接import了

安装Caffe:

从github上下载caffe:

$git clone https://github.com/BVLC/caffe.git

执行以下命令利用Makefile.config.example生成Makefile.config文件,这样比较好的地方就是,即使你后面修改Makefile.config文件改错了,也可以删除掉,重新再copy一份出来。

$cp Makefile.config.example Makefile.config

修改Makefile.config文件(根据技术选型和系统硬件):

  1. 去掉USE_CUDNN := 1 前面的注释
  2. 去掉USE_OPENCV := 0 前面的注释,并将0修改为1
  3. 去掉OPENCV_VERSION := 3 前面的注释
  4. 去掉CUSTOM_CXX := g++ 前面的注释
  5. 在CUDA_ARCH := 后前两行即有*_20和*_21的两行前面添加#最终效果为
CUDA_ARCH := #-gencode arch=compute_20,code=sm_20 \
		#-gencode arch=compute_20,code=sm_21 \
		-gencode arch=compute_30,code=sm_30 \
		-gencode arch=compute_35,code=sm_35 \
		-gencode arch=compute_50,code=sm_50 \
		-gencode arch=compute_52,code=sm_52 \
		-gencode arch=compute_60,code=sm_60 \
		-gencode arch=compute_61,code=sm_61 \
		-gencode arch=compute_61,code=compute_61

      6. 修改

# Whatever else you find you need goes here.
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

make编译,执行以下命令:

$make all
$make test
$make runtest

我的电脑是4核的,所以我在上面三条语句每条后面都加了一个 -j4以实现并行。在编译过程中,会报关于gflags,glog,lmdb的错误,是因为缺少相应的包,可以通过以下指令解决:

$sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

然后重新编译,如果遇到某些问题,可以尝试先删除掉caffe/build文件夹下的所有文件,重新进行编译,剩下的就是对着电脑抱拳啦。然后就没有遇到其他的问题了。(这个编译的时间会有点久)

python caffe 安装:

安装Anaconda:

Anaconda是一个开源的python发行版本,其包含了conda,Python等180多个包及其依赖项,可以很方便的管理包和环境。

我使用的是linux自带的python3.5版本,按Anaconda推荐先下载对应python3.6版本的,然后配置python3.5的环境。


下载过程可能会有些缓慢,下载完成后,进入到.sh文件所在目录,执行:

$bash Anaconda3-5.1.0-Linux-x86_64.sh

然后根据提示进行操作(同意条款,选择默认安装路径,将Anaconda添加环境变量)最后会推荐安装vscode,是和atom类似的一个编辑器,可装可不装。

选择一个路径,我用<new_environment>来代指,创建一个python3.5的Anaconda环境:

$conda create -n python3.5-caffe python=3.5 anaconda

其中py35-caffe为我设置的环境名称,可任意设置。然后激活该环境:

$source activate python3.5-caffe 

在该环境中安装python caffe所需要的库,打开文件<你的caffe所在路径>/python/requirements.txt,在命令行下输入:

$conda list

查看已经安装的包,对照requirements.txt,讲未安装的通过conda或pip进行安装即可。

配置Makefile.config文件:
# NOTE: this is required only if you will compile the python interface.
# We need to be able to find Python.h and numpy/arrayobject.h.
#PYTHON_INCLUDE := /usr/include/python2.7 \
	#	/usr/lib/python2.7/dist-packages/numpy/core/include
# Anaconda Python distribution is quite popular. Include path:
# Verify anaconda location, sometimes it's in root.
ANACONDA_HOME := $(HOME)/anaconda3
PYTHON_INCLUDE := $(ANACONDA_HOME)/envs/python3.5-caffe/include \
		  $(ANACONDA_HOME)/envs/python3.5-caffe/include/python3.5m \
		  $(ANACONDA_HOME)/envs/python3.5-caffe/lib/python3.5/site-packages/numpy/core/include

# Uncomment to use Python 3 (default is Python 2)
PYTHON_LIBRARIES := boost_python3 python3.5m
# PYTHON_INCLUDE := /usr/include/python3.5m \
#                 /usr/lib/python3.5/dist-packages/numpy/core/include

# We need to be able to find libpythonX.X.so or .dylib.
#PYTHON_LIB := /usr/lib
PYTHON_LIB := $(ANACONDA_HOME)/envs/python3.5-caffe/lib

# Homebrew installs numpy in a non standard path (keg only)
# PYTHON_INCLUDE += $(dir $(shell python -c 'import numpy.core; print(numpy.core.__file__)'))/include
# PYTHON_LIB += $(shell brew --prefix numpy)/lib

# Uncomment to support layers written in Python (will link against Python libs)
WITH_PYTHON_LAYER := 1

其中红色标注为做了修改的部分,最后进行编译:

$sudo make clean
$sudo make all pycaffe -j4
$sudo make test pycaffe -j4
$sudo make runtest pycaffe -j4

其中可能会出现的报错:

(1)cannot find -lboost_python3

    解决方法:终端进入/usr/lib/x86_64-linux-gnu/文件夹下找到libboost_python-py35.so和libboost_python-py35.a

    输入如下指令:

$sudo ln -s libboost_python-py35.so libboost_python3.so
$sudo ln -s libboost_python-py35.a libboost_python3.a

    之后再编译即不会报错。

(2)sudo make runtest pycaffe -j4的时候报错:error while loading shared libraries:libhdf5_hl.so.100,libhdf5.so.101

    解决方法:查找/usr/lib/x86_64-linux-gnu/hdf5/serial文件夹下确认找到libhdf5_hl.solibhdf5.so

    输入如下指令:

$cd /usr/lib/x86_64-linux-gnu
$sudo ln -s hdf5/serial/libhdf5_hl.so libhdf5_hl.so.100
$sudo lb -s hdf5/serial/libhdf5.so libhdf5.so.101

测试:

$python
>>import caffe

无报错则安装成功。


可能会出现的问题:“can't create weekday with n==0”

    这个问题的原因出在python-dateutil包上,因为requirements.txt文件中要求版本是python-dateutil>=1.4,<2 ,所以我配置环境的时候把原来2.6.1版本的卸载了,然后安装的1.5版本的,为解决这个问题,又把2.6.1版本的重新装了回来。结果跑通了。


哇,装了好久,临表涕零,不知所言!

参考资料:

cuDNN安装教程

caffe利用anaconda配置python接口(cpu版可视化工具)

Conda官方文档

Ubuntu16.04 14.04安装配置Caffe(GPU版)

Caffe官方文档

Ubuntu 16.04 用户登录界面死循环问题的解决

如有错误,欢迎指出交流,谢谢!




猜你喜欢

转载自blog.csdn.net/qq_38131594/article/details/79607796