在我的Macbook Pro上安装能使用GPU加速的Theano

目的

最近深度学习的应用非常火爆,有意向要在NLP上应用深度学习的我要对各种开源的深度学习库进行探索,目前比较流行的Python语言的深度学习库有Theano、Google开源的Tensorflow、keras等。

由于我日常使用的机器都是Macbook Pro,没有N卡,只有一张Intel Iris(TM) Graphics 6100(本人对硬件不是很了解),所以不能使用cuda,只能使用opencl的库。所以想使用GPU加速训练的话,这电脑的硬件已经不能支持Tensorflow了(Tensorflow只支持cuda,计算能力要在3.5以上,不太懂),我还是选择Theano(既支持cuda也支持opencl)做做实验吧。

前提依赖

我使用的python版本是2.7。Theano库需要用到依赖库为g++,numpy,scipy,Cython,BLAS,我们只需要使用pip install 把他们都安装好就行。这个可以参考官方文档。

安装Theano

参考:
官方安装文档:http://deeplearning.net/software/theano/install.html
gpuarray安装文档:http://deeplearning.net/software/libgpuarray/installation.html

先安装GPU的库:

  1. 下载libgpuarray源码:
    git clone https://github.com/Theano/libgpuarray.git
    cd libgpuarray
  1. 安装libgpuarray:
cd <dir>
mkdir Build
cd Build
# you can pass -DCMAKE_INSTALL_PREFIX=/path/to/somewhere to install to an alternate location
cmake .. -DCMAKE_BUILD_TYPE=Release # or Debug if you are investigating a crash
make
make install
cd ..
  1. 安装pygpu:
# This must be done after libgpuarray is installed as per instructions above.
python setup.py build
python setup.py install
  1. 测试是否安装成功:
python -c "import pygpu;pygpu.test()"

再安装Theano

在终端中输入

pip install --upgrade --no-deps git+git://github.com/Theano/Theano.git

(这里用git的原因后面提到的坑再说)

到这里基本上已经安装好的所有的库。

后面附上测试代码(test.py):

from theano import function, config, shared, tensor, sandbox
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')

直接运行会显示如下信息:

$python test.py
[Elemwise{exp,no_inplace}(<TensorType(float64, vector)>)]
Looping 1000 times took 1.492254 seconds
Result is [ 1.23178032  1.61879341  1.52278065 ...,  2.20771815  2.29967753
1.62323285]
Used the cpu
$python test.py
[Elemwise{exp,no_inplace}(<TensorType(float64, vector)>)]
Looping 1000 times took 1.492254 seconds
Result is [ 1.23178032  1.61879341  1.52278065 ...,  2.20771815  2.29967753
  1.62323285]
Used the cpu

可以开始上述的程序是通过cpu运行的,还没有使用gpu。
那么如何用上gpu呢?这时候,我们需要加上一些环境变量。(由于我们之前已经安装了libgpuarray,所以theano可以支持opencl。)
运行命令:

  1. 使用OpenCL和CPU:
$THEANO_FLAGS=device=opencl0:0 python test.py
Mapped name None to device opencl0:0: Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
[GpuElemwise{exp,no_inplace}(<GpuArrayType<None>(float32, (False,))>), HostFromGpu(gpuarray)(GpuElemwise{exp,no_inplace}.0)]
Looping 1000 times took 1.65111804008 seconds
Result is [ 1.23178029  1.61879325  1.52278078 ...,  2.20771813  2.29967737
  1.62323272]
Used the gpu
chenyutongdeMacBook-Pro:dl_test Derrick$ THEANO_FLAGS=device=opencl0:0,floatX=float32  python theano_test.py 
Mapped name None to device opencl0:0: Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
[GpuElemwise{exp,no_inplace}(<GpuArrayType<None>(float32, (False,))>), HostFromGpu(gpuarray)(GpuElemwise{exp,no_inplace}.0)]
Looping 1000 times took 1.72186207771 seconds
Result is [ 1.23178029  1.61879325  1.52278078 ...,  2.20771813  2.29967737
  1.62323272]
Used the gpu

虽然代码显示"used the gpu",但是实际上看得上是使用CPU。

  1. 使用OpenCL和GPU:
$ THEANO_FLAGS=device=opencl0:1,floatX=float32  python theano_test.py 
Mapped name None to device opencl0:1: Intel(R) Iris(TM) Graphics 6100
[GpuElemwise{exp,no_inplace}(<GpuArrayType<None>(float32, (False,))>), HostFromGpu(gpuarray)(GpuElemwise{exp,no_inplace}.0)]
Looping 1000 times took 1.09479188919 seconds
Result is [ 1.23178029  1.61879337  1.52278066 ...,  2.20771813  2.29967761
  1.62323284]
Used the gpu

看得上这程序已经使用上我MacbookPro的显卡了。

遇到的坑

一开始我按照官方的教程一路安装下来:
安装Theano时使用的命令是pip install theano。(此命令安装的是theano发布的最新版本,注意是发布的版本,我写的时候是v0.8.2,但github上托管的代码已经是v0.9.0版了)
libgpuarray同样也是下载源码编译安装,版本是-9998(我不太清楚为什么这样定义)
都安装完之后,当运行THEANO_FLAGS=device=opencl0:1,floatX=float32 python theano_test.py 命令时,出现了这样的错误:

Wrong major API version for gpuarray:-9998 Make sure Theano and libgpuarray/pygpu are in sync.

于是我们google了一下这样的错误,搜不到提问,搜到了源码(有github上的,也有其他网站)只能查一下源码看看哪里蹦出来的错误。
发现在这个网站上的代码里显示的是需要-10000版本,而github上官方最新的是-9998。所以我就怀疑我安装的theano不是最新的版本。通过使用theano.test()命令查看版本后果然如此,安装的是v0.8.2。所以后来我使用了

pip install --upgrade --no-deps git+git://github.com/Theano/Theano.git

命令就好了。

参考:
http://codechina.org/2016/04/how-to-install-theano-on-mac-os-x-ei-caption-with-opencl-support/
http://deeplearning.net/software/theano/tutorial/using_gpu.html#using-gpu
http://deeplearning.net/software/libgpuarray/installation.html
http://deeplearning.net/software/theano/install.html
https://github.com/Theano/Theano

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354

推荐阅读更多精彩内容