Ubuntu16.04下CUDA8.0(deb)+Cudnn6.0+tensorflow+mxnet+caffe配置(操作简易且成功率高)

本机配置

系统:Ubuntu16.04 (64位系统)
GPU: GeForce GTX 980 Ti
python版本:Ubuntu16.04默认的python2.7版本
之前已用.run文件安装CUDA9.1+Nvidia driver 387.26

目标说明

发现对于CUDA9.1来说,除了tensorflow是支持的以外,mxnet和caffe都会有不匹配的问题,尤其对于caffe在Ubuntu16.04下需要CUDA8.0才能兼容,因此更为保险地,为了满足大多数深度学习工具的要求,改为安装最为常用的CUDA8.0+cudnn6.0的组合(当然你也可以用cuda9.0+cudnn7),在尝试多次之后,发现用deb文件安装CUDA是最迅速的方式(也是官方推荐方式),安装好cudnn之后,选择对应版本的mxnet,tensorflow,caffe安装即可。

卸载已安装的CUDA

请参考Ubuntu16.04下CUDA和driver的卸载(.run安装)
判断是否需要卸载及如何卸载。

安装CUDA8.0+driver(deb)

使用.deb方式安装不仅快捷方便,也是官方推荐方式,比起.run文件安装会出现各种问题,.deb安装十分流畅。

1.确认具备安装条件

这部分cuda安装官方tutorial中写的非常清晰,如果不确定自己的系统条件是否具备安装条件,请参考#pre-installation actions目录下的#2.1至#2.4部分

2.下载和安装.deb文件

