Ubuntu16.04+asus-z170+gtx1060搭建TensorFlow-GPU

Ubuntu16.04+asus-z170+gtx1060搭建TensorFlow-GPU

首篇博客就写写搭建TensorFlow-1.2.1-GPU,作为DeepLearning学习的开始。在整个搭建的过程中踩过大部分的坑,绝大多数时间都是黑人问号.jpg。参考过很多搭建TensorFlow的技术博客,一步一步绕过雷区,终于修成正果,谨以此文以记之。先上本人台式机硬件相关配置:

  • 华硕 z170 pro Gaming
  • NVIDIA gtx1060

    主要安装步骤为:

  • 1、安装Ubuntu16.04
  • 2、安装CUDA8.0
  • 3、安装cuDNN5.1
  • 4、安装anconda2
  • 5、安装Tensorflow-gpu

安装Ubuntu16.04

  • 下载Ubuntu16.04的镜像文件
  • 使用UltraISO制作Ubuntu16.04安装U盘
    在写入硬盘映像时,要点击‘便捷启动’>‘写入新的驱动器引导扇区’>‘Syslinux’ .
  • 开启主机时进入BIOS界面,选择U盘启动
    这一步往后就是熟悉的Ubuntu安装界面了。
  • 打开终端,更新源、软件包
$ sudo apt-get update
$ sudo apt-get upgrade 

安装CUDA8.0

TensorFlow 在使用GPU加速时,需要CUDA作为GUP的驱动程序。在Ubuntu下安装CUDA8.0真是耗费了九牛二虎之力。

  • 下载CUDA8.0安装文件
    根据网页指示很容易找到合适的安装版本,‘Installer Type’这个选项一定要为runfile(local)文件,我下载的版本是cuda_8.0.61_375.26_linux.run

  • 阅读CUDA官方安装教程
    要想成功安装,就必须要老老实实地按照教程中地基本法。下面挑出重要地步骤。

  • 安装前检查

    1、检查电脑是否有CUDA可驱动地GPU,这里我们肯定有,输入以下命令后就能查看。

$ lspci | grep -i nvidia

2、检查Linux版本是否与下载的CUDA安装文件吻合,这里我们肯定也是没问题的,输入以下命令就能查看。

