tensorflow-gpu1.8.0+win10+vs2017+CUDA9.2 安装——从挖坑到跳坑到出坑

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42359147/article/details/80622306

    首先,容我骂一句,辣鸡英伟达!费我时间,毁我青春!装个CUDA9.2死活装不来,太费劲。


    开始正事。想装python下的tensorflow-gpu,本人刚开始学机器学习,想着反正有Nvidia显卡,不如装个gpu版本的tensorflow,挖坑之旅由此开始,相信既然搜索者相关内容的同志们一定感同身受,我也就不多说废话了,直接讲讲怎么出坑,但愿以下经验能够帮助到你们!

 一、本机配置

    win10 64位 + NVIDIA GeForce GTX 950M(不用猜了,m结尾,我的电脑是笔记本)

二、安装vs2017

    我的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

    下载CUDA9.2,官网下载地址

    选择CUDA Toolkit 9.2 (March 2018)

    然后选择windows、x86_64、10、exe(local)  并下载(可供下载的有Base InstallerPatch 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安装完毕。

三、安装cudnn

    因为CUDA是9.2版本,对应cudnn的版本是7.1.2
    解压cudnn-9.2-windows10-x64-v7.1.zip,将文件夹里的内容拷贝到CUDA的安装目录并覆盖相应的文件夹,CUDA拷贝目录:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2

四、测试Samples

    打开目录: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,被这些多出的依赖搞的焦头烂额,但是最后发现毫无必要,我当时真的是太蠢了。

    多亏了该博主之前的尝试,让我没才能不钻这个死胡同,不然按我的性子,没编译成功肯定会认为是那里没安装正确。深表感谢!

五、安装tensorflow-gpu1.8.0

    采用的安装包是地址是:https://github.com/fo40225/tensorflow-windows-wheel/tree/master/1.8.0/py36/GPU/cuda92cudnn71sse2

   下载下来之后  用pip安装这个whl文件,需要连网,因为会有其他的相关的库会自动下载

    这个安装你要不会,我觉得你该从python基础去学了。

六、验证此时的tensorflow的代码是否是在使用GPU

    以下代码也是我从网上找的,不是自己写的,如有冒犯告知删除。    

    首先看看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利用率开始变化了,如下图:

至此,大功告成!愉快的玩耍吧!

    

   



展开阅读全文

没有更多推荐了,返回首页