最近在公司做深度学习相关的学习和实验,原来一直在自己的电脑上安装虚拟机跑,速度实在太慢,主机本身性能太弱,独显都没有,物理安装Ubuntu也没多大意义,所以考虑用公司性能最强悍的游戏主机(i7 6700+GTX 1070) 做实验,这台主机平时是用来跑HTC VIVE的,现在归我用了o(*≧▽≦)ツ。

原本以为整个一套安装下来会很顺利,一路火花带闪电的就完成了,没想到刚开始就掉坑了,然而这仅仅是悲剧的开始,路上坑还很多,刚从这个坑里爬出来,没走两步又掉另一个坑里了,下面慢慢絮叨一下爬坑过程。

一. 安装Ubuntu16.04

1.1 下载Ubuntu ISO 镜像

从Ubuntu官网下载ISO镜像,选择Ubuntu 16.04.1 Desktop (64-bit) ,LTS表示这是一个长期支持版(Long Term Support),一定要选64位的版本,因为很多深度学习框架都只支持64位。

1.2 制作U盘

找一个空的U盘,把刚下载到的ISO镜像写入到U盘中。注意,这里并不是把ISO文件解压到U盘中,而是使用工具把ISO文件刻录到U盘中,区别是后者可以引导系统启动,前者不能。

我使用的是UltraISO软碟通,使用方法网上教程很多,这里不再赘述。完成后就得到了一个可以引导启动的Ubuntu USB安装盘。

1.3 硬盘分区

主机原来的Window 10系统还是需要保留的,毕竟不能妨碍了小伙伴们平时最大的兴趣爱好。所以考虑安装双系统,在硬盘上找了一个比较空的分区,把资料复制到其他盘后,删除这个分区,空闲出来的空间留给Ubuntu用。

双系统安装时可能会遇到分区个数的问题,MBR类型的分区最多只能有4个主分区,而Ubuntu安装会占用两个主分区(一个挂载swap,一个挂载根),所以要保证原有主分区不超过2个,GPT类型分区的主分区没有个数限制。

1.4 安装系统

设置BIOS从U盘启动后安装Ubuntu,现在的系统安装都很傻瓜,看提示很快安装完成。

注意:系统安装完成,登录用户后只能看到桌面壁纸,右键菜单不停闪烁,且tty1-6均黑屏,接着看下面如何解决。

二. 安装GTX1070驱动

登录用户后只能看到桌面壁纸,这个现象出现的原因:通常是由于显卡驱动没有合适安装、设定、启用造成的。解决办法:

  • 重启电脑,在开机启动项(GRUB菜单选择处)画面按e进入启动项编辑模式,在Linux那一行最后面空一格然后加入“acpi_osi=linux nomodeset”,然后按F10使用编辑好的启动项启动(nomodest参数是告诉内核不要加载显卡驱动而用BIOS模式,直到图形界面运行,详细介绍看这里)。
  • 再次开机后发现还是在不停的闪,但是这次tty1-6可以用了
  • 按Ctrl+Alt+F1切换到控制台界面,输入用户名密码登录
  • 安装NVIDIA显卡驱动,步骤:
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-367
sudo apt-get install mesa-common-dev
sudo apt-get install freeglut3-dev
  • 之后重启主机

登录后桌面不闪了但仍然只有桌面和鼠标,这时候需要重新安装一下Unity桌面,步骤:

sudo apt-get update
sudo apt-get install --reinstall ubuntu-desktop
sudo apt-get install unity

安装完成后重启,一切正常。

三. 下载和安装CUDA

这里是CUDA 8的下载地址:https://developer.nvidia.com/cuda-release-candidate-download,需要登录一个Nvidia开发者账号。我选择了Ubuntu16.04 runfile安装类型,大小在1.4G左右。
[图片]

下载完成后,直接运行这个文件:

sudo sh cuda_8.0.27_linux.run --tmpdir=/opt/temp/

运行这个文件后,会遇到几个问题,让你选择yes或者no。其中一个是询问是否安装NVIDIA驱动程序的,这个要选择no,不然前面安装的驱动就白装了。

安装完成后,家目录下会生成一个NVIDIA_CUDA-8.0_Samples的文件夹,这里可以测试一下CUDA 8。

cd ~/NVIDIA_CUDA-8.0_Samples/1_Utilities/deviceQuery
make && ./deviceQuery