(1) 在如下CUDA Toolkit下载界面,选择右下角的Legacy Releases
官方界面
(2)跳转到所有releases版本界面如下,选择CUDA Toolkit 8.0 GA2[Feb 2017]
all releases
(3)跳转到CUDA8.0 GA2下载界面如下,依次按照自己的系统要求选择,获取我们需要的deb(local)安装文件下载。
deb文件获取
(4)确认deb文件下载没问题,用以下命令求md5值,与[MD5 checksum posted}(http://developer.nvidia.com/cuda-downloads/checksums)中对比,确认一致即表示下载无误。

$ md5sum cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb

(5)deb文件安装
依次运行以下命令

$ sudo dpkg -i cuda-repo-<distro>_<version>_<architecture>.deb
$ sudo apt-key add /var/cuda-repo-<version>/7fa2af80.pub
$ sudo apt-get update
$ sudo apt-get install cuda

Tips:
- 第一行命令中cuda-repo-<distro>_<version>_<architecture>.deb就是你下载的deb文件,在这里就是cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb文件;
- 第二行命令中/var/cuda-repo-<version>/7fa2af80.pub中间的cuda-repo-<version>用Tab键补齐就可以
(6)配置环境变量。
方法一:

$ sudo gedit ~/.bashrc
# 在打开的文件中添加两行内容
# 第一行是export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
# 第二行是LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
# 点击保存后关闭文件
$ source ~/.bashrc

方法二(这个方法有时会失效,所以推荐方法一):

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

(7)重启系统

3. 确认已成功安装

3.1确认驱动安装成功

$ cat /proc/driver/nvidia/version

3.2确认CUDA安装成功

$ cuda-install-samples-8.0.sh  ~   #cuda samples安装到根目录下
#执行完改命令后会在根目录下产生一个`NVIDIA_CUDA-8.0_Samples`目录
$ cd NVIDIA_CUDA-8.0_Samples
$ make -j8 #-j8表示8线程用于加速
# 运行完之后如果过程不报错(有warning没关系)
# 则会在目录'NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release'下生成一个`deviceQuery`文件
$ cd ~/NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release/
$ ./deviceQuery

上述命令运行完之后,本机返回信息如下,如果最后一行出现Result = PASS,就是CUDA安装成功。

./deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "GeForce GTX 980 Ti"
  CUDA Driver Version / Runtime Version          9.0 / 8.0
  CUDA Capability Major/Minor version number:    5.2
  Total amount of global memory:                 6073 MBytes (6368198656 bytes)
  (22) Multiprocessors, (128) CUDA Cores/MP:     2816 CUDA Cores
  GPU Max Clock rate:                            1240 MHz (1.24 GHz)
  Memory Clock rate:                             3505 Mhz
  Memory Bus Width:                              384-bit
  L2 Cache Size:                                 3145728 bytes
  Maximum Texture Dimension Size (x,y,z)         1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
  Maximum Layered 1D Texture Size, (num) layers  1D=(16384), 2048 layers
  Maximum Layered 2D Texture Size, (num) layers  2D=(16384, 16384), 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total number of registers available per block: 65536
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  2048
  Maximum number of threads per block:           1024
  Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
  Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 2 copy engine(s)
  Run time limit on kernels:                     Yes
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing (UVA):      Yes
  Device PCI Domain ID / Bus ID / location ID:   0 / 1 / 0
  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 9.0, CUDA Runtime Version = 8.0, NumDevs = 1, Device0 = GeForce GTX 980 Ti
Result = PASS

之后可以用nvidia-sminvidia-settingsnvcc -V查看本机相关信息。

安装cuDNN6.0

1.下载.tgz文件

(1)在cuDNN下载界面,点击’download’。
cudnn下载主界面
(2)在跳转到的下载页面登入自己的账户密码,勾选I Agree To the Terms of the cuDNN Software License Agreement,在显示的多个版本中选择Download cuDNN v6.0 (April 27, 2017), for CUDA 8.0,选择其中的第3项cuDNN v6.0 Library for Linux,会自动下载cudnn-8.0-linux-x64-v6.0.tgz压缩文件
cuDNN下载

2.从.tgz文件安装

cudnn-8.0-linux-x64-v6.0.tgz文件放到根目录下,依次运行以下命令:

$ tar -xzvf cudnn-8.0-linux-x64-v6.0.tgz #解压
$ sudo cp cuda/include/cudnn.h /usr/local/cuda/include
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn* #改变所有用户权限为只读

安装tensorflow

1.安装

Tensorflow官方文档中对于CUDA8.0+cuDNN6.0支持最好的tensorflow-gpu版本是1.4.0。
如果pip安装过慢,请参考 Ubuntu16.10下配置pip国内镜像源加速安装进行加速。

$ sudo pip install tensorflow-gpu==1.4.0 #安装

2.验证安装成功

$ python
# 在python命令行中import tensorflow,不报错即安装成功
import tensorflow as tf

安装MXNet

1.安装

CUDA8.0对应的mxnet版本是mxnet-cu80(同理如果是CUDA9.0对应版本则是mxnet-cu90)。
如果pip安装过慢,请参考 Ubuntu16.10下配置pip国内镜像源加速安装进行加速。

$ sudo pip install --pre mxnet-cu80 # CUDA 8.0

2.验证安装成功

$ python
# 在python命令行中import mxnet,不报错即安装成功
import mxnet as mx

安装caffe及配置pycaffe

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 libgflags-dev libgoogle-glog-dev liblmdb-dev
# 以上为general dependencies
$ sudo apt-get install libatlas-base-dev #install ATLAS 
$ sudo apt-get install python-dev # to have the Python headers for building the pycaffe interface if you use default python

2.用Make编译安装Caffe

(1)使用如下git命令将caffe文件夹下载到根目录(如果不会使用git命令请参考 Ubuntu下安装Git以及面向Github的简单教程);或者直接从https://github.com/BVLC/caffe下载zip文件到根目录,解压缩为caffe文件夹。

$ git clone https://github.com/BVLC/caffe.git

(2)为pycaffe的安装下载准备好环境。

~$ cd caffe #进入下载好的caffe文件夹
~/caffe$ cd python #进入其中的python目录
~/caffe/python$ sudo pip install -r requirements.txt #安装需要的依赖包

如果pip安装过慢,请参考 Ubuntu16.10下配置pip国内镜像源加速安装进行加速。
(3)复制出Make.config文件并且打开。

~$ cd caffe #进入下载好的caffe文件夹
~/caffe$ cp Makefile.config.example Makefile.config
# 将官方示例的Makefile.config.example文件拷贝为Makefile.config文件
# 因为make只能编译后者不能编译前者
~/caffe$ sudo gedit Makefile.config
# 打开Makefile.config文件,根据我们自己的需要进行修改

(4)对Make.config要做的主要修改列出如下方所示。需要说明的是,因为每个人的需求不同(如有人用python3、有人使用opencv3等等),对Make.config的修改也应不同,这些在Make.config的注释里都有详细的说明,因此如果需求不一致应该参照注释进行特定修改。

  • 是否使用cuDNN(因为cuDNN加速不一定比caffe的CPU+GPU加速快,所以我没有改变这一项,需要改变的话修改为如下语句);
# 位于第4行
# cuDNN acceleration switch (uncomment to build with cuDNN).
USE_CUDNN := 1
  • 是否使用python layer(即是否支持python编写layer);
# 位于第91行
# Uncomment to support layers written in Python (will link against Python libs)
WITH_PYTHON_LAYER := 1
  • 为了使caffe能找到hdf5.h文件,按照如下部分修改INCLUDE_DIRSLIBRARY_DIRS变量,不修改会报错src/caffe/layers/hdf5_output_layer.cpp:3:18: fatal error: hdf5.h: 没有那个文件或目录
# 位于第94行
# Whatever else you find you need goes here.
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

(5)编译所有文件

~/caffe$ make all -j8 #8线程加速编译

终端返回信息如下时表示编译成功。
make all_1
make all_1

3.验证Caffe安装成功

(1)编译测试文件

~/caffe$ make test -j8
# 返回信息如下图

make test
(2)运行测试

~/caffe$ make runtest -j8
# 返回信息如下图
# 最后出现`PASSED`即通过测试

runtest
(3)optional:以上已经证明安装成功,可以尝试运行一个简单的lenet训练MNIST的例子。

~$ cd caffe # 进入caffe文件夹
~/caffe$ ./data/mnist/get_mnist.sh #下载Mnist数据库
~/caffe$ ./examples/mnist/create_mnist.sh #根据下载的mnist文件创建lmdb格式数据
~/caffe$ ./examples/mnist/train_lenet.sh #进行train和test
# 最终会返回测试准确率和loss
# 本机返回信息的最后四行如下
I0226 19:09:44.350036  5893 solver.cpp:418]     Test net output #0: accuracy = 0.9905
I0226 19:09:44.350070  5893 solver.cpp:418]     Test net output #1: loss = 0.0278143 (* 1 = 0.0278143 loss)
I0226 19:09:44.350076  5893 solver.cpp:336] Optimization Done.
I0226 19:09:44.350080  5893 caffe.cpp:250] Optimization Done.

