Ubuntu16.04 +cuda 8.0+cudnn 8.0+opencv 3.1.0+caffe+theano+tensorflow的安装和配置

参考了以下3篇文章:
Ubuntu16.04 +cuda8.0+cudnn+opencv+caffe+theano+tensorflow配置明细
Ubuntu16.04 Caffe 安装步骤记录(超详尽)
ubuntu16.04下caffe安装(GPU版)

主要参考了第一篇,其余两篇用作细节辅助,第一篇原文有些地方有细节错误,有的地方不够明确,这里从头整理下来。

环境:Ubuntu16.04
工具:cuda_8.0.61_375.26_linux.run + cudnn-8.0-linux-x64-v5.1.tgz + opencv-3.1.0.zip

第一步:安装英伟达显卡驱动

首先去官网上查看适合你GPU的驱动,记住对应的版本号,我的是390:
http://www.nvidia.com/Download/index.aspx?lang=en-us
Ubuntu16.04 +cuda 8.0+cudnn 8.0+opencv 3.1.0+caffe+theano+tensorflow的安装和配置_第1张图片

然后在home中执行:


 1. sudo add-apt-repository ppa:graphics-drivers/ppa
 2. sudo apt-get update
 3. sudo apt-get install nvidia-390390改为你查到的版本号)
 4. sudo apt-get install mesa-common-dev
 5. sudo apt-get install freeglut3-dev
 6. reboot

重启后,输入:

 nvidia-smi

如果出现了你的GPU列表,则说明驱动安装成功了。另外也可以通过输入

 nvidia-settings

出现以下画面,则表示成功:
Ubuntu16.04 +cuda 8.0+cudnn 8.0+opencv 3.1.0+caffe+theano+tensorflow的安装和配置_第2张图片

* 第二步:安装和配置cuda 8.0*

进入官网下载对应版本,https://developer.nvidia.com/cuda-downloads
Ubuntu16.04 +cuda 8.0+cudnn 8.0+opencv 3.1.0+caffe+theano+tensorflow的安装和配置_第3张图片

我将安装包下载到home目录,然后在终端进入home目录,输入:


1.sudo dpkg -i cuda-repo-ubuntu1604-8-0-rc_8.0.27-1_amd64​.deb  
2.sudo apt-get update  
3.sudo apt-get install cuda​

ubuntu的gcc编译器是5.4.0,然而cuda8.0不支持5.0以上的编译器,因此需要降级,把编译器版本降到4.9:

1.sudo apt-get install gcc-4.9 gcc-5 g++-4.9 g++-5
2.sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 20
3.sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 10
4.sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 20
5.sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 10  
6.sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30  
7.sudo update-alternatives --set cc /usr/bin/gcc  
8.sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30  
9.sudo update-alternatives --set c++ /usr/bin/g++ 

配置cuda8.0之后主要加上的一个环境变量声明,在文件~/.bashrc之后加上

1.gedit ~/.bashrc  
2.export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}  
3.export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}  

然后设置环境变量和动态链接库,在命令行输入

sudo gedit /etc/profile  

在打开的文件里面加上(注意等号两边不能有空格)

export PATH=/usr/local/cuda/bin:$PATH 

保存之后,创建链接文件

sudo gedit /etc/ld.so.conf.d/cuda.conf  

在打开的文件中添加如下语句:

 /usr/local/cuda/lib64

保存退出执行命令行:

sudo ldconfig 

使链接立即生效。

测试cuda的Samples,命令行输入(注意cuda-8.0是要相对应自己的cuda版本)

1.cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery  
2.sudo make  
3.sudo ./deviceQuery 

返回GPU的信息则表示配置成功。
Ubuntu16.04 +cuda 8.0+cudnn 8.0+opencv 3.1.0+caffe+theano+tensorflow的安装和配置_第4张图片

第三步:安装cudnn
上官网下载对应的cudnn:https://developer.nvidia.com/cudnn

下载完cudnn后,命令行输入所下载文件所在的文件夹,我下载到 home目录

cd home/  
tar zxvf cudnn-8.0-linux-x64-v5.1.tgz  #解压文件

解压后,在home目录出现cuda目录,cd进入cuda的include目录,在命令行进行如下操作:

sudo cp cudnn.h /usr/local/cuda/include/ #复制头文件 

再cd进入lib64目录下的动态文件进行复制和链接:(5.1.5为对应版本具体可修改)

