引言
最近几天一直尝试搭建Theano深度学习开发环境,并安装英伟达CUDA Toolkit。这期间,有想过在Windows上搭建的,但是从网上了解后,发现还是在Linux环境下更加合适。在搭建这个开发环境的过程中,其实入了不少坑,有点曲折。本不打算写搭建过程的,因为网上确实有不少不错的安装步骤,以及官网也有安装教程。But,鉴于被坑了好几天,还是记录一下,长长记性 🙂
期间安装Ubuntu 14.04超过4次(原因:有些软件依赖问题无法解决,更换软件源貌似也不可以。不过今天把软件源换成主服务器后,就正常了,但是我的无线网速度比较慢,所以使用主服务器后,下载速度明显要慢了不少。)。
尝试安装Fedora操作系统1次,因为也想过在这个系统上搭建环境的,因为Ubuntu 14.04上面的部分依赖总是搞不定。但是因为网卡驱动的问题,始终无法联网;无法联网,自然就没法安装编译器,没有编译器,没法安装网卡驱动(因为需要编译驱动),最后放弃了这个平台。
尝试安装CentOS操作系统1次,其实根本没有安装成功,原因是我的独立显卡驱动问题,导致安装程序的图形界面上的所有文字都是模糊的,甚至连“退出安装”按钮文字我都识别不出来,最后放弃了。
台式机主要参数
- 内存:金士顿8G
- 处理器:Intel Core i5-4590 CPU @ 3.3GHz x 4
- 显卡: 英伟达Geforce GTX 750 (GPU并行运算)
- 硬盘: 西部数据 1TB
安装Ubuntu 14.04操作系统
- 制作Ubuntu启动盘(使用软碟通写入到U盘上);
- 台式机启动时,选择快捷启动,从U盘启动Ubuntu live cd系统;
- 安装Ubuntu 14.04操作系统;
- 安装完毕后重新启动系统;
- 启动系统,在进入Grub界面时,按
e
键,进入编辑页面,在倒数第二行中,ro quiet splash
后面添加nomodeset
,这样进入系统后不会因为独显驱动问题而导致黑屏了;
- 在进入系统后,编辑文件
/boot/grub/grub.cfg
文件,搜索ro quiet splash
关键词,同样追加nomodeset
,这样不用每次启动系统前重复上述步骤了。
安装Theano环境
需要预先安装的工具
e
键,进入编辑页面,在倒数第二行中,ro quiet splash
后面添加nomodeset
,这样进入系统后不会因为独显驱动问题而导致黑屏了;/boot/grub/grub.cfg
文件,搜索ro quiet splash
关键词,同样追加nomodeset
,这样不用每次启动系统前重复上述步骤了。需要预先安装的工具
这些工具在后面可能会使用到,如编译器等。
sudo apt-get install -y Python-dev python-pip python-nose gcc g++ git gfortran
安装BLAS, LAPACK, ATLAS
这些软件包必须在安装Numpy和Scipy之前安装
sudo apt-get install -y libopenblas-dev liblapack-dev libatlas-base-dev
安装NumPy
在官方教程中使用了apt-get
方式安装的,但是貌似我确实在安装后没有通过单元测试,有不少错误产生。尤其是后面安装的SciPy更是如此。可能和我之前没有把需要的工具包安装齐全有关系吧。
# 安装NumPy,这个安装过程需要等待会,因为需要编译,所以得花一点时间。
# 实际上后面安装的SciPy和Theano都会花时间编译的,整个安装过程还是要挺久的。
sudo pip install numpy
# 进行测试。
python -c 'import numpy; numpy.test()'
必须要保证上面的测试通过,然后再继续下一步,确保每一步都是正确的。没有Errors则通过测试。测试结果如下。
安装SciPy
# 安装方法,耐心等待编译吧:)
sudo pip install scipy
# 进行测试
python -c 'import scipy; scipy.test()'
# 安装方法,耐心等待编译吧:)
sudo pip install scipy
# 进行测试
python -c 'import scipy; scipy.test()'
必须保证scipy
也正常通过测试,这样才可以继续安装下面的Theano。测试结果如下图:
————————————–分割线 ————————————–
Ubuntu下CUDA(含GPU卡驱动)安装过程 http://www.linuxidc.com/Linux/2015-07/120456.htm
Caffe + Ubuntu 14.04 64bit + CUDA 6.5 配置说明 http://www.linuxidc.com/Linux/2015-04/116444.htm
Ubuntu 14.04 安装配置CUDA http://www.linuxidc.com/Linux/2014-10/107501.htm
Ubuntu 12.04配置NVIDIA CUDA5.5实录 http://www.linuxidc.com/Linux/2014-10/107502.htm
Ubuntu安装Theano+CUDA http://www.linuxidc.com/Linux/2014-10/107503.htm
关于Ubuntu 12.04 下 CUDA5.5 的安装请参看如下链接 Ubuntu 12.04 安装 CUDA-5.5
————————————–分割线 ————————————–
安装Theano
# 安装方法,还是要耐心等待编译安装的,感觉比较耗时
sudo pip install Theano
# 开始测试
sudo python -c 'import theano; theano.test()'
# 安装方法,还是要耐心等待编译安装的,感觉比较耗时
sudo pip install Theano
# 开始测试
sudo python -c 'import theano; theano.test()'
好吧,我感觉这个步骤中的Theano
测试花了好长时间,所以,还是耐心等待吧。最后结果如下。
安装CUDA Toolkit
下载CUDA Toolkit
在安装这个英伟达CUDA Toolkit时,还是遇到了不少问题。以下记录安装过程,详细的说明文档参见英伟达官方提供的Installation Guide for Linux。需要注意的是,该安装文件已经包含了英伟达较新的显卡驱动,所以不用单独安装独显驱动的。
下载CUDA Toolkit
-
进入CUDA Toolkit下载页面
-
选择对应的Ubuntu 14.04操作系统,并且选择下载runfile(1.1G)
文件,同时记录对应的MD5值,用于校验下载文档有没有损坏
-
下载GPU Development Kit
-
下载完成后,最后校验一下下载文件与下载页面提供的文件MD5值是否相同,确保下载到的安装包是完好无损的。
进入CUDA Toolkit下载页面
选择对应的Ubuntu 14.04操作系统,并且选择下载runfile(1.1G)
文件,同时记录对应的MD5值,用于校验下载文档有没有损坏
下载GPU Development Kit
下载完成后,最后校验一下下载文件与下载页面提供的文件MD5值是否相同,确保下载到的安装包是完好无损的。
安装一些需要的库
- 下面都是一些可能需要用到的库,否则在安装CUDA时,可能会提示缺少需要的库文件。
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
- 值得注意的是,我在我的Ubuntu系统
/usr/lib/x86_64-linux-gnu/
目录下找到了名为libGLU.so.1.3.1
,所以在尝试建立链接到/usr/lib/
目录下后,安装Samples时就正常了。
sudo ln -s /usr/lib/x86_64-linux-gnu/libGLU.so.1.3.1 /usr/lib/libGLU.so
安装CUDA
- 首先,将X-Window关闭,然后进入字符界面(如tty1)。关闭X-Window方法:
sudo service lightdm stop
- 接下来,在字符界面中,给下载好的
cuda_7.5.18_linux.run
以及cuda_352_39_gdk_linux.run
添加可执行权限
- 安装Development Kit:
sudo ./cuda_352_39_gdk_linux .run
- 安装CUDA:
sudo ./cuda_7.5.18_linux.run
,安装过程直接根据提示进行下去即可
- 重新启动X-Window:
sudo service lightdm start
sudo service lightdm stop
cuda_7.5.18_linux.run
以及cuda_352_39_gdk_linux.run
添加可执行权限sudo ./cuda_352_39_gdk_linux .run
sudo ./cuda_7.5.18_linux.run
,安装过程直接根据提示进行下去即可sudo service lightdm start
更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2015-09/123562p2.htm
环境变量设置
- 在终端中输入下面的命令即可:
echo 'export PATH=/usr/local/cuda-7.5/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
- 接下来重启系统,然后开始验证安装的结果。
验证
查看NVCC版本
nvcc -V
,输出结果如下:
nvcc -V
,输出结果如下:编译并运行例子
-
进入到Samples安装目录,然后在该目录下
make
,等待十来分钟。 -
编译完成后,可以在
Samples
里面找到bin/x86_64/linux/release/
目录,并切换到该目录 -
运行
deviceQuery
程序,查看输出结果如下(重点关注最后一行,Pass表示通过测试): -
运行
bandwidthTest
程序,查看输出结果如下(同样最后显示结果为PASS
):
综合测试
这是最后一个环节了,配置Theano使用GPU并行计算,以验证环境搭建是否成功。
- 首先将下面的测试代码复制到文本中,命名为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 xrange(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, T.Elemwise) for x in f.maker.fgraph.toposort()]):
print('Used the cpu')
else:
print('Used the gpu')
- 在用户目录下新建.theanorc配置文件,设置采用GPU替代CPU进行运算:
- 新建配置文件
sudo vi ~/.theanorc
-
添加如下内容:
[global] floatX=float32 device=gpu
- 运行test.py测试文件:
- 首先是默认的使用gpu进行计算,查看运行结果
-
作为对比,使用cpu进行计算,观察与gpu运算结果差别,从下面的截图中可以看出,使用gpu的运算时间明显短很多
总结
- 最终还是在Ubuntu 14.04.1系统上将整个开发环境搭建成功了,期间确实走了不少弯路。所以还是要汲取一下教训。
- 理想情况下,按照很多教程那样,可以很顺利的解决安装的问题。但是安装过程中还是遇到不少问题,所以,重要的是学会解决遇到的问题,还有就是耐心地阅读文档。
更多Ubuntu相关信息见Ubuntu 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=2
本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-09/123562.htm