ubuntu14.04 + cuda6.5 + pycuda 安装

本人用了差不多一周的时间终于在ubuntu14.04的环境下成功安装pycuda-2014.01.

在进行deep learning 过程中,为了提高程序的运行效率,我们通常会借助gpu进行并行计算,本人以前进行过cuda并行计算的研究和学习,所以想借助于cuda对deep learning程序进行加速,但是之前是基于cuda c进行编程,而python最大的特点就是支持的库很多,如numpy,使用起来比c语言更具优势,但在速度方面python不如c,由于pycuda的出现能很好的解决相应的问题。

安装步骤如下:

1.首先安装ubuntu-64bit

2.python-six更新

ubuntu14.04好像自带的python-six版本是1.5.2,但是pycuda-2014.01必须要用到python-six的高级版本,笔者在进行python-six的更新时浪费了很多时间,并且在pycuda的wiki邮件列表里上能找到python-six的问题,但是邮件列表内并没有解决该问题。通过语句

sudo apt-get python-six upgrade

虽然可以对python-six进行更新,但是更新之后系统仍然使用的是python-six1.5版本。可以通过

ThinkCentre-M57e:~/pycuda-2014.1$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import six
>>> six.__version__
'1.5.2'
>>> 

来看python-six的版本。解决此问题的方法为在装所有软件之前先从网上下载python-six1.9.0,然后安装即可。

3.下载 cuda6.5按照该博文中cuda6.5的安装方法对cuda6.5进行安装install但是需要注意的是后面的nvcc不需要安装,因为如果安装没有出错的话,nvcc是已经安装好的,若重新再装后面在测试pycuda时会报错(后面会讲到)。

4.接下来就是按照pycuda wiki上的提示进行安装:

$ sudo apt-get install python-numpy -y
$ sudo apt-get install build-essential python-dev python-setuptools libboost-python-dev libboost-thread-dev -y

上面最后一步可能会出现libboost-thread-dev 不会被安装的情况,此时需要换一下软件源再进行安装。

下载pycuda

$ tar xzvf pycuda-VERSION.tar.gz
$ cd pycuda-VERSION
$ ./configure.py --cuda-root=/usr/local/cuda --cudadrv-lib-dir=/usr/lib/x86_64-linux-gnu --boost-inc-dir=/usr/include --boost-lib-dir=/usr/lib --boost-python-libname=boost_python --boost-thread-libname=boost_thread
$ make -j 4

运行到这步时可能会报错说找不到nvcc的路径,此时我们可以通过下面的语句进行替代:

$ sudo env PATH=$PATH make -j 4
$ sudo env PATH=$PATH python setup.py install

安装完成以后我们对pycuda-2014.1里面的例子进行测试一下:

ThinkCentre-M57e:~/pycuda-2014.1/examples$ ls
demo_elementwise.py  demo_meta_template.py  demo_struct.py                  dump_properties.py     hello_gpu.py
demo_meta_codepy.py  demo.py                download-examples-from-wiki.py  fill_gpu_with_nans.py  MORE_EXAMPLES_ON_THE_WIKI
ThinkCentre-M57e:~/pycuda-2014.1/examples$ python demo.py 
original array:
[[ 0.10045559 -0.41886264  1.12284923 -1.50559962]
 [ 0.12778306  0.71348238 -1.15700686 -0.17418264]
 [ 0.34565908 -0.17478919  0.01356251  1.16269362]
 [-0.61118865 -0.1080422  -0.9229185   1.49180794]]
doubled with kernel:
[[ 0.20091118 -0.83772528  2.24569845 -3.01119924]
 [ 0.25556612  1.42696476 -2.31401372 -0.34836528]
 [ 0.69131815 -0.34957838  0.02712502  2.32538724]
 [-1.2223773  -0.21608439 -1.845837    2.98361588]]
doubled with InOut:
[[ 0.20091118 -0.83772528  2.24569845 -3.01119924]
 [ 0.25556612  1.42696476 -2.31401372 -0.34836528]
 [ 0.69131815 -0.34957838  0.02712502  2.32538724]
 [-1.2223773  -0.21608439 -1.845837    2.98361588]]
original array:
[[ 0.75977862  1.92598414 -0.63168722  0.5591501 ]
 [-0.0852133  -1.49266922  0.11701498 -2.12219763]
 [ 0.32364693 -0.49749166  1.68889701  1.03296471]
 [ 0.39916766 -2.47587013 -0.50792807  0.08566957]]
doubled with gpuarray:
[[ 1.51955724  3.85196829 -1.26337445  1.1183002 ]
 [-0.17042661 -2.98533845  0.23402996 -4.24439526]
 [ 0.64729387 -0.99498332  3.37779403  2.06592941]
 [ 0.79833531 -4.95174026 -1.01585615  0.17133914]]
ThinkCentre-M57e:~/pycuda-2014.1/examples$