1.sudo cp lib* /usr/local/cuda/lib64/ #复制动态链接库  
2.cd /usr/local/cuda/lib64/  
3.sudo rm -rf libcudnn.so libcudnn.so.5 #删除原有动态文件  
4.sudo ln -s libcudnn.so.5.1.5 libcudnn.so.5 #生成软衔接  
5.sudo ln -s libcudnn.so.5 libcudnn.so #生成软链接  

第四步:安装opencv3.1.0

从官网上下载opencv3.1.0:http://opencv.org/downloads.html
我下载到home,并将其解压到home

unzip opencv-3.1.0.zip

在home目录下,首先安装Ubuntu系统需要的依赖项:

1.sudo apt-get install --assume-yes libopencv-dev build-essential cmake git libgtk2.0-dev pkg-config python-dev python-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip 

然后安装OpenCV需要的一些依赖项,一些文件编码解码之类的

1.sudo apt-get install build-essential cmake git  
2.sudo apt-get install ffmpeg libopencv-dev libgtk-3-dev python-numpy python3-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libv4l-dev libtbb-dev qtbase5-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip  

在终端中cd到opencv-3.1.0文件夹下(解压的那个文件夹),然后

 1.mkdir build #新建一个build文件夹,编译的工程都在这个文件夹里  
 2.cd build/  
 3.cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" ..(后面两点不要忘记)

cmake成功后,会出现如下结果,提示配置和生成成功:

– Configuring done
– Generating done
– Build files have been written to: /home/ise/software/opencv-3.1.0/build

由于CUDA 8.0不支持OpenCV的 GraphCut 算法,可能出现以下错误:
/home/usrname/opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp:120:54: error: ‘NppiGraphcutState’ has not been declared

typedef NppStatus (init_func_t)(NppiSize oSize, NppiGraphcutState* ppStat

^

/home/usrname/opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp:135:18: error: ‘NppiGraphcutState’ does not name a type

operator NppiGraphcutState*()

^

/home/usrname/opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp:141:9: error: ‘NppiGraphcutState’ does not name a type

NppiGraphcutState* pState;

…….

进入opencv-3.1.0/modules/cudalegacy/src/目录,修改graphcuts.cpp文件,将:

#include "precomp.hpp"

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

改为

#include "precomp.hpp"

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

确保在bulid文件夹下,然后make编译就可以了

make -j8

编译成功,进行安装:

1.sudo apt-get install checkinstall  
2.sudo checkinstall  
3.sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'  
4.sudo ldconfig 

注意:使用checkinstall的目的是为了更好的管理我安装的opencv,因为opencv的安装很麻烦,卸载更麻烦,其安装的时候修改了一大堆的文件,当我想使用别的版本的opencv时,将当前版本的opencv卸载就是一件头疼的事情,因此需要使用checkinstall来管理我的安装。执行了checkinstall后,会在build文件下生成一个以backup开头的.tgz的备份文件和一个以build开头的.deb安装文件,当你想卸载当前的opencv时,直接执行dpkg -r build即可。

安装完成后通过查看 opencv 版本验证是否安装成功:

sudo cp Makefile.config.example Makefile.config

* 第五步:安装和配置caffe环境*

切换编译器,选择g++ 5.0以上的对应编号,如图所示,我这边选择2,紧接着一步我也是选择2

sudo update-alternatives --config g++ 

Ubuntu16.04 +cuda 8.0+cudnn 8.0+opencv 3.1.0+caffe+theano+tensorflow的安装和配置_第5张图片

sudo update-alternatives --config gcc

安装依赖库:

1.sudo add-apt-repository universe  
2.sudo apt-get update -y  
3.sudo apt-get install cmake -y 

General Dependencies

1.sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev \libhdf5-serial-dev protobuf-compiler -y  
3.sudo apt-get install --no-install-recommends libboost-all-dev -y  

BLAS

sudo apt-get install libatlas-base-dev -y  

Remaining Dependencies

1.sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev -y  
2.sudo apt-get install python-dev python-numpy -y  
3.sudo apt-get install -y python-pip  
4.sudo apt-get install -y python-dev  
5.sudo apt-get install -y python-numpy python-scipy 

编译 Caffe,cd到要安装caffe的位置,这边我到home目录下:

1.git clone https://github.com/BVLC/caffe.git  
2.cd caffe  
3.cp Makefile.config.example Makefile.config  

修改Makefile.config:

gedit Makefile.config  

对打开的文件编辑

# cuDNN acceleration switch (uncomment to build with cuDNN).

USE_CUDNN := 1
# Uncomment if you're using OpenCV 3 如果用的是opencv3版本

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

WITH_PYTHON_LAYER := 1

在文件里面添加文本,由于hdf5库目录更改,所以需要单独添加:

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/hdf5/serial/

打开makefile文件

gedit Makefile  

NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)

