Win7 +Cuda9.0+cudnn7.0.5 tensorflow-gpu1.5.0 安装实战
https://blog.csdn.net/gangeqian2/article/details/79358543
https://blog.csdn.net/tomato_sir/article/details/79973237
https://blog.csdn.net/qq_36556893/article/details/79433298 -->这里面有个链接,支持cuda9.1的tensorflow
装GPU版本的tensorflow,搞了1天多,终于搞清来龙去脉。记录于此希望让你少走弯路。
我的第一块显卡是 NVIDIA Quadro 2000
支持cuda5.0.1 ,驱动太低,tensorflow gpu版本需要至少cuda8.0。 你用驱动精灵升级你的显卡驱动。
后来发现,不需要用驱动精灵先升级显卡驱动的。你就直接装cuda,全部安装,别少选,他里面有驱动,会帮你升级。但问题是,老显卡你不知道最高支持多少,比如显卡最高支持cuda8.0,你装个cuda9.0,那不行的。
所以,如果你是第一次装,你还是老老实实先用驱动精灵升级显卡驱动,这样你就知道显卡最高支持多少的cuda了。
我之前不知道上面的规律,所以我看到5.0.1后,以为这显卡不能用,换了一个更高级的显卡,用驱动精灵装完驱动后发现显卡是cuda9.2,后来发现后续装cudnn 支持不了9.2(why?你看这篇文章的第5点,列表中cuda9.2没有支持win7的包),后来重新装cuda9.0 后,这里的驱动也降到了9.0.
上面的经验也折腾了好久。。
下图是我第一块显卡,后来被证实这块显卡装好最新驱动后支持cuda8.0. 下面的记录都是我用第二块显卡的过程。这个图的主要目的是让你知道哪里去找显卡的cuda版本。你运行里面直接搜索'nvidia控制面板就行'
图一
1.为了要cpu和gpu都支持,需要新建一个新的虚拟环境
(后来我把虚拟环境删除了,不要cpu版本的了,直接gpu版本,下面2.3 两步可以省略)
conda create --name tensorflow-gpu python=3.6
红色字为新环境名字,随意~
2.切换到新的环境
activate tensorflow-gpu
3.查看当前环境, 可以看到已经切换了。 * 好就是当前的环境
conda info --envs
4.安装cuda
先装 VS2013 (VS2015 VS2017 都可以行,vs2012是否可以,请网友试验成功后告诉我哈,我装cuda时,里面显示可以装vs2012的扩展,所以我认为都是可以的)
装完vs,装cuda
最新CUDA下载地址:https://developer.nvidia.com/cuda-downloads
所有的cuda历史版本在这里: https://developer.nvidia.com/cuda-toolkit-archive
5. 装cudnn
务必到下面网站看下,支持的cuda版本,和操作系统的版本。我是win7,cuda9.0 用的是红框的。
https://developer.nvidia.com/rdp/cudnn-archive (这网站要注册,而且网站比较慢,需要FQ,好麻烦的~~)
按照其他帖子,把cudnn直接复制到相应目录。
打开你下载路径可以看到cuda文件夹下有三个子文件,分别为bin、include和lib
将以下三个路径添加到环境变量中(不知道环境变量在哪的朋友自行百度~)
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin;
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\include;
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64;
(温馨提示:记得路径之间加分号 ;)
6. 安装 tensorflow-gpu 1.5.0
如果第一次使用anaconda,pip可能比较老了,可以升级一下pip先:
python -m pip install --upgrade pip
安装之前记得先把cpu版本的tensorflow卸载,还有tensorboard也卸载。
pip uninstall tensorflow
pip uninstall tensorboard (这步大概不需要,你自己看看吧)
pip install tensorflow-gpu==1.5.0 指定一个版本, 老版本不支持 cuda9.0 只支持cuda8.0,新的版本据说有bug,反正用1.5.0据说不出问题。
备用,如果你pip安装出错或者网络慢,可以先下载whl文件:
tensorflow 的 whl文件下载
https://pypi.org/project/tensorflow-gpu/1.5.0/#files
7.测试下
我做测试时,所有都装好后运行下面两句,import没问题,但是tf.__version__显示没有这个模块。
经过反复重装也没用,最后,我把anaconda更新了一下。就好了【轻描淡写的一句话,实际上我折腾了大半天。。。。最后不行了才想到去更新anaconda】
import tensorflow as tf tf.__version__
测试是否能用gpu,应该返回true
tf.test.is_gpu_available( cuda_only=False, min_cuda_compute_capability=None )
8. 更新anaconda
以下两个方法都OK。大概需要半小时左右(看网速多快了)。我用第一个方法的。
方法1:
方法2:
conda install -c anaconda html5lib
用了方法一后,我对比了一下,发现里面的包并没有更新:
上面2种方法还是有点区别的,第二种方法会更新所有的库,第一种方法并没有更新别的库,只是更新了conda
类似于下面,这句话的意思是更新conda,这个指令的作用是更新conda 的package库
第一种方法类似于:conda update conda
第2种方法类似于:conda update --all
conda的文档
https://conda.io/docs/user-guide/getting-started.html
9. 经过上面第8步更新后,再回到第六步,安装tensorflow-gpu 就可以安装成功了。
一段demo
#写在第一段单元格 import tensorflow as tf hello = tf.constant('Hello, TensorFlow!') sess = tf.Session() print(sess.run(hello)) a = tf.constant(10) b = tf.constant(32) print(sess.run(a + b)) #写在第二个cell import tensorflow as tf import numpy import matplotlib.pyplot as plt rng = numpy.random learning_rate = 0.01 training_epochs = 1000 display_step = 50 #数据集x train_X = numpy.asarray([3.3,4.4,5.5,7.997,5.654,.71,6.93,4.168,9.779,6.182,7.59,2.167, 7.042,10.791,5.313,9.27,3.1]) #数据集y train_Y = numpy.asarray([1.7,2.76,3.366,2.596,2.53,1.221,1.694,1.573,3.465,1.65,2.09, 2.827,3.19,2.904,2.42,2.94,1.3]) n_samples = train_X.shape[0] X = tf.placeholder("float") Y = tf.placeholder("float") W = tf.Variable(rng.randn(), name="weight") b = tf.Variable(rng.randn(), name="bias") pred = tf.add(tf.multiply(X, W), b) cost = tf.reduce_sum(tf.pow(pred-Y, 2))/(2*n_samples) optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) init = tf.initialize_all_variables() with tf.Session() as sess: sess.run(init) # 训练数据 for epoch in range(training_epochs): for (x, y) in zip(train_X, train_Y): sess.run(optimizer, feed_dict={X: x, Y: y}) print("优化完成!") training_cost = sess.run(cost, feed_dict={X: train_X, Y: train_Y}) print("Training cost=", training_cost, "W=", sess.run(W), "b=", sess.run(b), '\n') #可视化显示 plt.plot(train_X, train_Y, 'ro', label='Original data') plt.plot(train_X, sess.run(W) * train_X + sess.run(b), label='Fitted line') plt.legend() plt.show()
运行后显示:
10 虽然能运行上面的,但是发现导入tensorflow时会报错
是因为numpy版本和h5py的不兼容,升级 pip install --upgrade h5py==2.8.0rc1
参考:
https://blog.csdn.net/u014561933/article/details/80156091