基本依赖项:
$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.25驱动NVIDIA-Linux-x86_64-390.25.run
首先将系统默认驱动nouveau加入黑名单:
$sudo gedit /etc/modprobe.d/blacklist.conf
gedit打开blacklist.conf后在最后一行添加
blacklist nouveau option nouveau modeset=0
然后保存:
$sudo update-initramfs -u
然后重启电脑:
$shutdown -r now
开机后,按Ctrl + Alt + F2 进入纯命令行界面,然后输入以下关闭掉占用显卡的程序:
$systemctl isolate multi-user.target
进入到你的驱动下载路径,安装驱动:
$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.
安装结束后,输入如下命令检验:
$nvidia-smi
如果显示当前GPU的驱动等信息,则驱动安装成功,使用如下指令以准备返回图形界面。
$systemctl start graphical.target
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}}
测试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进行编译:
$mkdir build
$cd build
$cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
如有报错FATAL: In-source builds are not allowed.可以先检查一下是否有CMakeCache.txt文件并移除。
在你的<opencv_dir>/build目录下执行:
$make -j7
$sudo make install
openCV安装完成!
安装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文件(根据技术选型和系统硬件):
- 去掉USE_CUDNN := 1 前面的注释
- 去掉USE_OPENCV := 0 前面的注释,并将0修改为1
- 去掉OPENCV_VERSION := 3 前面的注释
- 去掉CUSTOM_CXX := g++ 前面的注释
- 将CUDA_ARCH := 后前两行即有*_20和*_21的两行去掉,最终效果为:
CUDA_ARCH := -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/serialLIBRARY_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
其中python3.5-caffe为我设置的环境名称,可任意设置。然后激活该环境:
$source activate python3.5-caffe
在该环境中安装python caffe所需要的库,进入路径<你的caffe所在路径>/python/,在命令行输入:
$pip install -r requirements.txt
配置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
最后进行编译:
$make clean
$make all
$make pycaffe
其中可能会出现的报错:
(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)make runtest的时候报错:error while loading shared libraries:libhdf5_hl.so.100,libhdf5.so.101
解决方法:查找/usr/lib/x86_64-linux-gnu/hdf5/serial文件夹下确认找到libhdf5_hl.so和libhdf5.so
输入如下指令:
$cd /usr/lib/x86_64-linux-gnu
$sudo ln -s hdf5/serial/libhdf5_hl.so libhdf5_hl.so.100
$sudo ln -s hdf5/serial/libhdf5.so libhdf5.so.101
测试:
进入<你的caffe所在路径>/python/路径下,执行下列命令无报错则安装成功。
$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 用户登录界面死循环问题的解决
如有错误,欢迎指出交流,谢谢!