(2019.7.19)小白一枚,如有错误,请指正。
前言
最近打算开始学习tensorflow框架,tensorflow有cpu版和gpu版,gpu运算速度要比cpu快很多(具体原因,大家想要了解可以自行百度)。所以第一步就是安装tensorflow的gpu环境,win10和ubuntu16.04都装了,踩了不少坑,所以在此记录一下,希望帮到需要帮助的人。并不是所有的运算都可以用gpu运行,gpu版也会调用cpu去运行,也可以自己指定使用cpu还是那块gpu运行(如有多块gpu),所以安装gpu版就行。
win10下tensorflow-gpu安装
win10下安装相对简单一点。有一块破烂显卡就行,别是上古年代的就行。(实测破烂显卡那比cpu也是快了很多)。
1.安装驱动
英伟达显卡驱动安装,这个windows下很简单了,就不用说了把。
我在两台电脑上尝试安装了tensorflow-gpu,一台显卡是GT730(这算很破了吧),一台RTX2060 SUPER。这次做演示,我就把GTX 730的所有东西都卸载了重新装一遍。
2.查看可以安装cuda版本
打开英伟达显卡控制面板 -> 帮助 -> 系统信息 -> 组件
可以看到CUDA版本10.1.165,所以选择安装CUDA 10版本。理由吗,一会再说。
3.安装tensorflow-gpu库
python版本 3.6.4
本人安装包一般就是喜欢拿pip装,软件就随便用。电脑上的包都可以拿pip来管理。
pip list查看电脑的包
可以看到我安装了1.14版本。如果你自己安装了tensorflow的cpu版或者gpu版本。首先卸载画红线这三个。(如果只装了gpu版,不卸载也行,保险起见)
pip uninstall 包名。
tensorflow-gpu 和 cuda 是有个版本对应的。现在最新的tensordlow版本是1.14,当然还有2.0测试版,如果显卡太旧可以自行百度查下版本对应表。我觉得这破烂GT730都能带得起cuda10.0,再烂都拿不出手了。
可以先建立一个虚拟环境,在虚拟环境下装包。 python -m venv 虚拟环境名。也可以直接在本地装。虚拟环境不知道怎么用可以查下。
直接 pip install tensorflow-gpu==1.14.0 安装包。1.14.0是自己指定得包版本。记得修改pip源。要不然慢出翔。
安装完成,在控制台下进入python环境。import tensorflow as tf 报错。
报错,说这个文件找不到,我个人认为100对应得就是10.0版本,因为之前装了10.1版本,里面有个101文件。或许也可以通过修改源码去让1.14可以对应上cuda10.1版本,这里就不做尝试了。下面也说了让我们去下载CUDA10.0。那个链接直接链接到了10.1版本,坑死我了。
4.安装CUDA+cudnn
所以我们开始安装cuda+cudnn
上面确定了我们要安装cuda10.0版本,直接百度cuda10.0
下载完成直接傻瓜式一件安装。(可能会多安一些没用得东西,不管了,装就完事了)
控制台下执行 nvcc -V
ok,cuda安装完成,如果出不来就是出错了,有的博客说是加环境变量,安装会自动加的。可以检查一下。我这次装的时候就因为没有卸载干净,又鼓捣了半天给装上了。
python环境
import tensorflow as tf 报错
这个就是因为没有装上cudnn,ok。直接百度cudnn。
下载,解压。把以下三个文件内容复制到cuda相应的文件夹里。
觉得还是在详细写以下吧:
H:\软件\tensorflow-gpu\win10\10.0\cuda\bin\cudnn64_7.dll --> C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin
H:\软件\tensorflow-gpu\win10\10.0\cuda\include\cudnn.h --> C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\include
H:\软件\tensorflow-gpu\win10\10.0\cuda\lib\x64\cudnn.lib --> C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\lib\x64
到此,如果不出错就是完事了。
5.检测是否安装成功
控制台进入python环境
import tensorflow as tf
成功。
最后通过代码检测一下能否调用gpu运算。
#coding=gb2312
import tensorflow as tf
with tf.device('/cpu:0'):
a = tf.constant([1.0,2.0,3.0],shape=[3],name='a')
b = tf.constant([1.0,2.0,3.0],shape=[3],name='b')
with tf.device('/gpu:0'):
c = a+b
#注意:allow_soft_placement=True表明:计算设备可自行选择,如果没有这个参数,会报错。
#因为不是所有的操作都可以被放在GPU上,如果强行将无法放在GPU上的操作指定到GPU上,将会报错。
sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True,log_device_placement=True))
#sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
sess.run(tf.global_variables_initializer())
print(sess.run(c))
#这段代码是转载的,因为本身还没有开始学习语法。忘了转载哪位博主的,下次看到会备注的。
很简单就能看出来,a,b变量的定义是在cpu运行的,初始化和add操作是在gpu运行的。如果不指定的话是默认在gpu运行的。
ubuntu16.04下tensorflow-gpu安装
(有时间写)