最近由于论文需要,急需搭建Tensorflow环境,16年底当时Tensorflow版本号还没有过1,我曾按照手册搭建过CPU版本。目前,1.7算是比较新的版本了(也可以从源码编译1.8版本的Tensorflow)。
安装步骤:
不能急于求成,安装任何东西前都应该先阅读用户手册与FAQ,弄清软件依赖与安装步骤。对于Tensorflow来说,官网有时上不去,建议关注Tensorflow的GitHub(https://github.com/tensorflow/tensorflow),GitHub上只是指明了Python版本,对于CUDA和cuDNN并没有过多的说明,但是在releases页面,尤其是Tensorflow1.7部分做了如下说明:
- Tensorflow 1.7 may be the last time we support CUDA versions below 8.0.Starting with Tensorflow 1.8 release, 8.0 will be the minimum supported version.
- Tensorflow 1.7 may be the last time we support cuDNN versions below 6.0. Starting with Tensorflow 1.8 release, 6.0 will be the minimum supported version.
如果大家不愿意深究下去,我的建议是:
- 没有GPU或者GPU算力达不到3.0的(带GPU加速的Tensorflow版本依赖cuDNN,而cuDNN又需要3.0算力的GPU支持),果断选择linux,因为在linux下,Python可选择的版本更多。
- 有GPU,并且符合算力3.0以上的要求,建议考虑windows平台,当然,也可以选linux,但是驱动相关问题需要自己解决,尤其是涉及到双显卡的笔记本时,比较麻烦,我在本文后面给出了一个FAQ,专门讨论英伟达相关驱动问题。
平台与驱动问题解决后,下面就是下载Tensorflow和对应的Python开发环境了,有一点,谷歌做的不错——Tensorflow直接是一个whl格式的Python包。很多教程是让人下载Anaconda集成开发环境,我给出的建议是:如果你只是想安装一个Python版本,并且没什么非常特别的需求话,可以不用安装Anaconda,如果你在linux下进行开发,我倒是比较推荐Anaconda,毕竟可以省去不少事!这里要说一下,tensorflow的GitHub上给出的windows+GPU 1.7版本只有Python3.5与3.6可选,如果你非要用Python2,那就只能选linux了~而在另外一个whl包聚集地:https://www.lfd.uci.edu/~gohlke/pythonlibs/,作者说的更加简明扼要(注意,页面给出的是CPU版本的):
TensorFlow, computation using data flow graphs for scalable machine learning.The CUDA builds require CUDA 8 and CUDNN 6.
当Python安装好并且下载好Tensorflow的whl包后,先不要急着安装,由于Python在安装包时会自动解决依赖问题,因而,在安装Tensorflow过程中总是会联网下载一些依赖包,为了让下载更加快一些,首先需要更换pip源,国内pip源我比较推荐清华的,直接同步的官方源,极少出问题。换源的方法很简单:windows下,直接在user目录中创建一个pip目录,如:C:\Users\用户名\pip,新建文件pip.ini,内容如下:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
至此,我们转到Tensorflow对应的whl文件目录下,直接一句pip install xxxx.whl剩下的就让计算机处理吧~~~~~~~
因为换了源,速度不会太差,几分钟就装好了~~~~
现在不要太高兴,目前,不少人安装后不能用Tensorflow,有各种问题,现在先放出一段代码,用来测试,代码是网上找到的。
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
下面这段代码是测试GPU版本的Tensorflow的。
import numpy
import tensorflow as tf
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print(sess.run(c))
输出结果会包含GPU信息~
FAQ
Q:显卡驱动,CUDA tool,cuDNN三者有何关系?安装有无先后顺序?
A:关于显卡,英伟达很多时候说的不明不白。实际上,你下载某个驱动,驱动自身大多数时候是自带CUDA的,是的,没错,但是驱动自带的CUDA却像是少了很多东西,也找不到CUDA专门的文件夹,比较靠谱的一种说法是:正确安装显卡驱动后会自带一个精简的CUDA调用接口,以供诸如CAD等一系列软件调用。就我使用过程来说,Caffe框架可以直接用这个精简接口,而不需要单独安装CUDA tool。但是,如果你需要开发独立的CUDA程序,或者必须找到CUDA工具文件目录,那CUDA tool你是必须安装的,而且,英伟达有一个坑爹的设定:CUDA tool自带一个匹配驱动,这就出问题了,一般我们拿到电脑后,都是先安装驱动的,这样一来,两者很可能冲突,事实上,也确实出现过这类问题,比较有名的就是GTX10显卡安装CUDA出错问题,目前英伟达应该已经解决了。我的建议是,如果你必须使用CUDA tool,保险起见,卸载原有驱动,直接安装CUDA tool,这样一来问题就会少很多。另外,cuDNN不会直接安装,需要单独下载,而且cuDNN其实就是.h头文件,.lib库文件以及一个.dll文件,只要把这三个文件放到CUDA对应的目录下就可以了,环境变量需要相关设置。
Q:安装完测试时报错:No module named "_pywrap_tensorflow" DLL load failed.
A:这个问题有很多种说法,比如什么CUDA与cuDNN版本不匹配,缺少微软MSVCP140.DLL,cuDNN安装后是否正确设置了环境变量······
目前来看,前两种可能性不大,因为cuDNN在下载时已经明确了CUDA版本,微软的那个东西,上述安装过程根本没装,最后一个也很容易处理···不细说了,总之按照上述安装方法,没有任何报错问题~
Q:请详细说一下cuDNN安装过程
A:看英文:
Copy CuDNN files to Nvidia CUDA toolkit folder (usually is located on C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0)
copy cudnn\bin\cudnn64_5.dll to C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v8.0\bin\
copy cudnn\include\cudnn.h to C:\ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include\
copy cudnn\lib\x64\cudnn.lib to C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\
CUDA在安装过程中已经自动加入环境变量了,所以,cuDNN不用额外设置,直接复制文件就可以了。
Q:如何获得Tensorflow的历史版本?
A:可以从pypi的官方仓库查询:https://pypi.org/ 查询tensorflow-gpu,或者tensorflow