Win7配置theano+cuda8+cudnn实现gpu加速及遇到问题的解决方法

之前一直使用python2.7,但是最新的tensorflow官方教程(1.0版本)在Windows上只支持python3和CUDA8,所以卸载python2.7并重新安装python3.6并配置theano和tensorflow,实现GPU加速。

Tensorflow、theano和Keras都是支持Python接口的。Keras和Tensorflow还有theano的关系如下:

Keras是对Tensorflow或者Theano的再次封装,也就是以Tensorflow或Theano为后端,默认的后端是tensorflow,如果你想使用theano为后端,可以更改为theano。

Tesorflow与theano是可以使用Nvidia GPU进行加速的。如果你的GPU支持CUDA,速度往往会快个10~20倍。

目前NVIDIA的gpu计算能力:https://developer.nvidia.com/cuda-gpus

可以看到,gtx1060的计算能力媲美目前最厉害的gtx1080了,并且价钱只有他的1/3,于是就跟导师申请了一块gtx1060。

1、电脑配置

我的实验室电脑具体配置如下:

Win7,i7,内存16G,显卡GTX1060... 

以下在上述配置下实现GPU加速。

2、安装Anaconda 

在官网https://www.continuum.io/downloads#_windows

中下载相应版本的anaconda安装包.我电脑是64位的,故下载的64位的Python 3.6 version,直接安装即可.我是安装在C:\Anaconda3目录下。

   安装好Anaconda后,在cmd.exe(命令提示符)中输入python命令查看安装结果。


可以看到,python3已结安装好。

注意,最新版的tensorflow在Windows下面只支持python3和Cuda8。

3、安装Theano

直接在 cmd.exe 中输入命令: pip install theano ,安装成功后会在 C:\Anaconda\Lib\site-packages 中出现于 theano 相关的两个目录。

Anaconda版本底下没有MinGW包,这时可以:CMD输入 condainstall mingw libpython, MinGW会自动装到Anaconda下(C:\Anaconda3\MinGW)。

