Ubuntu 16.10安装caffe
主要依据http://blog.csdn.net/u011272513/article/details/52103453进行安装,跟据本身实际作了些许修改。
环境:
ubuntu16.10 cuda8.0 gcc5.4 opencv3.1.0 python2.7
CUDA安装(包括nvidia显卡驱动和cuda库文件):
CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA 推出的运算平台CUDA™是一种由NVIDIA推出的通用并行计算 架构,该架构使GPU 可以解决复杂的计算问题。开发人员如今可使用C语言 来为CUDA™架构编写程序,C语言是应用最普遍的一种高级编程语言。所编写出的程序因而就能够在支持CUDA™的处理器上以超高性能运行。CUDA3.0已经开始支持C++ 和FORTRAN 。
经过英伟达安装包来分别安装库的驱动程序而不是使用apt-get来安装。若是只有CPU能够跳过这步。
主板BIOS里面要选择自由选择显卡,这样才能识别nvidia的显卡并进行驱动更新。
快捷键ctrl+alt+T打开命令终端,加入官方ppa源(ppa简介 )。
$ sudo add-apt-repository ppa:graphics-drivers/ppa
须要输入密码并按enter键确认。以后刷新软件库并安装最新驱动。
$ sudo apt-get update
$ sudo apt-get install nvidia-367 nvidia-settings nvidia-prime
安装完成后经过下面命令查看是否安装成功。
$ nvidia-settings
注意安装完成后要重启,有以下效果则安装完成,不然就说明安装有问题,尝试关闭UEFI保护试试。
从官网下载cuda8.0run文件cuda8.0下载 ,进入该页面选择相应版本,以下图
cuda8.0已经支持gcc5以上版本(不包括gcc6),故建议安装时使用Gcc5以上版本,不,由于Caffe须要使用Gcc5来编译,否则会出现不少undefined reference 的错误。ubuntu16.10系统自带的是最新的gcc6,致使接下来编译的时候比较麻烦。
下载完run文件后,cd命令进入该文件所在目录,进行MD5检验,确保安装包正常。
sudo md5sum cuda_8.0_linux.run 检验结果与源文件的md5sum比较。
检验正确后,输入以下代码安装(第一行修改文件权限,第二行执行文件安装):
$ chmod 777 cuda_8.0_linux.run
$ sudo ./cuda_8.0_linux.run --override
执行代码后会跳出一个信息,左下方出现more|0%这样,此时直接按enter直到跳到100%结束退出,接下来要求输入相关配置命令,以下图,注意别弄错了,第三行配置询问是否要安装nvidia图形驱动器,必定要选n,由于以前已经安装过了,若是再安装则会报错。仔细看以下配置,别看错行。
安装后出现以下则说明安装正确:
===========
= Summary =
===========
Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-7.5
Samples: Installed in /usr/local/cuda-7.5, but missing recommended librarie
接下来安装cudnn动态库,能够得到更快计算速率。cudnn5.0 ,初次进入须要注册,而后问卷调查,以后进入以下页面
选择cuDNN v5 Library for Linux进行下载。下载后名字为:cudnn-7.5-linux-x64-v5.0-ga.tgz,进入文件所在目录进行解压:
$ tar zxvf cudnn-7.5-linux-x64-v5.0-ga.tgz
解压后有个cuda文件,内有include和lib64两个文件夹,进入include文件夹,执行以下命令:
$ sudo cp cudnn.h /usr/local/cuda/include/ #复制头文件
再cd命令切换进lib64文件夹,执行以下命令:
$ sudo cp lib* /usr/local/cuda/lib64/ #复制动态连接库
而后进入复制后的动态连接库进行新的连接:
$ cd /usr/local/cuda/lib64/
$ sudo rm -rf libcudnn.so libcudnn.so.5 #删除原有动态文件
$ sudo ln -s libcudnn.so.5.0.5 libcudnn.so.5
$ sudo ln -s libcudnn.so.5 libcudnn.so
而后设置环境变量和动态连接库:
$ sudo gedit /etc/profile
而后再打开的文件末尾加上(“=”先后不要有空格)
export PATH=/usr/local/cuda/bin:$PATH
保存以后建立连接文件:
$ sudo vim /etc/ld.so.conf.d/cuda.conf
按下键盘i进行编辑:
/usr/local/cuda/lib64
按下esc,按下:wq保存退出。并在终端输入如下命令使该连接生效:
$ sudo ldconfig
使用sample里面的例子来测试还须要编译。
而后进入用例文件进行编译(注意执行第二步命令时候须要较长时间是正常现象):
$ cd /usr/local/cuda/samples
$ sudo make all -j4
$ cd /usr/local/cuda/samples/bin/x86_64/linux/release
$ sudo ./deviceQuery
执行命令后出现以下信息则说明显卡驱动和cuda安装成功。
BLAS安装与配置
BLAS,即基础线性代数子程序库,里面拥有大量已经编写好的关于线性代数运算的程序,是一个应用程序接口的标准。caffe官网上推荐了三种实现:ATLAS, MKL, or OpenBLAS。其中atlas能够直接经过命令行安装.在此直接使用ATLAS,在线安装便可。
OpenCV3.1.0安装与配置
首先安装一些必要的依赖库:
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
OpenCV 进入该网站下载OpenCV3.1.0并解压缩,而后进入解压缩后的文件,建立build文件。
$ unzip opencv-3.1.0.zip
$ cd opencv-3.1.0
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
生成的文件在bulid中,而生成的CMakeLists.txt文件在上一级文件中。在配置过程会出现– ICV: Downloading ippicv_linux_20151201.tgz…错误。能够到 ippicv_linux_20151201.tgz 下载。
将下载的文件替换掉 opencv-3.1.0/3rdparty/ippicv/downloads/linux-8b449a536a2157bcad08a2b9f266828b下的同名文件,同时在opencv-3.1.0目录下的CMakeList.txt 文件的开头加入一行,而后再次cmake便可,以下:
$ cd ~/Downloads/
$ mv ippicv_linux_20151201.tgz opencv-3.1.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/
$ vim opencv-3.1.0/CMakeLists.txt
在弹出的文件开头加入一行(注意里面的引号要英文状态下的):
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FORCE_INLINES")
而后按esc和:wq保存退出。
$ cd opencv-3.1.0/build
$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
$ make -j4 #四核运算
$ sudo make install
以上最后两步比较耗时,耐心等待。
Python安装与配置
选择的是anaconda linux64 2.7版本python2.7 。下载完成以后,最好也要进行md5sum的检验。完成以后,cd进入下载文件所在的目录,在命令行输入:
$ bash Anaconda2-4.0.0-Linux-x86_64.sh
安装完成以后,在~/.bashrc文件末尾添加Anaconda的库文件(注意“=”两边不要有空格),具体以下:
$ sudo gedit ~/.bashrc
export PATH="/home/jeson/anaconda2/bin:$PATH"
export LD_LIBRARY_PATH="/home/jeson/anaconda2/lib:$LD_LIBRARY_PATH"
重启电脑以后,在命令行输入:
$ ipython
就能够看到python的版本。
caffe的安装和配置
安装各类依赖包
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install -y build-essential cmake git pkg-config
sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install -y libatlas-base-dev
sudo apt-get install -y --no-install-recommends libboost-all-dev
sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev
sudo apt-get install -y python-pip
sudo apt-get install -y python-dev
sudo apt-get install -y python-numpy python-scipy
sudo apt-get install -y libopencv-dev
下载caffe:
cd ~
git clone https://github.com/BVLC/caffe.git //从github上git caffe
安装配置caffe:
cd caffe //打开到刚刚git下来的caffe
cp Makefile.config.example Makefile.config //make指令只能make Makefile.config
sudo gedit Makefile.config //打开Makefile.config文件
配置文件修改(看英文提示根据具体修改):
USE_CUDNN := 1
OPENCV_VERSION := 3 #取消注释符号#,应用opencv3
BLAS := mkl #BLAS库应用英特尔的mkl
#注释第66行自带的python
ANACONDA_HOME := /home/jeson/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
为hdf5之类的文件建立新的连接[
\\首先执行下面两句话:
find . -type f -exec sed -i -e 's^"hdf5.h"^"hdf5/serial/hdf5.h"^g' -e 's^"hdf5_hl.h"^"hdf5/serial/hdf5_hl.h"^g' '{}' \;
cd /usr/lib/x86_64-linux-gnu
\\而后根据状况执行下面两句:
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)
$ sudo gedit ~/.bashrc
在打开的文件末尾加上:
export LD_LIBRARY_PATH="/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH”
在命令行输入:
sudo ldconfig #编译当即生效
而后进入caffe目录:
make all -j4
make test -j4
make runtest
这里runtest会报错以下:
解决方法是在~/.bashrc文件末尾添加输入一行,具体以下:
sudo gedit ~/.bashrc
export MKL_CBWR=AUTO #打开的文件末尾加入该行,而后保存退出。
sudo ldconfig #编译当即生效
而后再来一遍
make clean
make all -j4
make test -j4
make runtest
正确结果是以下:
若是编译没有报错,则基本没问题。在运用anaconda和matlab时都须要修改相应的内容。
1.编译过程当中若出现各类莫名奇妙的undefined reference 错误( undefined reference to ‘xxx’),优先考虑是不是编译器版本问题,使用gcc5进行编译。
2.若出现protobuf/proto等相关的错误,优先考虑是不是protobuf未安装,能够 本地编译protobuf。下载地址为https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz,按照README文件里的步骤安装便可
anaconda须要将caffe头文件进行连接:
$ sudo gedit ~/.bashrc
输入
export PYTHONPATH="/home/jeson/caffe/python:$PYTHONPATH"
保存后在命令行输入:
sudo ldconfig
make pycaffe
make distribute
ipython
import caffe
最后若是没有跳出错误则说明编译成功,便可调用caffe模块。
我在导入caffe时出现 /home/lqc/anaconda2/bin/../lib/libstdc++.so.6: version `GLIBCXX_3.4.20' not found ,主要由于/home/lqc/anaconda2/lib/libstdc++.so.6的确没有此版本(gcc.4.7),但个人系统安装的是gcc6,因此只要找到gcc6的libstdc++.so.6.0.22, 创建其为libstdc++.so.6软连接便可。
(strings libstdc++.so.6.0 |grep GLIBCXX) string命令查看
至此,暂时应该算是安装完成。
欢迎关注本站公众号,获取更多信息