参考了以下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
然后在home中执行:
1. sudo add-apt-repository ppa:graphics-drivers/ppa
2. sudo apt-get update
3. sudo apt-get install nvidia-390(390改为你查到的版本号)
4. sudo apt-get install mesa-common-dev
5. sudo apt-get install freeglut3-dev
6. reboot
重启后,输入:
nvidia-smi
如果出现了你的GPU列表,则说明驱动安装成功了。另外也可以通过输入
nvidia-settings
* 第二步:安装和配置cuda 8.0*
进入官网下载对应版本,https://developer.nvidia.com/cuda-downloads
我将安装包下载到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
第三步:安装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++
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
则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))
当出现:
配置成功!