TensorFlow定义
- 关于 TensorFlow
TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。它灵活的架构让你可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU(或GPU),服务器,移动设备等等。TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。 - 什么是数据流图(Data Flow Graph)?
一、安装体系描述
最近学习TensorFlow关于GPU部分,安装过程中踩着坑总结着经验,最终成功。Cuda、cudnn与TensorFlow-gpu三者版本一定要对应(驱动版本与Cuda版本也要对应!),值得注意的是驱动问题,根据踩坑可得,准备好安装驱动的系统环境,安装cuda的同时安装驱动,接着安装cudnn与tensorflow-gpu,如此,成功安装。
二、驱动环境
关闭secure boot
- 重启电脑,进入BIOS
- 找到seure boot,一般在boot选项中
- 将 “Enable” 改为 “Disable”
检测NVIDIA驱动
## 查看系统是否存在NVIDIA驱动
# lspci | grep -i nvidia
禁用Nouveau驱动
- 查看nouveau是否运行
- 修改 /lib/modprobe.d/dist-blacklist.conf 文件
将nvidiafb注释掉
#blacklist nvidiafb
添加两行
blacklist nouveau
options nouveau modeset=0
- 修改 /etc/default/grub 文件
在GRUB_CMDLINE_LINUX中添加
rd.driver.blacklist nouveau nouveau.modeset=0
重建 initramfs image
# mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
# dracut /boot/initramfs-$(uname -r).img $(uname -r)
安装编译环境
搭建本地yum源参考https://blog.csdn.net/Sunny_Future/article/details/78420508或者自行搜索网络yum源,不再赘述。
# yum install gcc kernel-devel kernerl-hearders -y
三、安装 CUDA 8.0
安装带有GPU支持的TensorFlow,则需要安装CUDA与cuDNN,这里的坑在于版本不一致问题。切记选择对应版本。我这里安装的TensorFlow1.4.0,那么对应的CUDA版本为8.0,cuDNN版本为6.0
下载 CUDA 8.0 官网:https://developer.nvidia.com/cuda-80-ga2-download-archive
- 建议选择runfile(local),也就是 .run 文件
- 点击 Download
安装cuda
- 添加可执行权限
# chmod +x cuda_8.0.61_375.26_linux.run
- 进入文本模式
# init 3
- 开始安装
# sh cuda_8.0.61_375.26_linux.run
- 按 q 退出阅读
- 输入 accept
- 输入 y
- 输入 n
- 输入 n
- 输入 y
- 输入 /usr/local/cuda-8.0
- 添加软连接输入 y
- 输入 y
- 输入 /root
- 等待一分钟即可完成…
- 完成后,进入图形
# init 5
- 检验驱动
添加 cuda8.0 环境变量
- /etc/profile
# vim /etc/profile
##文末添加如下
PATH=$PATH:/usr/local/cuda-8.0/bin
export PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:/usr/local/cuda-8.0/lib64
- 生效之
# source /etc/profile
- ~/.bashrc
# vim ~/.bashrc
##文末添加如下
export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH
- 生效之
# source ~/.bashrc
- 检验 cuda
# nvcc --version
四、安装 CuDNN 6.0
下载 cuDNN 6.0
- 下载 cuDNN 6.0需要注册Nvidia账号,点击Download cuDNN。官网:https://developer.nvidia.com/cudnn
- 点击Join,进行注册
- 选择Create account
- 根据邮箱注册完成
- 此时[2018-11-1]qq邮箱可能会收不到验证邮件或者时间比较长,可以用网易邮箱,登陆后,选择合适版本进行下载
开始安装 CuDNN 6.0
- 暴力转化 tar.gz 格式
# mv cudnn-8.0-linux-x64-v6.0.solitairetheme8 cudnn-8.0-linux-x64-v6.0.tar.gz
- 解压指定路径
# tar -zxf cudnn-8.0-linux-x64-v6.0.tar.gz -C /tmp/
- 复制文件
# cp /tmp/cuda/include/* /usr/local/cuda-8.0/include/
# cp /tmp/cuda/lib64/lib* /usr/local/cuda-8.0/lib64/
安装 TensorFlow-GPU-1.4.0
- 安装 pip 工具
# wget https://bootstrap.pypa.io/get-pip.py
# python get-pip.py
- 解决依赖软件
# yum install -y gcc python-devel
- 在线安装 tensorflow-gpu-1.4.0
# pip install tensorflow-gpu==1.4
- 离线安装 tensorflow-gpu-1.4.0(仍需联网,下载依赖包。离线安装包 https://download.csdn.net/download/sunny_future/10747168 )
# pip install tensorflow_gpu-1.4.0-cp27-cp27mu-manylinux1_x86_64.whl
五、Hello TensorFlow-GPU
- 进入python
# python
- 输入语句
>>> import tensorflow as tf
>>> hello = tf.constant("Hello TensorFlow-GPU!!")
>>> sess = tf.Session()
>>> print(sess.run(hello))
- 运行结果
- 整体效果如下,Hello TensorFlow-GPU!!
六、TensorFlow的特征
- 高度的灵活性
TensorFlow 不是一个严格的“神经网络”库。只要你可以将你的计算表示为一个数据流图,你就可以使用Tensorflow。你来构建图,描写驱动计算的内部循环。我们提供了有用的工具来帮助你组装“子图”(常用于神经网络),当然用户也可以自己在Tensorflow基础上写自己的“上层库”。定义顺手好用的新复合操作和写一个python函数一样容易,而且也不用担心性能损耗。当然万一你发现找不到想要的底层数据操作,你也可以自己写一点c++代码来丰富底层的操作。 - 真正的可移植性(Portability)
Tensorflow 在CPU和GPU上运行,比如说可以运行在台式机、服务器、手机移动设备等等。想要在没有特殊硬件的前提下,在你的笔记本上跑一下机器学习的新想法?Tensorflow可以办到这点。准备将你的训练模型在多个CPU上规模化运算,又不想修改代码?Tensorflow可以办到这点。想要将你的训练好的模型作为产品的一部分用到手机app里?Tensorflow可以办到这点。你改变主意了,想要将你的模型作为云端服务运行在自己的服务器上,或者运行在Docker容器里?Tensorfow也能办到。Tensorflow就是这么拽。 - 将科研和产品联系在一起
过去如果要将科研中的机器学习想法用到产品中,需要大量的代码重写工作。那样的日子一去不复返了!在Google,科学家用Tensorflow尝试新的算法,产品团队则用Tensorflow来训练和使用计算模型,并直接提供给在线用户。使用Tensorflow可以让应用型研究者将想法迅速运用到产品中,也可以让学术性研究者更直接地彼此分享代码,从而提高科研产出率。 - 自动求微分
基于梯度的机器学习算法会受益于Tensorflow自动求微分的能力。作为Tensorflow用户,你只需要定义预测模型的结构,将这个结构和目标函数(objective function)结合在一起,并添加数据,Tensorflow将自动为你计算相关的微分导数。计算某个变量相对于其他变量的导数仅仅是通过扩展你的图来完成的,所以你能一直清楚看到究竟在发生什么。 - 多语言支持
Tensorflow 有一个合理的c++使用界面,也有一个易用的python使用界面来构建和执行你的graphs。你可以直接写python/c++程序,也可以用交互式的ipython界面来用Tensorflow尝试些想法,它可以帮你将笔记、代码、可视化等有条理地归置好。当然这仅仅是个起点——我们希望能鼓励你创造自己最喜欢的语言界面,比如Go,Java,Lua,Javascript,或者是R。 - 性能最优化
比如说你又一个32个CPU内核、4个GPU显卡的工作站,想要将你工作站的计算潜能全发挥出来?由于Tensorflow 给予了线程、队列、异步操作等以最佳的支持,Tensorflow 让你可以将你手边硬件的计算潜能全部发挥出来。你可以自由地将Tensorflow图中的计算元素分配到不同设备上,Tensorflow可以帮你管理好这些不同副本。
七、补充
- NVIDIA驱动版本务必和电脑一致;
- 另外,如果在安装cuda时出现以下情况;
Extraction failed.
Ensure there is enough space in /tmp
Signal caught, cleaning up
解决办法
1. 将selinux设置为disabled,重启电脑
2. 安装NVIDIA相关驱动,重启电脑
3. 再次安装cuda
- 望读者详细参考,祝好运!