$ uname -m && cat /etc/*release

3、检查是否安装GCC及版本。这里也肯定有的,Ubuntu16.04自带的GCC编译器版本为5.4.0,输入以下命令就能看到

$ gcc -v

看到有博客说CUDA8.0不支持5.0以上的编译器,所以要将编译器的版本降到4.9,我自己没在官网上看到这一说法,不过我直接照做了,搬运以下这位博主‘蓝色荣誉’的相关代码:

$ sudo apt-get install g++-4.9
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 20
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 10
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 20
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 10
$ sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
$ sudo update-alternatives --set cc /usr/bin/gcc
$ sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
$ sudo update-alternatives --set c++ /usr/bin/g++

4、检查系统内核版本,我的版本是4.4.0-83-generic

$ uname -r

安装对应的kernel header 和开发包,其实已经安装了

$ sudo apt-get install linux-headers-$(uname -r) 

这里还需要安装内核源代码(linux source),否则在安装CUDA8.0时,会遇到 unable to locate the kernel source,解决方法由这篇博客提供,感谢博主‘轱辘Smile’,搬运如下:
(注:我没有安装博客里所讲的dkms)

$ uname -r  //查看系统版本  
$ apt search linux-source   //查找对应版本的kernel source  
$ sudo apt install linux-source-4.4.0 
  • 安装Runfile文件
    这里对应官方教程第四项内容,步步惊心!
    1、关闭Nouveau驱动
    通过以下命令可以看到Nouveau驱动已经被启用,我们现在要禁掉它。
$ lsmod | grep nouveau

创建/etc/modprobe.d/blacklist-nouveau.conf并写入以下内容:

$ sudo gedit /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0

重新生成新的内核启动文件

$ sudo update-initramfs -u

重启之后再次检查一下Nouveau驱动是否禁用,输入以下命令,没有输出则成功,

$ lsmod | grep nouveau

2、手动安装CUDA8.0
安装CUDA过程中要进入text mode,通过ctrl+alt+F1,然后登录账户,关闭图形化界面

$ sudo service lightdm stop

进入CUDA安装文件所在路径,开始安装:

$ sudo sh cuda_8.0.61_375.26_linux.run

安装时要小心选择,并且使用默认安装路径。。。

Do you accept the previously read EULA?
accept
Install NVIDIA Accelerated Graphics Diver for Linux-x86_64 375.26?
yes
Do you want to install the OpenGL libraries?
no
Do you want to run nvidia-xconfig?
no
Install the CUDA 8.0 Toolkit?
yes
Do you want to install a symbolic link at /usr/local/cuda?
yes
Install the CUDA 8.0 Samples?
yes

最终CUDA8.0被安装在了/usr/local/cuda-8.0,并且/usr/local/cuda链接到它。在Home文件夹下面还安装了NVIDIA_CUDA-8.0_Samples,可以用来最终检查CUDA是否安装成功。
3、检查安装情况
首先检查是否生成了装置文件/dev/nvidia*,应该出现如下结果

$ ls /dev/nvidia*
/dev/nvidia0  /dev/nvidiactl  /dev/nvidia-uvm

没有的话还有救。。。参考博客,感谢庞贝船长,编辑启动脚本/etc/rc.local

$ sudo gedit /etc/rc.local

删除第一行#!/bin/sh -e中的-e,这步很重要,否则它不会加载这文本的内容。然后在注释之后,before exit 0之前添加以下代码:

/sbin/modprobe nvidia

if [ "$?" -eq 0 ]; then
  # Count the number of NVIDIA controllers found.
  NVDEVS=`lspci | grep -i NVIDIA`
  N3D=`echo "$NVDEVS" | grep "3D controller" | wc -l`
  NVGA=`echo "$NVDEVS" | grep "VGA compatible controller" | wc -l`

  N=`expr $N3D + $NVGA - 1`
  for i in `seq 0 $N`; do
    mknod -m 666 /dev/nvidia$i c 195 $i
  done

  mknod -m 666 /dev/nvidiactl c 195 255

else
  exit 1
fi

/sbin/modprobe nvidia-uvm

if [ "$?" -eq 0 ]; then
  # Find out the major device number used by the nvidia-uvm driver
  D=`grep nvidia-uvm /proc/devices | awk '{print $1}'`

  mknod -m 666 /dev/nvidia-uvm c $D 0
else
  exit 1
fi

重启后再次检查。也可以先运行这个脚本,看看奏不奏效。写脚本的时候要在上面的代码最前面加上一行

#!/bin/bash

一如既往地没有,一如既往地懵圈,报错说:

Error: could not insert 'nvidia': Required key not available

在Google上找到了问题原因,要在开机时的BIOS中disable secure boot。最终在YouTube视频上,结合视频下面的评论找到了针对华硕 z170主板disable secure boot的方法:
进入Boot菜单 > 进入secure boot > OS type 选择 Other OS > 进入key management > 先保存secure boot key > 再删除PK management > 保存退出
然后就能看到那三个装置文件了,感动!

4、添加CUDA8.0到环境变量
打开系统配置文件,在文件最后添加以下路径:

$ sudo gedit ~/.bashrc
export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:/usr/local/cuda-8.0/extras/CUPTI/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda-8.0

注意路径不能是链接文件/usr/local/cuda必须是/usr/local/cuda-8.0
使路径立即生效

$ source ~/.bashrc

5、检查CUDA8.0安装情况

检查已经载入驱动:

$ cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module  375.26  Thu Dec  8 18:36:43 PST 2016
GCC version:  gcc version 4.9.3 (Ubuntu 4.9.3-13ubuntu2)

检查CUDA Toolkit:

$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2016 NVIDIA Corporation
Built on Tue_Jan_10_13:22:03_CST_2017
Cuda compilation tools, release 8.0, V8.0.61

以后常用到的监控GPU的命令:

$ nvidia-smi
Mon Jul 10 22:37:48 2017       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.26                 Driver Version: 375.26                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 106...  Off  | 0000:01:00.0     Off |                  N/A |
|  0%   36C    P0    27W / 150W |      0MiB /  6072MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

太美了快哭了。。。
进NVIDIA_CUDA-8.0_Samples目录编译

$ cd ~/NVIDIA_CUDA-8.0_Samples/
$ sudo make

运行较长的一段时间后,最后一行是Finished building CUDA samples,编译结果会放在NVIDIA_CUDA-8.0_Samples目录下的bin目录。

$ cd ~/NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release
$ ./deviceQuery

如果CUDA安装正确并且配置也正确,deviceQuery的输出结果如下:

./deviceQuery Starting...

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

Detected 1 CUDA Capable device(s)

Device 0: "GeForce GTX 1060 6GB"
  CUDA Driver Version / Runtime Version          8.0 / 8.0
  CUDA Capability Major/Minor version number:    6.1
  Total amount of global memory:                 6072 MBytes (6367150080 bytes)
  (10) Multiprocessors, (128) CUDA Cores/MP:     1280 CUDA Cores
  GPU Max Clock rate:                            1848 MHz (1.85 GHz)
  Memory Clock rate:                             4004 Mhz
  Memory Bus Width:                              192-bit
  L2 Cache Size:                                 1572864 bytes
  Maximum Texture Dimension Size (x,y,z)         1D=(131072), 2D=(131072, 65536), 3D=(16384, 16384, 16384)
  Maximum Layered 1D Texture Size, (num) layers  1D=(32768), 2048 layers
  Maximum Layered 2D Texture Size, (num) layers  2D=(32768, 32768), 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:                     No
  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 = 8.0, CUDA Runtime Version = 8.0, NumDevs = 1, Device0 = GeForce GTX 1060 6GB
Result = PASS

看到Result = PASS就是成功的意思!一步一步小心过来,应该不会出现问题。
再执行一个例子随便看看(反正我看不懂在干些什么)

$ ./bandwidthTest
[CUDA Bandwidth Test] - Starting...
Running on...

 Device 0: GeForce GTX 1060 6GB
 Quick Mode

 Host to Device Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes)    Bandwidth(MB/s)
   33554432         11851.4

 Device to Host Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes)    Bandwidth(MB/s)
   33554432         11945.4

 Device to Device Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes)    Bandwidth(MB/s)
   33554432         143910.8

Result = PASS

安装cuDNN v5.1

cuDNN是CUDA中的一个库,TensorFlow GPU加速时要使用其中的函数,似乎目前的TensorFlow GPU不支持v6.0,所以我选择v5.1。进入cuDNN官网下载,需要注册帐号,不算麻烦。
选择Download cuDNN v5.1 (Jan 20, 2017), for CUDA 8.0,然后选择cuDNN v5.1 Library for Linux,下载的压缩包名称为cudnn-8.0-linux-x64-v5.1.tgz。其中包含cuDNN库的一些头文件等等。所以需要解压,并将其中对应的文件复制到/usr/local/cuda-8.0

$ tar -xvzf cudnn-8.0-linux-x64-v5.1.tgz
$ sudo cp cuda/include/cudnn.h /usr/local/cuda-8.0/include
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda-8.0/lib64
$ sudo chmod a+r /usr/local/cuda-8.0/include/cudnn.h /usr/local/cuda-8.0/lib64/libcudnn*

安装Anaconda2

通过 Anaconda来安装Tensorflow-GPU是最方便的方法,墙裂推荐,用过的都说好!!我一般用python2.7,所以安装Anaconda2,去官网下载,下载完毕后运行以下命令进行安装,python各种包一键安装,爽到炸裂!

$ sudo bash Anaconda2-4.4.0-Linux-x86_64.sh

注意选择添加Anaconda到环境变量。

安装TensorFlow-GPU

具体教程可以参考TensorFlow 官方文档中文版。反正也是傻瓜安装,省心!
建立一个 conda 计算环境名字叫tensorflow,刚安装好Anaconda后要重新打开终端才能使用conda命令,然后打开这个环境(以后每次用tensorflow时都要先打开这个环境!)。

$ conda create -n tensorflow python=2.7
$ source activate tensorflow
(tensorflow) XXX@XXX-XXX:~$ 

使用pip安装tensorflow-gpu,自动选择当前最新的版本1.2.1,选择https://pypi.tuna.tsinghua.edu.cn/simple镜像,感受飞一般的速度。

$ pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow-gpu

小试一下

$ python

>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print sess.run(hello)
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print sess.run(a+b)
42
>>>

当启用一个session时,会看到启动了GPU加速,美滋滋!

Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1060 6GB, pci bus id: 0000:01:00.0)

后记

最终漫长的搭建TensorFlow-GPU大功告成了。其实一开始用台式机在Ubuntu下安装时遇到各种麻烦,转战到Windows 10,但最后还是咬咬牙在Linux系统下建立的深度学习环境。台式机在安装Ubuntu14.04时巨麻烦,涉及到双显卡的问题,Ubuntu16.04就畅通无阻。之前一直卡在安装CUDA8.0上,很多博客都介绍先安装NVIDIA binary driver(软件更新中的附加驱动),其实我发现没有必要,因为在安装CUDA Toolkit时就会安装N卡驱动,关键不会出错!
Windows 10 上安装TensorFlow-GPU就相对容易很多,网上也有很多教程,大致的步骤也是2-5步。除非有机会再在Win下安装,否则不会写安装过程了。与Linux下安装唯一不同的是Windows 10上面必须是python3、CUDA8.0和cuDNN v5.1搭建TensorFlow-GPU 1.2.1版本。也是踩过很多雷区,亿脸懵逼。
感谢CSDN和简书上各位神通广大的博主,更可靠的还是Google。。。
整个过程中需要用到的软件提供一个百度云:

链接: http://pan.baidu.com/s/1sl2ROct 密码: h196

参考文献

  1. http://blog.csdn.net/zhaoyu106/article/details/52793183/
  2. http://blog.csdn.net/zhaoyu106/article/details/52793183/
  3. http://www.jianshu.com/p/35c7fde85968
  4. http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#running-binaries__valid-results-from-sample-cuda-devicequery-program
  5. http://wiki.jikexueyuan.com/project/tensorflow-zh/get_started/os_setup.html
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值