Theano1.0.4配置CUDA7.5实现GPU加速

前言:技术小白。第一次写博客,语言组织能力有限,也不知道怎么组织代码的显示,只作为简单记录,以防下次需要时忘掉。

背景:在看《Neural Networks and Deep Learning》这本书第六章卷积神经网络时,运行里面的一段示例代码,在没有GPU加速的情况下跑了43分钟,这基本还是运行hello world级别的速度。于是就想试试开启GPU加速能有多快。折腾差不多两天。下面把这两天的折腾经历记录一下,供有相同问题的人参考。

(总感觉不该如此费劲,gpu的开启就是应该像一个开关一开一关简单才是,实际实验中却搞得这么复杂。一定是开始时候哪里没做好)

先说一下我的软硬件环境。硬环境:CPU是i5双核3.20GHz,显卡是NV的GTX750。软环境:windows8.1 + Anaconda + PyCharm。先查查自己的GPU是否支持CUDA,https://developer.nvidia.com/cuda-gpus。经查询,我的GTX750还是受支持的。

因为书上示例的环境比较老(python2.7和theano0.6),如果使用当下最新的python3.7和theano1.04,需要做一些修改。python代码上的修改我不说了,就是python2到python3语法上的变化。这里记录一下示例中用到的theano相关的修改。

(当时theano是直接在Anaconda里安装的1.0.3,好像是有报错,说是版本不合适,具体什么情况不记得了。从百度下载了最新的1.0.4,在conda命令行里手动安装。)

在network3.py里最前面有一处:

GPU = True
if GPU:
    print "Trying to run under a GPU.  If this is not desired, then modify "+\
        "network3.py\nto set the GPU flag to False."
    try: theano.config.device = 'gpu'
    except: pass # it's already set
    theano.config.floatX = 'float32'
else:
    print "Running with a CPU.  If this is not desired, then the modify "+\
        "network3.py to set\nthe GPU flag to True."

把这一块整个注释掉,因为在加载了theano的包之后就不能再设置gpu加载了会报错。在目录“C:\Users\用户名”下面新建文本文件.theanorc.txt,注意最前面的那个点不能丢。写入如下内容:

[global]
device = cuda
floatX = float32
allow_input_downcast=True
openmp=False

里面的device=cuda即为开启GPU加速。

另外,根据这个waring修改一处代码,简单易懂不阐述。

 

下载CUDA工具包,但是需要安装哪个版本呢。看了一些博客,大多说是不要安装最新的,一定要安装和自己显示相适应的。我也不知道我的显示和哪个版本的CUDA相适应,不管那么多,先试试最新的CUDA10.1,十几分钟安装好后试着跑一下代码,报错。报错信息当时没有记录,大概就是CUDA的dll版本号不对,看字面理解是需要7.5的版本。于是卸载又下载安装CUDA7.5,然后继续安装。

还需要cuDNN,是“基于CUDA的深度学习GPU加速库”。咱也不懂,只知道这个版本要和CUDA版本一致。然而,在cuDNN的下载页面里,CUDA7.5一栏下没有windows8.1,只有7和10。如下图所示:

很崩溃,我的电脑是win8.1,没有对应的。于是下载win10安装包开始重装系统。提示C盘空间不足,提示需要释放5个G的空间(当时只有不到1个G)。又是一顿卸载,差不多有8个G了,开始安装系统。一段漫长的时间,大概1个多小时,提示失败,百度说是时空不足需要预留20个G。好吧,继续卸载,把C盘里能卸载的都卸载掉,凑了30个G的空间,安装好了。把常用的软件和环境安装好之后,继续。

CUDA7.5安装好,适应的cuDNN下载后解压把里面的三个文件夹(bin, include, lib)复制到CUDA的安装目录。

有一点很奇怪,可能是因为重装系统前的Anaconda版本不是最新的,也可能因为之前theano包是在Anaconda里安装的。在win10下安装当前最新的Anaconda并手动安装theano1.0.4后,CUDA和cnDNN都安装好后,跑示例代码还是报错,报了之前不一样的错,大概是一些python包找不到。然后就继续在Anaconda里下载,可能是因为这些包在国外,又没有翻墙,速度极其慢。百度告诉我,在国内镜像网点下载就会快很多。conda命令行执行下面:

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cound/msys2/

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/conda-forge/

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/

 

下载完成后继续运行代码,还是报错。大意是没有找到mingw和libpython。用conda install命令下载不到这两包,需要去百度这两包。重装系统之前没遇到这个错误提示,可能是因为有些版本的anaconda会带有mingw,而现在下载最新的anaconda里没有。

先将mingw下载,解压后放到anaconda的安装目录下。注意,mingw下载时要选好32还是64位的。(这里应该还有一步,好像是在conda命令行安装已下载的包,但具体是不记得了。没有做笔记和记录的习惯,谁知道可以告诉我。)在.theanorc.txt里添加两行(下面是蓝色加粗的字符是大写字母I,不是小写字母l,也不是数字1),

[gcc]
cxxflags=-ID:\Anaconda3\Library\mingw-w64\x86_64-w64-mingw32

然后配置环境变量,比如在我电脑上是这样:

测试一下,命令行里gcc --version

这就表示这个包安装得没问题。

libpython这个包需要mingw安装后再安装。同样去百度找,我下载的是文件名是“libpython-2.1-py37_0.tar.bz2“,与我环境相适应。下载的包不要解压,直接扔到D:\Anaconda3\pkgs下面,conda命令行执行conda install libpython-2.1-py37_0.tar.bz2。如果没有提示,就是成功了。

接下来,测试一下是否可以gpu加速了。从别人博客里摘了一段代码,很多博客都用的这同一段代码,哈哈。

from theano import function, config, shared, tensor

import numpy

import time

vlen = 10 * 30 * 768 # 10 x #cores x # threads per core

iters = 1000

rng = numpy.random.RandomState(22)

x = shared(numpy.asarray(rng.rand(vlen), config.floatX))

f = function([], tensor.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 %f seconds" % (iters, t1 - t0))

print("Result is %s" % (r,))

if numpy.any([isinstance(x.op, tensor.Elemwise) and

             ('Gpu' not in type(x.op).__name__)

             for x in f.maker.fgraph.toposort()]):

    print('Used the cpu')

else:

    print('Used the gpu')

 

当你看到如下类似结果时,你就会很开心,因为你的老显卡还可以继续发挥余热!

重装系统前用pycharm,感觉太笨重,重装系统后使用了微软的vscode,下载python插件,pythoh解释器选用anaconda的python.exe就可以了。

纯小白,出了问题就百度,百度得来的也不懂,只能以后碰到了再说,现在能用了就好。

最后用一个实测示例,分别用CPU和GPU来跑跑书里面的一段代码,感受一下

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值