WHCSRL 技术网

常识——windows的tensorflow安装gpu版本,cuda算力只有3.0也可以

问题

cpu版本的tensorflow虽然安装方便,但是运行太慢了,同样是手写识别测试,gpu可以把cpu5分钟做完的事情40秒内做完
现在笔记本上大都有独立显卡,而且配置不低,如果不想使用tensorflow时CPU有难,GPU围观,最好还是安装gpu版本吧
在这里插入图片描述

windows安装tensorflow_gpu版本

检查显卡是否支持cuda

CUDA(Compute Unified Device Architecture),显卡厂商NVidia推出的运算平台。 通用并行计算架构,该架构使GPU能够解决复杂的计算问题。
查看cuda中是否有自己电脑显卡的型号
cuda是英伟达的,因此nvida的显卡可以用,其他的绕道,老实安装cpu版本吧

查看自己的显卡型号

在这里插入图片描述

去官网查看是否支持cuda

http://developer.nvidia.com/cuda-gpus
在这里插入图片描述

检查显卡的cuda算力

非常必须的是检查显卡对于cuda的算力 ,不同版本的tensorflow-gpu版本对显卡的算力要求不同,如果显卡算力达不到tensorflow-gpu版本期望的算力,他将不会使用你的GPU进行计算,也就是说安了也没用,它只是使用你的cpu计算
如下报错提示:
忽略具有计算能力3.0的可见gpu设备。所需的最小Cuda能力为3.5

因此应该下载和你的显卡算力相匹配的tensorflow-gpu版本
算力查看
后面的小数就是cuda的计算能力
我的显卡型号是gt645m显卡,算力只有3.0
不得不使用tensorflow-gpu 1.4+cuda8.0+cuddn6.0,这种tensorflow配置,再高的gpu版本,算力就要求3.5以上了
而且python3.6可以使用tensorflow-gpu 1.4,python3.7就不支持了,因此这些配置都是环环相扣的,在此仅仅针对于我的电脑配置
如果你的显卡很好,也可以使用此配置,因为只要算力超过3.0都能用,也不耽误你的gpu计算,而且也比较稳定
当然,最新的tensorflow版本会有一些革新,你可以使用更新的tensorflow-gpu版本体验新功能,查看那种tensorflow-gpu版本所要求的cuda算力门槛就行了
在这里插入图片描述

按照GPU算力3.0的电脑配置进行配置

安装python3.6的anaconda包

官方地址:https://repo.anaconda.com/archive/
清华大学镜像:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
3.6的对应的是 Anaconda 5.2,5.3以后的都是python 3.7的了,安装时要注意版本对应问题,操作系统、以及32bit与64bit的选择。

安装时注意勾选自动配置环境变量path,

安装tensorflow-gpu 1.4

安装好anaconda包后以管理员身份进入Anaconda Prompt命令管理工具
因为涉及到一些文件的下载和安装,Anaconda Prompt需要权限
在这里插入图片描述

进入cmd,运行pip install tensorflow-gpu==1.4.0
等待tensorflow-gpu自动从网络上下载文件安装完成,
如果中途有网络断了,重新运行此命令,已经下载的文件不会重复下载,会自动识别,从之前断掉的位置下载,因此不用担心

安装cuda8.0和cudnn6.0

为什么说这两个要一起安装?
因为他们是一体的,版本互相支持,但是被分成了两个文件,需要从官网分开下载,下错了一个都不能用,非常扯淡
点击他们的官网先注册一个账号,因为下载cudnn6.0的时候需要登录才能下载
或者先不注册,等下载的时候有弹窗,然后注册也行

从官网下载
cuda8.0
正确的8.0版本下载地址: https://developer.nvidia.com/cuda-80-ga2-download-archive
根据自己的电脑系统类型和版本选择
后面的两个8.0本体包和补丁包都要下载,暂时不要安装,接下来下cudnn6.0
在这里插入图片描述
cudnn6.0下载地址
界面非常具有迷惑性,进入界面需要注册账号,同时展示的还不是cudnn6.0的
https://developer.nvidia.com/rdp/cudnn-download
在这里插入图片描述
查看历史版本
注意到了吗?cuda和cudnn的版本都是相互对应的

在这里插入图片描述

现在cuda和cudnn都有了,是否可以开始安装了?

不行,因为想要安装cuda需要安装Visual Studio 2015
CUDA8.0不支持Visual Studio 2017,使用VS2017会报错。
安装cuda8.0需要用到Visual Studio 2015的一些库
因此需要先安装Visual Studio 2015
ISO文件下载
https://download.microsoft.com/download/8/4/3/843ec655-1b67-46c3-a7a4-10a1159cfa84/vs2015.3.ent_enu.iso
使用虚拟光驱加载iso文件,然后安装即可
安装时需要注意勾选自定义配置,别的选项都可以使用默认值。VS2015的默认安装不包括C++的编译器,必须手动勾选Visual C++,不然会面临后续的CUDA编译错误。
在这里插入图片描述