4.pycaffe的剩余配置

除了以上在Makefile.config里的修改,为了能在python里用caffe还需要做一些配置如下。
(1)编辑环境变量

$ sudo gedit ~/.bashrc
# 在文件的最后添加export PYTHONPATH=$HOME/caffe/python:$PYTHONPATH
# 保存后关闭文件
$ source ~/.bashrc

(2) 修改Makefile.config

//69-70行,在70行的/usr/lib变成/usr/local/lib
PYTHON_INCLUDE := /usr/include/python2.7 \
        /usr/local/lib/python2.7/dist-packages/numpy/core/include

(3) 编译pycaffe

~$ cd caffe
~/caffe$ make pycaffe -j8
# 返回信息如下
touch python/caffe/proto/__init__.py
CXX/LD -o python/caffe/_caffe.so python/caffe/_caffe.cpp
PROTOC (python) src/caffe/proto/caffe.proto

5.验证pycaffe配置成功

$ python
# 在python命令行中import caffe,import成功不报错即说明安装成功
import caffe

参考资料

  1. cuda安装官方tutorial:http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html
  2. cudnn安装官方tutorial:http://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html#install-linux
  3. caffe安装官方tutorial:http://caffe.berkeleyvision.org/installation.html#compilation
  4. caffe训练MNIST:http://caffe.berkeleyvision.org/gathered/examples/mnist.html
  5. caffe训练ImageNet:http://caffe.berkeleyvision.org/gathered/examples/imagenet.html
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值