Caffe+Cuda8.0+GTX1080+ubuntu16.04

购置硬件并且安装驱动

第一步,就是购置电脑。电脑配置如下:

CPU I7-6800K @3.4GHz.(6 Proceesor Cores)

Memory: 32G(DDR4)

SDD: Samsung SSD 850 EVO 1TB

Network Stack Configuration: IPV4/IPV6

GPU: nvidia GTX 1080

第二步,配置机器运行环境。使用的是ubuntu 16.04 xenial。不要用ubuntu 14.04 trusty(满满都是眼泪,和后面的cuda8兼容性不是很好)

第三步, 我们安装完一些必要的文件, 比如vim以及build-essential以及openssh-server以及git。安装完毕过后,需要重新设置一些东西,比如修改gccg++版本。

ubuntu16.04默认是gcc5.4g++5.4,我们需要把它降到4.9。因为nvidiacuda版本不支持超过5.3版本的gccg++。首先你可以再安装一个gcc/g++,使用apt-get install gcc4.9/g++4.9。然后在/usr/bin里面设置soft link,使用ln -sf 覆盖掉gcc/g++。另外开一个terminal,测试gcc/g++版本。gcc/g++ -v.

第四步,配置nvidia GTX1080driver

首先是,添加nvidia的源,sudo add-apt-repository ppa:graphics-drivers/ppa。第一次添加时,会提示你fresh driver from upstream,按回车继续即可。

然后,updatesudo apt-get update,然后安装 sudo apt-get install nvidia-367

第五步,安装完driver过后,再安装一些必要的opengl包,包括

sudo apt-get install mesa-common-dev

sudo apt-get install freeglut3-dev

重启,即可看到nvidia显卡生效了(sudo reboot)

安装CUDA

接下来,就是安装cuda。如果完全上文所述,只需要下载相应的安装程序

请下载run文件。下载完成过后,按如下命令安装。

sudo sh *.run(使用前用df -l确认tmpfs是有足够多的空间。如果没有可添加参数, sudo sh *.sh –tmpdir=/opt/temp/

请记住,在安装cuda的时候,当提示是否需要安装driver的时候,选择N,而不是Y

默认toolkit会安装在/usr/local/cuda-8.0sample会安装在

/home/mozat/NVIDIA_CUDA-8.0_Samples

安装完毕过后,修改环境变量。

PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}

LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

测试cuda是否正确安装:nvidia-smi,可以看到详细的GPU配置。

进入/home/mozat/NVIDIA_CUDA-8.0_Samples,随意挑选某个例子,比如

1_Utilities/deviceQuery然后make,然后执行就可以看到相关的CUDA DEVICE INFO

*** update g++ and gcc versions from 4.9 -> 5.4

安装CUDNN

Step 0: Install cuda from the standard repositories. (See How can I install CUDA on Ubuntu 16.04?)

Step 1: Register an nvidia developer account and download cudnn here (about 80 MB)

Step 2: Check where your cuda installation is. For the installation from the repository it is /usr/lib/... and /usr/include. Otherwise, it will be /urs/local/cuda/. You can check it with which nvcc or ldconfig -p | grep cuda

Step 3: Copy the files:

$ cd folder/extracted/contents
$ sudo cp -P include/cudnn.h /usr/include
$ sudo cp -P lib64/libcudnn* /usr/lib/x86_64-linux-gnu/
$ sudo chmod a+r /usr/lib/x86_64-linux-gnu/libcudnn*

安装opencv

http://docs.opencv.org/2.4/doc/tutorials/introduction/linux_install/linux_install.html

1)把编译好的release/lib/cv2.so拷贝到/usr/lib/python/dist-package

2)如果出现如下编译错误:1>V:\Opencv31\opencv\sources\modules\cudalegacy\src\graphcuts.cpp(271): error C3861: ‘nppiGraphcut8_32f8u’: identifier not found
2>—— Build started: Project: opencv_cudaoptflow, Configuration: Debug x64 ——
2>LINK : warning LNK4044: unrecognized option ‘/LV:/NVIDIA GPU Computing Toolkit/Cuda8/lib/x64’; ignored
2>LINK : fatal error LNK1104: cannot open file ‘..\..\lib\Debug\opencv_cudalegacy310d.lib’

