Ubuntu15.04 64位安装Theano(已经测试可执行)

16 篇文章 0 订阅
1 篇文章 0 订阅

备注:之前服务器上已经安装caffe,后安装Theano,所有有些步骤简略。
安装caffe详情见
Caffe + Ubuntu 15.04 + CUDA 7.5 在服务器上安装配置及卸载重新安装(已测试可执行)
安装所需的安装包见
链接: http://pan.baidu.com/s/1jIRJ6mU
提取密码:xehi

Theano官方网站:
http://deeplearning.net/software/theano/#


BLAS(Basic Linear Algebra Subprograms)是基础线性代数子程序库,里面拥有大量已经编写好的关于线性代数运算的程序;
LAPACK (Linear Algebra PACKage)包含了求解科学与工程计算中最常见的数值线性代数问题,如求解线性方程组、线性最小二乘问题、特征值问题和奇异值问题等;
ATLAS是python下的一个线性代数库,是基于另外两个线性代数库BLAS和lapack的;
NumPy提供了一个在python中做科学计算的基础库,它重在数值计算,甚至可以说是用于多维数组处理的库;
SciPy是基于numpy,提供了一个在python中做科学计算的工具集,也就是说它是更上一个层次的库;
Theano则是基于NumPy以及SciPy的一个更高级的用于科学计算的库。

要安装Theano,就需要先安装好numpy和scipy;
要安装numpy和scipy,就需要ATLAS;
要安装ATLAS,就需要安装BLAS和LAPACK;

相关库的安装顺序

安装顺序:BLAS → LAPACK → ATLAS → numpy → scipy → Theano

第1步:安装cuda,若已经安装可进入第2步

sudo dpkg -i cuda-repo-ubuntu1504-7-5-local_7.5-18_amd64.deb
sudo apt-get update
sudo apt-get install -y cuda

但此时查询cuda会出现问题

nvcc -V

问题是

The program 'nvcc' is currently not installed. You can install it by typing:
sudo apt-get install nvidia-cuda-toolkit

但是我们已经安装了cuda,在 /usr/local 能够看到文件夹 cuda-7.5。 这需要如下设置

执行sudo gedit ~/.bashrc,在最后面,64位的话粘贴以下内容:

export PATH=/usr/local/cuda-7.5/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH

接着执行 source ~/.bashrc 使其立即生效
下面查询

nvcc -V

可见如下结果

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2015 NVIDIA Corporation
Built on Tue_Aug_11_14:27:32_CDT_2015
Cuda compilation tools, release 7.5, V7.5.17

第2步:配置cuda
执行

nvidia-settings

会弹出显卡配置的界面,至少7个大项,其中有一项叫GPU-0(Quadro K5200)和GPU-1(Tesla K40c),如果能看到自己的显卡的话,应该就算安装成功了。下面进行配置。


使用自带的samples进行GPU运算测试。进入到cuda-7.5的samples目录,一般都是cd /usr/local/cuda-7.5/samples,然后会有一个Makefile文件,执行命令

sudo make

不出意外地话,会出现带有红颜色的error错误,大概是这样的:unsupported GNU version! gcc versions later than 4.9 are not supported! 意思也很明显了,就是gcc的版本高于4.9,Cuda不支持。


解释一下:ubuntu15.04自带的gcc是4.9.2,可以通过

gcc --version

查看,但是cuda不支持超过4.9.2的gcc编译器。要么安装一个低版本的编译器,要么把cuda的这个限制给去掉。


方法1:降级安装gcc/g++版本为4.7.x
(a). 下载gcc/g++ 4.7.x

sudo apt-get install -y gcc-4.7
sudo apt-get install -y g++-4.7

(b). 链接gcc/g++实现降级

cd /usr/bin
sudo rm gcc
sudo ln -s gcc-4.7 gcc
sudo rm g++
sudo ln -s g++-4.7 g++

方法2 去掉 cuda的限制

sudo cd /usr/local/cuda/include/ #进入到头文件目录cuda(而不是cuda-7.5);
sudo cp host_config.h host_config.h.bak #备份原头文件;
sudo gedit host_config.h #编辑头文件;

ctrl+F查找4.9出现的地方,大约位于115行,在第113行处应该显示if GNUC>4 || (GNUC == 4 && GNUC_MINOR > 9),因为我们的是4.9.2,因此,把上面的2个4都改成5就ok了,保存退出。

备注:Matlab 2014a(2015a)的版本是4.7.x所以在使用matla调用mex文件的时候,基本上都会报错。综上所述,建议使用方法1来修改。


接着进行编译

cd /usr/local/cuda-7.5/samples
sudo make

这个过程会比较长,让他在哪编译一会,剩下的时间可以用来安装Theano。

第3步: 安装 Theano

更新源

sudo apt-get update

安装依赖包

sudo apt-get install python-numpy python-scipy python-dev python-pip python-nose g++ libopenblas-dev git

安装scipy依赖包
scipy的安装需要依赖于numpy、lapack、atlas(后两者都是线性代数工具包),而numpy和sci的测试程序的运行又依赖于nose,因此,整个安装过程必须要按顺序执行的,否则是无法执行下去的。


1、先安装nose包


