首先,容我骂一句,辣鸡英伟达!费我时间,毁我青春!装个CUDA9.2死活装不来,太费劲。
开始正事。想装python下的tensorflow-gpu,本人刚开始学机器学习,想着反正有Nvidia显卡,不如装个gpu版本的tensorflow,挖坑之旅由此开始,相信既然搜索者相关内容的同志们一定感同身受,我也就不多说废话了,直接讲讲怎么出坑,但愿以下经验能够帮助到你们!
win10 64位 + NVIDIA GeForce GTX 950M(不用猜了,m结尾,我的电脑是笔记本)
我的vs2017版本是15.6.7
为了安装下面提到的CUDA9.2,我们可以看一下CUDA的安装指南,看一下它支持什么系统,什么版本的vs,以下是链接:
https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html
可以看到,cuda9.2支持64位win10 和vs2017的update6。其实我也不知道update6是不是我vs15.6.7这个版本号里的数字6的含义,反正我就是这么装了这个vs版本。
社区版链接下载地址点击此文字
历史版本下载见巨硬官网链接,往下拉既能看到vs2017历史版本的下载:https://docs.microsoft.com/en-us/visualstudio/productinfo/installing-an-earlier-release-of-vs2017#top
这个是要联网的下载,离线安装请自行百度。
安装的时候我们要勾选那些呢?
上图是我选的,其中勾选的win10SDK一定勾上,因为我在安装完CUDA9.2之后测试官方案例时,一开始就因为缺少这个没编译成功。仅供参考,因为我也只是知其然不知其所以然。有待于以后继续学习。
安装完之后,vs2017就暂告一段落。
下载CUDA9.2,官网下载地址
选择CUDA Toolkit 9.2 (March 2018)
然后选择windows、x86_64、10、exe(local) 并下载(可供下载的有Base Installer 和 Patch 1 (Released May 16, 2018)我们都下载下来),下载的文件是cuda_9.2.88_win10.exe和cuda_9.2.88.1_windows.exe
下载完之后的cuda_9.2.88_win10.exe是可执行文件,但是我们可以用WinRAR将这个exe解压。(注意:是将这个exe解压,后面要用到,仅仅解压cuda_9.2.88_win10.exe)
进入解压后的cuda_9.2.88_win10文件夹,有setup.exe,你直接双击下载的cuda_9.2.88_win10.exe也行,只是双击cuda_9.2.88_win10.exe,它也是需要解压的,浪费时间,既然我们以及解压了,就不要麻烦程序再解压一遍了,还费时间。
重点来了!!!!!!!
此处默认你的电脑已经装好了显卡的驱动(包括GForce Experience等等)
安装程序选择自定义安装(我之前选了精简安装,后面没装成功,连自己本身电脑的显卡驱动都坏了,重新下显卡驱动也装不上,还好我之前对c盘有过备份),我们只勾选CUDA里的Development、Runtime、Documentation、Samples。不要勾选Visual Studio Integration。按理说不勾选Visual Studio Integration之后是能顺利完成的。
安装完毕后,我们打开cuda_9.2.88_win10.exe解压后cuda_9.2.88_win10的文件夹,进入到\cuda_9.2.88_win10\CUDAVisualStudioIntegration\extras\visual_studio_integration\MSBuildExtensions路径下,有四个文件,将所有文件拷贝到VS的对应目录下,参考路径如下
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\BuildCustomizations
然后我们双击下载的另一个exe文件:cuda_9.2.88.1_windows.exe,这应该是一个补丁文件,修复cuda_9.2.88_win10.exe中的一些问题的。
CUDA9.2安装完毕。
打开目录:C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.2\5_Simulations\nbody
这是官方的一个案例项目:nobody
找到nbody_vs2017.sln,用vs2017打开,编译(此时编译就用到了之前安装vs2017勾选的那个SDK),编译之后的效果如下:
其他案例没能成功,参照博主【月光轩辕】所说:“CUDA中自带了很多Sample,但是部分Sample依赖了第三方库,所以很多Sample无法正常编译(如0sample中有项目依赖了mpi,还有一个项目依赖了DirectX),我刚开始的时候尝试去编译所有的samples,被这些多出的依赖搞的焦头烂额,但是最后发现毫无必要,我当时真的是太蠢了。”
多亏了该博主之前的尝试,让我没才能不钻这个死胡同,不然按我的性子,没编译成功肯定会认为是那里没安装正确。深表感谢!
采用的安装包是地址是:https://github.com/fo40225/tensorflow-windows-wheel/tree/master/1.8.0/py36/GPU/cuda92cudnn71sse2
下载下来之后 用pip安装这个whl文件,需要连网,因为会有其他的相关的库会自动下载
这个安装你要不会,我觉得你该从python基础去学了。
以下代码也是我从网上找的,不是自己写的,如有冒犯告知删除。
首先看看tensorflow是不是正常安装并可以导入了:
代码一:
import tensorflow as tf a = tf.test.is_built_with_cuda() # 判断CUDA是否可以用 b = tf.test.is_gpu_available( cuda_only=False, min_cuda_compute_capability=None ) # 判断GPU是否可以用 print(a) print(b)
输出结果是:
True
True
代表CUDA和GPU可用
代码二:
import tensorflow as tf #Creates a graph. 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) #Creates a session with log_device_placement set to True. sess = tf.Session(config=tf.ConfigProto(log_device_placement=True)) #Runs the op. print(sess.run(c))
输出结果是:[[22. 28.]
[49. 64.]]
下面是直观的看出代码有没有在使用GPU
代码三:
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:1'): 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))
先不急着运行,打开任务管理器,点击 性能 ,找到你自己英伟达显卡的GPU那一栏,点击一下,可以显示GPU的利用情况,正常情况下你没运行什么程序,GPU利用率什么的都是0,没有波澜,然后你运行代码三,会发现GPU利用率开始变化了,如下图:
至此,大功告成!愉快的玩耍吧!