Ubuntu14.04+Theano+OpenCL+libgpuarray实现GPU运算
上一篇博客介绍了如何使用Theano+logistic regression来实现kaggle上的数字手写识别,文末提到了CPU计算实在太慢,因此在做完这个实验之后,博主查阅了Theano的文档,了解到Theano官方仅支持CUDA进行GPU运算,不支持OpenCL,也就是说Theano官方仅支持N卡。原因是,CUDA和OpenCL是两个GPU计算平台,CUDA仅支持N卡,OpenCL支持所有的显卡,二者的具体区别还请自行查询。无奈博主的笔记本有一张intel的集成显卡和AMD的一张入门独显,而Theano非官方的提供了libgpuarray来支持OpenCL,因此博主花了大量的时间来尝试安装libgpuarray。
libgpuarray支持的OS有Debian6,Ubuntu14.04,MAC OS X10.11和win7,而网上能找到的成功安装libgpuarray的只有两篇博文,全是在MAC OS上,这里给出博文链接,供后面的同学参考:
https://www.robberphex.com/2016/05/521
http://codechina.org/2016/04/how-to-install-theano-on-mac-os-x-ei-caption-with-opencl-support/
博主的最初OS是win7,整个6月的空闲时间几乎都用在安装libgpuarray上了,遇到了无数个坑,然并卵,最终也没能成功。这里列出在win7上安装libgpuarray需要的一些环境,供后面的同学参考:
- 最新的AMD显卡驱动,具体可前往AMD官网查询
- AMD APP SDK,其提供了OpenCL
- Cmake >= 3.0 (cmake)
- g++,一般我们可以通过wingw或TDW-GCC来安装
- visual studio
- clBLAS (clblas)
- libcheck
7月份在win7上装了Ubuntu14.04的双系统,尝试在Ubuntu上实现Theano+OpenCL的GPU运算,最终libgpuarray算是安装成功吧,只是还不能用A卡来计算,具体问题文末介绍。下面介绍整个过程。
安装Ubuntu14.04双系统
我的win7/Ubuntu14.04双系统安装过程参考了http://m.blog.csdn.net/article/details?id=43987599 这篇博文比较简单,这里不再展开。
安装AMD显卡驱动
博主开始是死在了这里,AMD驱动装坏了好几次,装坏了的结果就是重启后不能进入图形界面。然后只能在tty或者initramfs进行修复,这对于博主这种第一次接触linux的人来说太困难了,往往修复好了还是不能用,只好重装系统,整个过程重装了七八次。这里我介绍一种安装驱动的方法,比较简单快速(至少我是一次就成功了)。
在安装好Ubuntu14.04之后,第一件事就是换驱动。找到附加驱动,如下图所示,系统初始使用的驱动是开源的,我们选择来自fglrx的专有驱动,然后点击“应用更改”按钮,静静的等它装完重启。
重启后打开终端,输入fglrxinfo,终端会返回显卡信息,如下所示:
再在终端输入fgl_glxgears,会跳出一个测试窗口(旋转的方块),这就证明显卡驱动安装成功。这里,博主找到了安装驱动的比较好的方法,供后面的同学参考。
http://forum.ubuntu.org.cn/viewtopic.php?t=445434
http://www.tuicool.com/articles/6N3e2ir
安装AMD APP SDK
前往AMD官网下载SDK(注意OS和位数),我这里下载的是Linux64位版AMD APP SDK 3.0。文件解压后出现一个.sh文件,终端输入命令
AMDSDK默认会安装在/opt/下,这时候在终端输入clinfo命令会返回OpenCL平台信息和计算设备信息,下面给出我的笔记本的数据:
另外还要在/root/.bashrc文件中添加环境变量,具体如下:
到这里,AMD APP SDK就算是安装好了,下面再给出我参考的几篇博文:
https://www.blackmoreops.com/2013/11/22/install-amd-app-sdk-kali-linux/
http://blog.csdn.net/vblittleboy/article/details/8979288
升级python
Ubuntu14.04自带的python版本是2.7.6的,我这里把它升级成了2.7.11的,具体方法是在终端输入下面三条命令:
安装libgpuarray
为了防止安装过程出现错误影响整个python的环境,这里我们使用python的虚拟环境。
然后我们就进入了python的一个虚拟环境venv,下面的操作全是在venv中进行的。首先安装Theano和libgpuarray的一些依赖包,具体要求看libgpuarray官方文档
安装scipy时可能会报错,可参考下面链接来修复:
http://stackoverflow.com/questions/11114225/installing-scipy-and-numpy-using-pip
然后是安装Theano,注意版本号为0.8.2的稳定Theano跟libgpuarray是不同步的,在使用时会报错,具体文末会提到。这里我安装的是Theano(0.9.0dev):
这里还用到了libcheck,因此装上它:
下面开始安装libgpuarray
下面开始测试一下,Theano官方给出了一段测试程序,我们命名为test.py,程序如下:
先是仅用Theano和CPU,结果如下:
再是加了THEANO_FLAGS=mode=FAST_RUN的:
下面使用OpenCL的时候就报错,网上没有找到有效的解决方法,希望有遇到过的大神给指点迷津,具体如下:
到这里,如果你没有下面的这个问题,你的libgpuarray应该就算装好了。
接下来我会抽时间翻译一下libgpuarray的官方安装文档,供后来的同学参考。
现在的深度计算工具都是官方支持N卡,A卡在这方面实在太吃亏了,希望各个深度学习工具能尽快做出支持A卡的API。
最后鸣谢robberphex和Tinyfool,二位的博客给我提供了思路。
参考链接
- http://deeplearning.net/software/libgpuarray/installation.html
- https://www.robberphex.com/2016/05/521
- http://codechina.org/2016/04/how-to-install-theano-on-mac-os-x-ei-caption-with-opencl-support/
- http://m.blog.csdn.net/article/details?id=43987599
- http://forum.ubuntu.org.cn/viewtopic.php?t=445434
- http://www.tuicool.com/articles/6N3e2ir
- https://www.blackmoreops.com/2013/11/22/install-amd-app-sdk-kali-linux/
- http://blog.csdn.net/vblittleboy/article/details/8979288
- http://blog.csdn.net/zahuopuboss/article/details/50927432
- http://stackoverflow.com/questions/27971707/using-pythontheano-with-opencl-in-an-amd-gpu
- http://stackoverflow.com/questions/11114225/installing-scipy-and-numpy-using-pip