Visual Studio 2015安装好后就可以安装cudn8.0了,选择一个地址开始安装
先安装cuda本体
在这里插入图片描述
然后再安装cuda的补丁,即同cuda8.0一起下载的第二个文件

然后解压cudnn6.0的压缩包,bin, include, lib,将文件夹下的内容全部复制到C:ProgramDataNVIDIA GPU Computing Toolkitv8.0这个文件夹下
此时去查看系统变量
CUDA_PATH和CUDA_PATH_V8.0已经存在,这是在安装cuda时自动创建的,路径是C:ProgramDataNVIDIA GPU Computing Toolkitv8.0
在这里插入图片描述
查看cuda是否安装成功
V要大写,不然不识别,真是人才啊,当初使用v看到错误迷惑了好久
在这里插入图片描述
查看cuda安装位置
在这里插入图片描述
查看cuda是否安装成功
跳转到cuda安装的路径
在这里插入图片描述

在这里插入图片描述
结尾都是pass就成功了
在这里插入图片描述
另外一种测试的方式是
双击打开cuda安装路径下的指示文件,会启动vs2015
在这里插入图片描述
右键编译可以编译得到deviceQuery和bandwidthTest两个exe文件
在这里插入图片描述

同上面一样,识别出了gpu,并且pass即可
如果出错也正好可以检测cuda是否正确安装

TRK0005: Failed to locate: “CL.exe”. The system cannot find the file specified.系统找不到CL.exe,无法编译文件。面对这个错误那就是你没选Visual C++,需要重新安装时选上这个组件。
MSB8036: Windows SDK 8.1 was not found.如果你同时看到了这个错误说你没有安装 Windows SDK 8.1,那也可以通过安装C++ Redistribution这个来解决。
error MSB3721:路径错误,去看看路径是否存在中文
在这里插入图片描述

测试tensorflow能否运行

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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

此时可以发现调用了gpu运行,并得到了结果
在这里插入图片描述
如果你发现了如下的错误,这里能够解决

一些问题

如何知道我安装的tensorflow是cpu还是gpu版本

import os
from tensorflow.python.client import device_lib

os.environ["TF_CPP_MIN_LOG_LEVEL"] = "99"

if __name__ == "__main__":
    print(device_lib.list_local_devices())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

这里会列出可以使用计算的设备,cpu和gpu已经列出,如果是cpu版本只会有cpu
在这里插入图片描述

如何指定cpu或者gpu参与运算

import tensorflow as tf
# 使用CPU进行计算
with tf.device("/cpu:0"):
    a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3])
    b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2])
    c = tf.matmul(a, b)
    # 查看计算时硬件的使用情况
    sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
    print(sess.run(c))

    #使用CPU进行计算
    with tf.device("/cpu:0"):
        a = tf.constant([1.0,2.0,3.0,4.0,5.0,6.0],shape=[2,3])
        b = tf.constant([1.0,2.0,3.0,4.0,5.0,6.0],shape=[3,2])
        c = tf.matmul(a,b)
        #查看计算时硬件的使用情况
        sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
        print(sess.run(c))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

在这里插入图片描述
通过tf.device可以指定计算时使用的设备,0表示设备的个数。如果想要使用GPU进行计算,就将CPU改成GPU。

RuntimeError: The Session graph is empty. Add operations to the graph before calling run().

这是你的tensorflow是2.x的,不能向下兼容1.x的
tf.compat.v1.disable_eager_execution()
可以解决版本迁移问题

Could not load dynamic library ‘cublas64_10.dll‘; dlerror: cublas64_10.dll not found

在cuda的目录找到提示缺失的dll文件,或者使用everythin找到对应的dll文件
然后将dll文件复制到c:windowssystem32文件夹下

FutureWarning: Conversion of the second argument of issubdtype from float to np.floating is

解决思路
包内出错,是h5py包

解决办法
对h5py进行更新升级
pip install h5py==2.8.0rc1

查询Anaconda安装路径

conda info --env

可以知道当前有哪些环境,以及环境路径

pycharm发现一些包安装了但是没有检索到

查看python的模块路径方法是
import sys
print sys.path

在这个python系统路径中加入新的模块路径的三种方法,
1、添加环境变量PYTHONPATH,python会添加此路径下的模块,在.bash_profile文件中添加如下类似行:
export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages
2、在site-packages路径下添加一个路径配置文件,文件的扩展名为.pth,内容为要添加的路径即可
3、sys.path.append()函数添加搜索路径,参数值即为要添加的路径。

推荐阅读