可用如下方式进行修改:

I had the same problem you are trying to compile with CUDA8:

try this: in graphcuts.cpp (where your error is thrown) change this:

#include "precomp.hpp"

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)

to this:

#include "precomp.hpp"

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)  || (CUDART_VERSION >= 8000)

because graphcuts is not supported directly with CUDA8 anymore.

 

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_CUDA=OFF ..

安装caffe

  • General dependencies


sudo apt-get install libleveldb-dev libsnappy-dev autoconf libhdf5-serial-dev

sudo apt-get install libtool autoconf(否则再编译protobuf会出错)
sudo apt-get install --no-install-recommends libboost-all-dev
  • BLAS安装

sudo apt-get install libatlas-base-dev

  • python安装

sudo apt-get install python-dev python-mysqldb

  • 其他的库:

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

  • 重新安装protobuf-dev

sudo apt-get autoremove libprotobuf-dev protobuf-compiler 

git clone https://github.com/google/protobuf.git

./autogen.sh

./configure -prefix=/usr/ CC=/usr/bin/gcc

make

make check

sudo make install

(protoc –-version) libprotoc 3.1.0

修改配置文件

配置hdf5

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

修改caffe/repo Makefile.config

a)修改INCLUDE_DIRS AND LIBRARY_DIRS

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 

b)修改gcc版本

if the gcc version is not supported for caffe and cuda

注释/usr/local/cuda/include/host_config.h里面的第115行

//#error — unsupported GNU version! gcc versions later than 5.3 are not supported! 

c)配置opencv的版本

如果使用opencv3.0,请修改USE_OPENCV=1 然后,设置OPENCV_VERSIO = 3

d)修改PYTHON_INCLUDE为

PYTHON_INCLUDE:=/usr/include/python2.7 \

                                          /usr/local/lib/python2.7/dist-packages/numpy/core/include

e)修改matlab_dir为 /usr/local/MATLAB/R2014b

e)安装

make all -j8

make test -j8

make runtest -j8

make py(compile python接口)
make matcaffe(compile matlab接口)

Caffe运行问题

  1. 如果运行draw_net时,发现不能成功,则进行如下操作。

安装graphviz,请配置上机器的源,然后安装sudo apt-get install graphviz

然后再安装sudo pip install pydot

然后再安装sudo apt-get install python-pydot

2.如果发现google.protobuf.internal出现问题,无法import,那么请用

安装Google.protobuf后还要在重新配置Python,否则会出现No module named google.protobuf,不知道是不是和ldconfig有关系,http://blog.csdn.net/littlestream9527/article/details/38734001里介绍了ldconfig的功能。#!/bin/sh

cd /usr/local/src
tar zxvf protobuf-2.4.1.tar.gz
cd protobuf-2.4.1
./configure
make
make install
ldconfig
cd /usr/local/src/protobuf-2.4.1/python
python setup.py build
python setup.py install
cd /usr/local/lib/python2.7/site-packages
chmod -R 755 *

3. 发现matcaffe无法编译,提示出现warning: lambda expressions only available with -std=c++11 or -std=gnu++11。

解决方案:在Makefile 417行,添加c++11的支持,MATLAB_CXXFLAGS := $(CXXFLAGS) -Wno-uninitialized -std=c++11

  1. Matlab自己也会包含一个opencv版本,在安装的/usr/local/MATLAB/R2014b/bin/glnxa64/下。

需要执行以下脚本,重新软连接所有的opencv链接。

#!/bin/bash
for pack in ‘calib3d’ ‘contrib’ ‘core’ ‘features2d’ ‘flann’ ‘gpu’ ‘highgui’ ‘imgproc’ ‘legacy’ ‘ml’ ‘nonfree’ ‘objdetect’ ‘photo’ ‘stitching’ ‘video’ ‘videostab’
do
sudo ln -fs /usr/local/lib/libopencv_$pack.so.2.4.11 /usr/local/MATLAB/R2014b/bin/glnxa64/libopencv_$pack.so.2.4
done

  1. 如果出现ibstdc++.so.6的问题,则需要配置如下变量

export LD_LIBRARY_PATH=/opt/intel/mkl/lib/intel64:/usr/local/cuda/lib64
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6

Leave a comment