./deviceQuery Starting...

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

Detected 1 CUDA Capable device(s)

Device 0: "GeForce GTX 1070"
  CUDA Driver Version / Runtime Version          8.0 / 8.0
  CUDA Capability Major/Minor version number:    6.1
  Total amount of global memory:                 8105 MBytes (8499167232 bytes)
  (15) Multiprocessors,(128) CUDA Cores/MP:     1920 CUDA Cores
  GPU Max Clock rate:                            1759 MHz (1.76 GHz)
  Memory Clock rate:                             4004 Mhz
  Memory Bus Width:                              256-bit
  L2 Cache Size:                                 2097152 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,z): (1024,1024,64)
  Max dimension size of a grid size    (x,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 = 8.0,CUDA Runtime Version = 8.0,NumDevs = 1,Device0 = GeForce GTX 1070
Result = PASS

四. 下载和安装cuDNN

cuDNN是The NVIDIA CUDA® Deep Neural Network library的简称,它是一个使用GPU加速的深度神经网络库。我选择了cuDNN v5.1。

安装cuDNN非常简单:

tar -zxvf cudnn-8.0-linux-x64-v5.0-ga.tgz

得到一个cuda文件夹,把其中的文件拷贝到系统相应目录

sudo cp -a cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp -a cuda/lib64/libcudnn* /usr/local/cuda/lib64/

五. 安装TensorFlow

TensorFlow官方给出的文档中详细的介绍了各种安装方式:https://github.com/jikexueyuanwiki/tensorflow-zh/blob/master/SOURCE/get_started/os_setup.md 。
最方便、快速的方式当然是直接安装已经编译好的包,其中也提供了开启GPU加速的版本,只不过只能在CUDA 7.5 和cuDNN v4环境下使用。既然环境不符合,不能省事儿,那就只好从源码安装。

5.1 安装Bazel

Bazel是一个项目构建工具,类似于Make的工具。Bazel原本是Google为其内部软件开发的特点量身定制的工具,想来TensorFlow原本就是Google内部的一个项目,使用Bazel再正常不过。

首先,安装一下后面会用到的几个依赖包

sudo apt-get update
sudo apt-get install python-pip python-numpy swig python-dev python-wheel
sudo apt-get install pkg-config zip g++ zlib1g-dev unzip

安装 Java JDK

sudo apt-get install default-jdk

在https://github.com/bazelbuild/bazel/releases中下载适合的最新稳定版。
然后运行下面的命令

./bazel-0.3.2-installer-linux-x86_64.sh --user

将执行路径output/bazel 添加到$PATH环境变量后bazel工具就可以使用了。

5.2 编译TensorFlow

克隆TensorFlow仓库

git clone --recurse-submodules https://github.com/tensorflow/tensorflow

配置TensorFlow的CUDA选项

$ ./configure
Do you wish to bulid TensorFlow with GPU support? [y/n] y GPU support will be enabled for TensorFlow

configure会下载很多依赖的包,这些包也不是太大,但是网络不给力,几十K的包下载时经常中断,后果就是需要再次运行configure,从头下载,每次不是因为这个包断了就是那个包,最终试了可能有十几遍吧才全部成功,强烈谴责这种不做缓存的行为。

编译目标程序,开启GPU支持
从源码树的根路径执行:

$ bazel build -c opt --config=cuda //tensorflow/cc:tutorials_example_trainer

$ bazel-bin/tensorflow/cc/tutorials_example_trainer --use_gpu
# 大量的输出信息. 这个例子用 GPU 迭代计算一个 2x2 矩阵的主特征值 (major eigenvalue).
# 最后几行输出和下面的信息类似.
000009/000005 lambda = 2.000000 x = [0.894427 -0.447214] y = [1.788854 -0.894427]
000006/000001 lambda = 2.000000 x = [0.894427 -0.447214] y = [1.788854 -0.894427]
000009/000009 lambda = 2.000000 x = [0.894427 -0.447214] y = [1.788854 -0.894427]

注意,GPU 支持需通过编译选项 “–config=cuda” 开启.

创建 pip 包并安装

$ bazel build -c opt //tensorflow/tools/pip_package:build_pip_package

这条命令运行时出现一个错误

~/download/tensorflow$ bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
ERROR: /home/fct/download/tensorflow/tensorflow/python/BUILD:1777:1: in cc_library rule //tensorflow/python:tf_session_helper: non-test target '//tensorflow/python:tf_session_helper' depends on testonly target '//tensorflow/python:construction_fails_op' and doesn't have testonly attribute set.
ERROR: Analysis of target '//tensorflow/tools/pip_package:build_pip_package' Failed; build aborted.
INFO: Elapsed time: 0.134s

在tensorflow/python/BUILD 中找到tf_cuda_library,注释掉testonly = 1,这一行解决

$ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

# .whl 文件的实际名字与你所使用的平台有关
$ pip install /tmp/tensorflow_pkg/tensorflow-0.5.0-cp27-none-linux_x86_64.whl

测试TensorFlow

训练一个神经网络模型用来做测试,从源代码树根路径执行:

$ cd tensorflow/models/image/mnist
$ python convolutional.py
Succesfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
Succesfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
Succesfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
Succesfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.
Extracting data/train-images-idx3-ubyte.gz
Extracting data/train-labels-idx1-ubyte.gz
Extracting data/t10k-images-idx3-ubyte.gz
Extracting data/t10k-labels-idx1-ubyte.gz
Initialized!
Epoch 0.00
Minibatch loss: 12.054,learning rate: 0.010000
Minibatch error: 90.6%
Validation error: 84.6%
Epoch 0.12
Minibatch loss: 3.285,learning rate: 0.010000
Minibatch error: 6.2%
Validation error: 7.0%
...
...

常见问题

如果在尝试运行一个TensorFlow程序时出现一下错误:

ImportError: libcudart.so.8.0: cannot open shared object file: No such file or directory

这个错是程序所依赖的动态库找不到导致的,只需要在环境变量LD_LIBRARY_PATH中添加
/usr/local/cuda/lib64即可。我的做法是在~/.bashrc最后添加

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64

深度学习主机环境配置: Ubuntu16.04 + GeForce GTX 1070 + CUDA8.0 + cuDNN5.1 + TensorFlow的更多相关文章

  1. 如何在Android平台上使用Tensorflow?

    谷歌为开发者提供了TENSORFLOW开源软件.有什么方法可以在Android上使用它吗?

  2. Android中的自然语言处理API

    我正在尝试制作类似于thiswebsite的Android应用程序.问题是我对自然语言处理领域很陌生.我不希望实现太多,只是提供用户与应用程序的一些交互,给他一种感觉,他确实在与某人聊天.基本上,我只是捕获用户输入的文本并将其发送到API并显示从API检索的结果.我遇到了http://opennlp.apache.org/和http://gate.ac.uk/,但不知道如何在我的Android应用

  3. 直接在Android NDK端使用tensorflow(不使用JAVA api)

    如何在Android上使用Capis构建和链接tensorflow库.你能指导我吗?

  4. 是否有可能在Android上训练tensorflow?

    似乎没有CAPI来训练张量流图并保存到pb.so,在Android平台上有什么办法吗?我可以在Android设备上使用pythonAPI构建tensorflow工作区吗?

  5. python深度学习tensorflow1.0参数和特征提取

    这篇文章主要为大家介绍了python深度学习tensorflow1.0参数和特征提取,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  6. python人工智能tensorflow函数tf.get_variable使用方法

    这篇文章主要为大家介绍了python人工智能tensorflow函数tf.get_variable使用方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  7. python机器学习GCN图卷积神经网络原理解析

    这篇文章主要为大家介绍了GCN图卷积神经网络原理及代码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  8. python人工智能tensorflow优化器Optimizer算法汇总

    这篇文章主要为大家介绍了python人工智能tensorflowtf优化器Optimizer算法汇总,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  9. Pytorch深度学习addmm()和addmm_()函数用法解析

    这篇文章主要为大家介绍了Pytorch中addmm()和addmm_()函数用法解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. python神经网络tensorflow利用训练好的模型进行预测

    这篇文章主要为大家介绍了python神经网络tensorflow利用训练好的模型进行预测,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

随机推荐

  1. crontab发送一个月份的电子邮件

    ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

  2. 模拟两个ubuntu服务器计算机之间的慢速连接

    我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

  3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

    我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

  4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

    我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

  5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

    &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

  6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

    我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

  7. ubuntu – vagrant无法连接到虚拟框

    当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

  8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

    我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

  9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

    我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

  10. 检查ubuntu上安装的rubygems版本?

    如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

返回
顶部