替换

NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

编辑/usr/local/cuda/include/host_config.h,将其中的第115行注释掉:

sudo gedit /usr/local/cuda/include/host_config.h  

#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!

改为

//#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!

进入caffe目录:

1.make -j4 all  
2.make -j4 runtest 

为了更好地使用pycaffe ,建议安装:

sudo apt-get install python-numpy python-setuptools python-pip cython python-skimage python-protobuf  
make pycaffe  
cd python  
python  

在>>>后输入:

import caffe #测试安装成功 

然后,可以输入exit()退出。

到这里Caffe开发环境就配置好了!

可以测试一下,输出AlexNet的时间测试结果:

cd ~/caffe  
./build/tools/caffe time --gpu 0 --model ./models/bvlc_alexnet/deploy.prototxt

第六步:theano安装

1.在home目录下,直接输入以下命令:

sudo pip install theano

2、配置参数文件:.theanorc

sudo gedit ~/.theanorc 

3.对打开的文件进行编辑,添加如下语句:

[global]

floatX=float32

device=gpu

base_compiledir=~/external/.theano/

allow_gc=False

warn_float64=warn

[mode]=FAST_RUN



[nvcc]

fastmath=True



[cuda]

root=/usr/local/cuda 

4.测试
(待完成)

第七步:安装tensorflow

1.先安装anaconda

https://repo.continuum.io/archive/Anaconda2-4.2.0-Windows-x86_64.exe

我将安装包放在home里面,进入home目录,然后执行:

    cd /home/username/Downloads  
    sudo bash Anaconda2-4.2.0-Linux-x86_64.sh

一路enter和yes。

2.配置环境变量

sudo gedit /etc/profile

在末尾添加

export PATH=/home/anaconda2/bin:$PATH

3.重启端口

4.输入

python

显示:
Ubuntu16.04 +cuda 8.0+cudnn 8.0+opencv 3.1.0+caffe+theano+tensorflow的安装和配置_第6张图片

则anaconda2安装成功。

5.创建conda环境,名字叫tensorflow

conda create -n tensorflow python=2.7  
source activate tensorflow

下面这句话只能下载给CPU用的tensorflow

conda install -c conda-forge tensorflow

利用pip来下载给GPU用的tensorflow

export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.11.0-cp27-none-linux_x86_64.whl

安装

pip install --ignore-installed --upgrade $TF_BINARY_URL

安装IPython

conda install ipython

关掉该环境

source deactivate 

测试安装是否正确

source activate tensorflow  
python

在窗口输入以下python代码:

import tensorflow as tf
import numpy as np
# Create 100 phony x, y data points in NumPy, y = x * 0.1 + 0.3
x_data = np.random.rand(100).astype(np.float32)
y_data = x_data * 0.1 + 0.3

# Try to find values for W and b that compute y_data = W * x_data + b
# (We know that W should be 0.1 and b 0.3, but TensorFlow will figure that out for us.)
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) 
b = tf.Variable(tf.zeros([1]))
y = W * x_data + b
optimizer = tf.train.GradientDescentOptimizer(0.5)
# Minimize the mean squared errors. 
loss = tf.reduce_mean(tf.square(y - y_data)) 
train = optimizer.minimize(loss)

# Before starting, initialize the variables. We will 'run' this first. 
init = tf.initialize_all_variables() 

# Launch the graph.
sess = tf.Session() 
sess.run(init) 

# Fit the line.
for step in range(201):
    sess.run(train) 
    if step % 20 == 0: 
        print(step, sess.run(W), sess.run(b))

当出现:

Ubuntu16.04 +cuda 8.0+cudnn 8.0+opencv 3.1.0+caffe+theano+tensorflow的安装和配置_第7张图片
Ubuntu16.04 +cuda 8.0+cudnn 8.0+opencv 3.1.0+caffe+theano+tensorflow的安装和配置_第8张图片

配置成功!

你可能感兴趣的:(linux,python,深度学习)