本人是技术小白,刚开始接触caffe。第一次写博客,目的就是为了把自己的笔记存档,方便以后查阅。所以如果有写的不好或者不对的地方,还望各位大佬多多指教。
caffe的安装是在ubuntu16.04下安装的,关于ubuntu系统的安装这里不再陈述,网上有大量的教程可供参考。这篇文章主要讲一下自己在安装配置caffe的过程中遇到的各种问题和各种坑。。。
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)查看适合自己显卡的驱动,下面是适合我的显卡的驱动:
(2)安装驱动
安装之前先卸载已经存在的驱动版本:
这里有两种方法:
(1)利用“软件和更新”来安装,依次选择 系统设置->软件和更新->附加驱动->选择最新的驱动->应用更改
安装时可能遇到的问题:点击完应用更改一段时间后并没有成功安装,再次点击却出现闪退的现象,后来发现是因为依赖的问题,通过在终端输入以下命令:$sudo apt-get install -f $sudo apt-get update后 再次安装问题就解决了。
备注:之前都是用这种方法,可是后来重装系统后再次安装闪退,使用这个方法也解决不了,就用的命令行安装的
(2)命令行安装:
sudo add-apt-repository ppa:xorg-edgers/ppa
sudo apt-get update
sudo apt-get install nvidia-375 #注意在这里指定自己的驱动版本!
安装完成之后输入以下指令进行验证:
$sudo nvidia-smi 或者$sudo nvidia-settings
若列出了GPU的信息列表则表示驱动安装成功。
3.cuda 安装
这里我需要说一下,cuda7.5和cuda8.0我都安装过,开始安装cuda7.5的过程中,后来make时出现nvcc错误,查阅发现ubuntu16.04适合安装cuda8.0,果断转8.0
cuda都是在官网下载的,这里不再赘述
在终端cd到所下载的安装包所在的目录,进行MD5检验,确保安装包正常:
$sudo md5sum cuda.run
检验正确后,输入如下代码安装(第一行修改文件权限,第二行执行文件安装):
$ chmod 777 cuda.run
$ sudo ./cuda.run --override
注意后面的override是必须的,这样才能保证安装的过程中,不会出现编译器不支持的错误。另外,在选择条件的过程中,一定不要再次安装nvidia驱动,虽然cuda.run文件本身是包含又nvidia驱动的,但是本处直接安装会出错。下图是安装.run文件的配置:
这里可能会出现miss library的情况,解决方案参考http://stackoverflow.com/questions/22360771/missing-recommended-library-libglu-so
4.cudnn安装
下载地址:https://developer.nvidia.com/cudnn
cudnn-7.0-linux-x64-v4.0-prod.tgz
进入下载目录解压:
$ tar zxvf cudnn-7.0-linux-x64-v4.0-prod.tgz
cd进入cudnn解压之后的include目录,在命令行进行如下操作:
$ sudo cp cudnn.h /usr/local/cuda/include/ #复制头文件
再将lib64目录下的动态文件进行复制和链接:
$ sudo cp lib* /usr/local/cuda/lib64/ #复制动态链接库
$ cd /usr/local/cuda/lib64/
$ sudo ls -al | grep libcudnn#查看已有链接
结果如下:
$ sudo rm -rf libcudnn.so libcudnn.so.4 #删除原有动态文件
$ ls -al | grep libcudnn #再次查看已有链接
建立新的链接
$ sudo ln -s libcudnn.so.4.0.7 libcudnn.so.4
$ sudo ln -s libcudnn.so.4 libcudnn.so
再次查看
$ ls -al | grep libcudnn
已链接好!
然后设置环境变量和动态链接库:
$ sudo gedit /etc/profile
然后再打开的文件末尾加上(“=”前后不要有空格)
export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH
保存之后创建链接文件:
$ sudo vim /etc/ld.so.conf.d/cuda.conf
这时出现vim找不到命令,就使用$sudo rpm检查一下vim是否安装,提示rpm找不到命令,证明rpm没有安装,根据$sudo apt install rpm 安装,再执行sudo rpm -qa|grep vim 什么结果也没返回。在命令行输入命令sudo apt install vim 再执行sudo vim /etc/ld.so.conf.d/cuda.conf 现在就可以打开了。
按下字母i在文件中编辑加入以下内容:
/usr/local/cuda-8.0/lib64
按下esc,输入:wq保存后退出。并在终端输入以下命令使该链接生效:$ sudo ldconfig 出现下列情况:
解决方法:
$ sudo mv /usr/lib/nvidia-375/libEGL.so.1 /usr/lib/nvidia-375/libEGL.so.1.org
$ sudo mv /usr/lib32/nvidia-375/libEGL.so.1 /usr/lib32/nvidia-375/libEGL.so.1.org
$ sudo ln -s /usr/lib/nvidia-375/libEGL.so.375.39 /usr/lib/nvidia-375/libEGL.so.1
$ sudo ln -s /usr/lib32/nvidia-375/libEGL.so.375.39 /usr/lib32/nvidia-375/libEGL.so.1
使用sample里面的例子来测试还需要编译。因为当前的cuda还不支持gcc5.0以上的版本,在编译之前,我们需要修改配置文件,否则无法编译成功。(之前试过降低gcc版本,搞了很久没成功,这样改会有warning,但是还是先这样吧。)
$ cd /usr/local/cuda-8.0/include/
$ sudo cp host_config.h host_config.h.bak #备份编译头文件
$ sudo gedit host_config.h
117行如下:
#if __GNUC__ > 5
查看自己的gcc版本:
$ gcc –version
是5.4的版本。所以将117行修改为:
#if __GNUC__ > 5 || (__GNUC__ == 5 && __GNUC_MINOR__ > 9)
保存后退出。然后进入用例文件进行编译(注意执行第二步命令时候需要较长时间是正常现象):
$ cd /usr/local/cuda-8.0/NVIDIA_CUDA-8.0_Samples/
$ sudo make all
可能报错:
$sudo apt-get install freeglut3 freeglut3-dev
http://blog.sina.com.cn/s/blog_9579544301014mt5.html (参考)
因为在usr/lib下有这个库文件,所以执行
$sudo ln -s libnvcuvid.so.1 libnvcuvid.so
参考http://blog.csdn.net/jiqiujia/article/details/19406609
执行了之后还是报错,又goole之后,执行$sudo sed -i "s/nvidia-367/nvidia-375/g" $grep "nvidia-367" -r ./ -l,重新make
编译成功。
$cd bin/x86_64/linux/release/
$sudo ./deviceQuery
说明显卡驱动和cuda安装成功。
5.opencv安装
官网下载之后解压:
$ unzip opencv-3.2.0.zip
$ cd opencv
$ mkdir build
$ cd build
安装一些依赖项:
$ sudo apt-get update
$ sudo apt-get install build-essential
$ sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
$ sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
$ sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
生成的文件在bulid中,而生成的CMakeList.txt文件在上一级文件中;
$cd ../
$vim CMakeLists.txt
在弹出的文件开头加入一行(注意里面的引号要英文状态下的):
set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -D_FORCE_INLINES”)
然后按esc和:wq保存退出。
编译安装:
$ cd build/
$ sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
$ sudo make all -j2
此步出现的问题:
/home/july/software/opencv-3.2.0/build/opencv_lapack.h:2:45:fatalerror:LAPACKE_H_PATH-NOTFOUND/lapacke.h: 没有那个文件或目录
解决方法:
sudo apt-get install liblapacke-dev checkinstall
$ sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
$ sudo make all -j2
以上只是将opencv编译成功,还没将opencv安装,需要运行下面指令进行安装:
$ sudo make install
6.python安装与配置
第一是直接安装anaconda,去官网下载 ,选择linux 64bit 2.7版本下载安装,anaconda安装方便但是需要在最后的make配置文件中更改python包含路径。
第二种方法就是使用原生的python2.7版本,终端下
$sudo apt-get install python-pip 安装pip
这里我们用pip安装一些python需要的依赖包,不过为了避免各种问题,也可以通过apt-get安装,反正我这两种方式都安装了一遍(-.-)
第一种:
选择的是anaconda linux64 2.7版本python2.7 。下载完成之后,最好也要进行md5sum的检验。
完成之后,cd进入下载文件所在的目录,在命令行输入:
bash Anaconda2-4.3.1-Linux-x86_64.sh
yes
(ENTER)
yes
这一选项把PATH=/home/mwp/anaconda2/bin加到了环境变量中。
添加库:
sudo gedit ~/.bashrc
添加
export LD_LIBRARY_PATH=/home/mwp/anaconda2/lib:$LD_LIBRARY_PATH
重启电脑之后,在命令行输入:
ipython
就可以看到Python的版本。
第二种:
使用原生的python2.7版本,终端下
sudo apt-get install python-pip #安装pip
这里我们用pip安装一些python需要的依赖包,不过为了避免各种问题,也可以通过apt-get安装,反正我这两种方式都安装了一遍(-.-)
$sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose
以caffe默认解压到/home/mwp/ ,文件夹名caffe为例
$ cd /home/mwp/caffe/python
$ sudo su
$ for req in $(cat requirements.txt); do pip install $req; done
这里用pip安装可能速度很慢,很可能下载好几个小时,推荐用清华大学的pip源临时安装,所以命令改为如下:
$ for req in $(cat requirements.txt); do pip install -i https://pypi.tuna.tsinghua.edu.cn/simple $req; done
这里如果第一次有很多红字错误,建议再运行几遍指导安装成功,对于黄字提示无需理会,可能是pip版本需要更新。
安装了python还不行,还得安装一下ipython,后者更加方便快捷,更有自动补全功能。而ipython notebook是ipython的最好展现方式。最新的版本改名为jupyter notebook,我们先来安装一下。(如果安装了anaconda, jupyter notebook就已经自动装好,不需要再安装)
$sudo pip install jupyter(这里我已安装好,所有没有再次安装)
备注:
如果安装的是python3版本的anaconda,打开notebook时可能会出现类似”/lib/libstdc++.so.6: version `GLIBCXX_3.4.21’ not found”的问题,命令行查找发现:
$ strings /home/mwp/anaconda3/lib/libstdc++.so.6 | grep GLIBCXX
显示如下:
GLIBCXX_3.4
......
GLIBCXX_3.4.19//未找到GLIBCXX_3.4.21
原因是anaconda3中自带的libgcc版本是libgcc 4.8.5-2,然而caffe中编译python需要更高的版本libgcc5.2.0。
解决办法:
$ conda install libgcc
$ strings /home/mwp/anaconda3/lib/libstdc++.so.6 | grep GLIBCXX
就会显示如下:
GLIBCXX_DEBUG_MESSAGE_LENGTH
GLIBCXX_3.4
......
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
这时就可以运行notebook
$ jupyter notebook
就会在浏览器中打开notebook, 点击右上角的New-python2, 就可以新建一个网页一样的文件,扩展名为ipynb。在这个网页上,我们就可以像在命令行下面一样运行python代码了。输入代码后,按shift+enter运行,更多的快捷键,可点击上方的help-Keyboard shortcuts查看,或者先按esc退出编辑状态,再按h键查看。
安装python3的其实和上面基本是一致的,只不过是把对应的版本号换掉即可,但是,在caffe的配置中真真差了很多事啊。因为我后来重新配置的python3的环境,心累。。。。。
7.caffe安装与配置
下载caffe:
$ cd ~
$ git clone https://github.com/BVLC/caffe.git //从github上git caffe
安装配置caffe:
$ cd caffe
$ cp Makefile.config.example Makefile.config
$ sudo gedit Makefile.config
配置文件修改(看英文提示根据具体修改):
OPENCV_VERSION := 3 #取消注释符号#,应用opencv3
注释第66行自带的python
ANACONDA_HOME := /home/mwp/anaconda2 #将具体anaconda2路径写入
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python2.7 \
$(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \
PYTHON_INCLUDE之前的注释#去掉,以及之后两行前的#也去掉
PYTHON_LIB := $(ANACONDA_HOME)/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
如果安装的是Anaconda3,则按照下面的方式:
OPENCV_VERSION := 3 #取消注释符号#,应用opencv3
注释第66行自带的python
ANACONDA_HOME := /home/mwp/anaconda3 #将具体anaconda2路径写入
PYTHON_LIBRARIES := boost_python3 python3.5m 之前的注释去掉
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python3.5m \
$(ANACONDA_HOME)/lib/python3.5/site-packages/numpy/core/include \
PYTHON_INCLUDE 之前的注释#去掉,以及之后两行前的#也去掉
PYTHON_LIB := $(ANACONDA_HOME)/lib
WITH_PYTHON_LAYER := 1之前的注释#去掉
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
为hdf5之类的文件创建新的链接
\首先执行下面两句话:
$ cd /usr/lib/x86_64-linux-gnu/
$ sudo find . -type f -exec sed -i -e 's^"hdf5/serial/hdf5.h"^"hdf5/serial/hdf5.h"^g' -e 's^"hdf5/serial/hdf5_hl.h"^"hdf5/serial/hdf5_hl.h"^g' '{}' \;
执行
ls -al | grep libhdf
然后根据情况执行下面两句:
$ sudo ln -s libhdf5_serial.so.10.1.0 libhdf5_.so
$ sudo ln -s libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so
注意:这里的10.1.0和10.0.2根据不同的系统可能对应的数字会不同,比如在ubuntu16.04中其数字就是10.1.0.
具体的数字可以在输入命令时候使用tab键补全查看 .
打开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
在命令行输入:
$ source ~/.bashrc #编译立即生效
$ sudo gedit ~/.bashrc
在打开的文件末尾加上:
export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
在命令行输入:
$ sudo ldconfig #编译立即生效
然后进入caffe目录:
$sudo make all -j2编译成功。
$sudo make test -j2
$sudo make runtest
如果编译的是Anaconda3版本的,则可能出错:
CXX .build_release/src/caffe/proto/caffe.pb.cc
PROTOC (python) src/caffe/proto/caffe.proto
LD -o .build_release/lib/libcaffe.so.1.0.0-rc3
CXX/LD -o python/caffe/_caffe.so python/caffe/_caffe.cpp
/usr/bin/ld: cannot find -lboost_python3
collect2: error: ld returned 1 exit status
make: *** [python/caffe/_caffe.so] 错误 1
因为在配置文件的第 74 行中有 PYTHON_LIBRARIES := boost_python3 ,但是在系统中无法找到 boost_python3.lib 这个库文件。
解决方案如下:
检查是否有如下文件:
ls /usr/lib/x86_64-linux-gnu/libboost_python-py35.so
如果有,说明我们的系统中已经有了这种库文件,只是文件名不同。
cd /usr/lib/x86_64-linux-gnu/
sudo ln -s libboost_python-py34.so libboost_python3.so
重新编译即可通过。
编译成功,界面显示如下:
在运用anaconda和matlab时都需要修改相应的内容。
anaconda需要将caffe头文件进行链接:
$ sudo gedit ~/.bashrc
输入
export PYTHONPATH=/home/mwp/caffe/python:$PYTHONPATH
保存后在命令行输入:
$sudo ldconfig
$sudo make pycaffe
python也配置成功;
$sudo make distribute
$ipython
import caffe
报错如下:
命令操作如下:
A.把环境变量路径放到 ~/.bashrc文件中
$ sudo echo export PYTHONPATH="~/caffe/python" >> ~/.bashrc
B.使环境变量生效
$ source ~/.bashrc
继续报错:
执行命令:$ pip install opencv-python
执行conda install libgcc,报错:
我装的是anaconda2, 解决方法是在其中安装protobuf最新版本
$sudo chmod 777 -R anaconda2
$conda install protobuf
编译成功,即可调用caffe模块。
至此,caffe的安装结束,在整个过程中,重装系统n多次,都快郁闷死了,就是不断的查询不断的改,不断的make,成功的那一刻确实是很开心的。
——————————————————————————————————
更新:
后来在服务器上配置caffe,进入ipython,输入import caffe,报错:
QXcbConnection: Could not connect to display
Aborted (core dumped)
查询之后,采取以下解决方法:
In [1]: import os
In [2]: os.environ['QT_QPA_PLATFORM']='offscreen'
In [3]: import caffe
就可以了。
但是进入python,直接import caffe,并没有出错,所以这里出错的原因也不知道是为什么。既然在ipython界面import报错,就直接在python下import好了。。。。
这篇博客记录了一位技术新手在Ubuntu16.04上安装Caffe、CUDA8.0、CUDNN和OpenCV3及Python3的详细过程,包括安装依赖、NVIDIA驱动、CUDA配置、CUDNN安装、OpenCV编译和Python环境配置等步骤,以及遇到的问题和解决方法。

6167

被折叠的 条评论
为什么被折叠?