然后在 C:\Users\**\ 目录(**指用户名)下新建.theanorc.txt文件(注意文件名最前面有”.”,在文件中配置如下:

[global]

openmp = False

[blas]

ldflags =

[gcc]

cxxflags = -IC:\Anaconda3\MinGW          #这里是你安装Mingw的位置

 

测试theano是否安装好:只需打开控制台,然后输入:python回车,再输入import theano回车,若没有其他错误信息输出这表明theano配置正确。如下图


注意:我这里由于已经配置好了CUDA,所以输入import theano回车后有信息输出,在没有配置CUDA之前,输入import theano回车后是没有信息输出的。

至此,大家就可以利用theano框架来编写深度学习的代码,在CPU上面运行

4、C++环境安装

C++环境的安装,建议直接安装一套微软的Visual Studio环境,建议Visual Studio 2010或更高版本。我安装的是Visual Studio 2013,能够支持CUDA编程。不过MicrosoftVisual Studio 2013,这一版本的VS体积太过于庞大了,完全安装后将近有10G+。如果大家不从事其他语言开发,可以考虑在安装VS的时候只选择C++,其他语言如VB,C#,F#都可以不用安装(已试过,没有任何问题,因为CUDA只需C++的支持),这样就能够减少硬盘的使用量。

在安装VS2013时,会提示你安装IE10,按照他提示的链接下载最新的IE11安装即可再次安装VS2013。

5、安装cuda_8.0

官网:https://developer.nvidia.com/cuda-downloads

选择自己对应的版本下载Cuda8.0,然后一路安装即可。


6、设置环境变量

安装完毕后,在计算机上点右键,打开属性->高级系统设置->环境变量,可以看到系统中多了CUDA_PATH和CUDA_PATH_V8_0两个环境变量,接下来,还要在系统中添加以下几个环境变量: 
  CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDASamples\v8.0 
  CUDA_LIB_PATH = %CUDA_PATH%\lib\x64 
  CUDA_BIN_PATH = %CUDA_PATH%\bin 
  CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\win64 
CUDA_SDK_LIB_PATH =%CUDA_SDK_PATH%\common\lib\x64 
我的安装路径是默认的,所以添加的路径分别是下面这样的: 
CUDA_PATH 
C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v8.0 
CUDA_PATH_V8_0 
C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v8.0 
CUDA_SDK_PATH 
C:\ProgramData\NVIDIA Corporation\CUDASamples\v8.0 
CUDA_LIB_PATH 
C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v8.0\lib\x64 
CUDA_BIN_PATH 
C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v8.0\bin 
CUDA_SDK_BIN_PATH 
C:\ProgramData\NVIDIA Corporation\CUDASamples\v8.0\bin\win64 
CUDA_SDK_LIB_PATH 
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0\common\lib\x64 
然后,在系统变量 PATH 的末尾添加: 
 ;%CUDA_LIB_PATH%;%CUDA_BIN_PATH%;%CUDA_SDK_LIB_PATH%;%CUDA_SDK_BIN_PATH%; 
;C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v8.0\lib\x64;C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v8.0\bin;C:\ProgramData\NVIDIA Corporation\CUDASamples\v8.0\common\lib\x64;C:\ProgramData\NVIDIA Corporation\CUDASamples\v8.0\bin\win64; 
重新启动计算机。 
至此,cuda的安装就搞定了。

 检查是否安装正确。在安装结束后,你会发现在系统环境里面新添加了两个环境变量:CUDA_PATH_V8_0和CUDA_PATH。

现在,打开cmd控制台命令行,输入命令nvcc –V回车(注意是大写V哟)就可以参考版本信息,如果安装正确则出现图4所示的结果。


7、监测cuda安装成功与否

这个步骤用到两个东西,都是cuda为我们准备好的:deviceQuery.exe 和 bandwithTest.exe 
首先启动cmd DOS命令窗口,默认进来的是c:\users\Admistrator>路径,输入 cd .. 两次,来到c:目录下 。找到安装的cuda文件夹。 我电脑上该文件的路径:C:\Program Files\NVIDIA GPUComputing Toolkit\CUDA\v8.0\extras\demo_suite。直接执行bandwidthTest.exe :


Rsult=PASS及说明,都通过了。如果Rsult=Fail 那不好意思,重新安装吧。

不要在环境变量添加PYTHONPATH变量,否则容易在import theano后出现configparser找不到或没有这个组件这个问题(在我这里是这样的);

8、安装cudnn

到网上搜索cudnn下载下来(官网下载要注册才行)。将下载来的文件解压,解压出cuda文件夹,里面包含3个文件夹。将设三个文件夹替换掉系统里面的对应文件,进行覆盖替换即可。C:\ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v8.0

覆盖掉后面导入theano时会就不会出现CuDNN not available提示了。
最后是这样的Using gpu device 0: GeForce GTX 1060 3GB (CNMeMis enabled with initial size: 80.0% of memory, cuDNN 5110)



发现有警告,解决方法参考后面问题处理。

9、测试GPU加速

运行以下测试代码:

# -*- coding: utf-8 -*-
"""
Created on Mon Mar 13 09:31:19 2017

@author: RL.King
"""

from theano import function, config, shared, sandbox
import theano.tensor as T
import numpy
import time
 
vlen = 10 * 30 * 768  # 10 x #cores x # threads per core
iters = 10000
 
rng = numpy.random.RandomState(22)
x = shared(numpy.asarray(rng.rand(vlen), config.floatX))
f = function([], T.exp(x))
print (f.maker.fgraph.toposort())
t0 = time.time()
for i in range(iters):
    r = f()
t1 = time.time()
print ('Looping %d times took' % iters, t1 - t0, 'seconds')
print ('Result is', r)
if numpy.any([isinstance(x.op, T.Elemwise) for x in f.maker.fgraph.toposort()]):
    print ('My lab computer used the cpu')
else:
    print ('My lab computer with high efficiency used the gpu')

下面三个测试分别是cpu运行,安装Cuda进行GPU加速运行,安装cuDNN运行的结果:

使用上述测试代码,以上结果分别是测试代码在cpu运行,cuda加速和cudnn加速结果,发现gpu上运行提升45.6倍!!!

10、出现的问题以及解决方法

1、不要在环境变量添加PYTHONPATH变量,否则容易在import theano后出现configparser找不到或没有这个组件这个问题(在我这里是这样的)。

2以下报错:


由于我是卸载了之前的python2再安装python3,所以把原来的环境变量中Anaconda的相关删除即可。

3、以下报错:


测试theano。打开命令行,输入python,在输入importtheano,如果出现UnicodeDecodeError:'utf-8' codec can't decode byte 0xd5 in position 11: invalid continuation byte这种编码问题,这是因为掉用nvcc返回的字符串是使用的cwindows默认的默认编码,按照提示路径,直接找到theano中对应的报错文件,把源码出错的地方改为 *.decode("GBK")就可以。比如我的是在theano\compact下的__init__.py出现的编码问题,则修改为:



4、以下报错


这里提示警告,我的cuDNN版本过高,目前安装的theano只支持到5版本的,而我是5.1版本的,要么升级theano要么降级cuDNN.

这里选择安装cuDNN5,后来发现 还是会有警告,虽然不影响实际使用,可以通过升级theano版本得到解决:
pip install --upgrade --no-deps git+git://github.com/Theano/Theano.git
 
  

可以看到,更新之后还存在警告,提示cuda后端不可用了,要使用gpuarray后端。
https://github.com/Theano/Theano/wiki/Converting-to-the-new-gpu-back-end%28gpuarray%29
可以看到,theano和cuda支持并不好,在我寝室的cuda7.5就未出现这样的警告。
5、
排除上面的问题后,发现运行EEG程序会报错:
…puDn ConvDesc{border_mode='half', subsample=(1, 1), conv mode='conv', precision='float32'}(MakeVector{dtype='int64'}.0, MakeVector{dtype='int64'}.0)…
这里根本Google不到解决方案,感觉还是因为theano和cudnn版本的问题,发现安装cudnn4后问题得到解决!




















  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值