sudo apt-get install python-nose

2、接下来安装各种包


# 安装gfortran,后面编译过程中会用到
sudo apt-get install gfortran
# 安装blas,Ubuntu下对应的是libopenblas,其它操作系统可能需要安装其它版本的blas——这是个OS相关的。
sudo apt-get install libopenblas-dev
# 安装lapack,Ubuntu下对应的是liblapack-dev,和OS相关。
sudo apt-get install liblapack-dev
# 安装atlas,Ubuntu下对应的是libatlas-base-dev,和OS相关。
sudo apt-get install libatlas-base-dev

  1. 安装numpy scipy
sudo apt-get install python-numpy  # python2.7
sudo apt-get install python3-numpy # python3.5
sudo apt-get install python-scipy  # python2.7
sudo apt-get install python3-scipy # python3.5

安装Theano

sudo pip install Theano

测试numpy是否启用了blas加速,进入python
在命令行输入

python
>>>import numpy
>>>id(numpy.dot) == id(numpy.core.multiarray.dot) 
>>>False

输出False表示加速成功,如果输出True,参考官方教程修改,理论上很少加速失败。失败请查看高性能Numpy/Scipy加速:使用Intel MKL和Intel Compilers或OpenBLAS(待续)

第4步: 编辑Theano配置文件

sudo gedit ~/.theanorc 

写入以下下内容:

[global]
openmp=False
floatX=float32
device=gpu
allow_input-downcast=True  
[blas]  
ldflags=  
[nvcc]  
flags=-D_FORCE_INLINES  
[lib]
cnmem = 1

第5步:命令端其他测试

NumPy (~40s)

python -c "import numpy;numpy.test()"

SciPy (~2m)

python -c "import scipy;scipy.test()"

Theano (~30m)

python -c "import theano;theano.test()"

在Theano测试时可能会有问题

Using gpu device 0: Tesla K40c (CNMeM is disabled, cuDNN Version is too old. Update to v5, was 4004.)

所以这需要升级为cuDNN v5


出现了no module named nose-parameterized问题

pip install nose-parameterized

第6步:测试经典的GPU测试代码保存至test.py

sudo gedit test.py

写入以下内容

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 = 1000
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 ('Used the cpu')
else:
    print ('Used the gpu')

结果显示如下

Using gpu device 0: Tesla K40c (CNMeM is disabled, cuDNN 5103)
/home/bids/.local/lib/python2.7/site-packages/theano/sandbox/cuda/__init__.py:600: UserWarning: Your cuDNN version is more recent than the one Theano officially supports. If you see any problems, try updating Theano or downgrading cuDNN to version 5.
  warnings.warn(warn)
[GpuElemwise{exp,no_inplace}(<CudaNdarrayType(float32, vector)>), HostFromGpu(GpuElemwise{exp,no_inplace}.0)]
-------------------------------------------------------
Looping 1000 times took 0.630527973175 seconds
---------------------------------------------------------
Result is [ 1.23178029  1.61879349  1.52278066 ...,  2.20771813  2.29967761
  1.62323296]
Used the gpu

如果想用cpu测试的话,就sudo gedit ~/.theanorc,将其中的gpu修改为cpu就可以了。
结果显示如下

[Elemwise{exp,no_inplace}(<TensorType(float32, vector)>)]
-----------------------------------------------------------
Looping 1000 times took 3.24689912796 seconds
-----------------------------------------------------------
Result is [ 1.23178029  1.61879337  1.52278066 ...,  2.20771813  2.29967761
  1.62323284]
Used the cpu

结果显示 GPU加速效果明显


Using gpu device 0: Tesla K40c (CNMeM is disabled, cuDNN 5103)
解决方法


cnmem package: https://github.com/NVIDIA/cnmem

cd $HOME
% git clone https://github.com/NVIDIA/cnmem.git cnmem
% cd cnmem
% mkdir build
% cd build
% cmake ..
% make

link with cnmem


The source folder contains a header file include/cnmem.h and the build directory contains the library libcnmem.so, put them into your cuda path: /usr/local/cuda/include,/usr/local/cuda/lib64

sudo cnmem
sudo cp -rf ./include/cnmem.h /usr/local/cuda/include
sudo cp -rf ./build/libcnmem.so /usr/local/cuda/lib64

sudo gedit ~/.theanorc
[global]
openmp=False
floatX=float32
device=cpu
allow_input-downcast=True  
[blas]  
ldflags=  
[nvcc]  
flags=-D_FORCE_INLINES  
[lib]
cnmem = 1

测试

python test.py
Using gpu device 0: Tesla K40c (CNMeM is enabled with initial size: 95.0% of memory, cuDNN 5110)

参考主页:

Ubuntu15.10_64位安装Theano+cuda7.5详细笔记

Ubuntu-安装-theano+caffe-超详细教程

Caffe + Ubuntu 15.04 + CUDA 7.5 在服务器上安装配置及卸载重新安装(已测试可执行)

Ubuntu14.04安装Theano详细教程

Theano: CNMeM is disabled, CuDNN not available

Windows10 64Bit完美配置Theano并实现GPU加速并解决((CNMeM is disable,CuDNN not available))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值