最近重装了一下机器,为了恢复开发环境又查阅了一些资料,正好有小伙伴问theano的GPU模块的配置,在这里就顺便做一个记录,防止下一次装机的时候忘记。由于个人喜好工作娱乐分开,所以考虑还是用win8+ubuntu双系统的结构。
一、装双系统
我的硬件条件是Toshiba的laptop,i7四核cpu,8g内存,GeFroce 2g显存。考虑装个win8娱乐,由于win8之后采用EFI的启动模式,所以想要在EFI模式下实现双系统切换必须慎重的选择ubuntu的系统版本。例如ubuntu 12.0.4就不支持EFI下boot,那么这种情况下从win8切换到ubuntu系统就需要进bios把boot mode改为csmmode。目前支持EFI模式启动的ubuntu系统为ubuntu14.04和ubuntu14.10版本的64位版本。另外,由于ubuntu14.10系统暂时还不支持CUDA,所以选定安装的系统为ubuntu14.04。
第一步、备份文件并利用universal usb installer或者ultraiso等工具做一个ubuntu的u盘启动盘。
推荐用ultraiso,我曾经用uui做过几个启动盘,发现有的时候我有文件损坏的现象,而ubuntu系统的安装时是不容错的,一些小的文件缺失也会导致安装的退出。
第二步、关闭快速启动。在电源选项中找。
第三步、关闭安全启动。开机f2进bios修改。
第四步、在EFI模式下安装ubuntu系统。开机f12选择为usb启动。
二、安装CUDA
第一步、安装nvidia的显卡驱动。
进入Ubuntu,按ctrl+alt+f1进入tty, 登录tty后输入如下命令
sudo service lightdm stop
让图形界面的服务暂停。接下来,输入下列命令添加驱动源
sudo add-apt-repository ppa:xorg-edgers/ppa
sudo apt-get update
CUDA 6.5.14目前最高仅支持340版驱动,安装nvidia-340驱动
sudo apt-get install nvidia-340
安装完成后, 继续安装补丁包
sudo apt-get install nvidia-340
安装完成后 reboot.
这里不安装NVIDIA驱动(官方的驱动一上我的机器就卡机****),先解压
*.run --extract=extract_path
需要给所有.run文件可执行权限
chmod +x *.run
通过下列命令安装CUDA, 按照说明一步一步安装至完成.
./cuda-linux64-rel-6.5.run
添加环境变量:
$sudo gedit etc/profile修改内容为
export PATH=$PATH:/usr/local/cuda-6.5/bin
export LD_LIBRARY_PATH=/usr/local/cuda-6.5/lib64:/lib
使之生效:
source /etc/profile
第四步、验证CUDA安装成功
首先安装下列依赖包
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libglu1-mesa-dev
然后用下述命令安装sample文件
sudo ./cuda-samples-linux-6.5.14-18745345.run
完成后编译Sample文件, 整个过程大概10分钟左右
cd /usr/local/cuda-6.5/samples
sudo make
全部编译完成后, 进入 samples/bin/x86_64/linux/release, sudo下运行deviceQuery
sudo ./deviceQuery
如果出现下列显卡信息, 则驱动及显卡安装成功:
./deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 1 CUDA Capable device(s)
Device 0: "GeForce GTX 670"
CUDA Driver Version / Runtime Version 6.5 / 6.5
CUDA Capability Major/Minor version number: 3.0
Total amount of global memory: 4095 MBytes (4294246400 bytes)
( 7) Multiprocessors, (192) CUDA Cores/MP: 1344 CUDA Cores
GPU Clock rate: 1098 MHz (1.10 GHz)
Memory Clock rate: 3105 Mhz
Memory Bus Width: 256-bit
L2 Cache Size: 524288 bytes
Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers
Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 49152 bytes
Total number of registers available per block: 65536
Warp size: 32
Maximum number of threads per multiprocessor: 2048
Maximum number of threads per block: 1024
Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535)
Maximum memory pitch: 2147483647 bytes
Texture alignment: 512 bytes
Concurrent copy and kernel execution: Yes with 1 copy engine(s)
Run time limit on kernels: Yes
Integrated GPU sharing Host Memory: No
Support host page-locked memory mapping: Yes
Alignment requirement for Surfaces: Yes
Device has ECC support: Disabled
Device supports Unified Addressing (UVA): Yes
Device PCI Bus ID / PCI location ID: 1 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 6.5, CUDA Runtime Version = 6.5, NumDevs = 1, Device0 = GeForce GTX 670
Result = PASS
三、安装Theano并配置GPU模式
设置theano参数的首选项
sudo vim ~/.theanorc
写入:
[global]
floatX = float32
device = gpu
如果为如下的输出则GPU模块正常
$ THEANO_FLAGS=mode=FAST_RUN,device=cpu,floatX=float32 python check1.py
[Elemwise{exp,no_inplace}()]
Looping 1000 times took 3.06635117531 seconds
Result is [ 1.23178029 1.61879337 1.52278066 ..., 2.20771813 2.29967761
1.62323284]
Used the cpu
$ THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32 python check1.py
Using gpu device 0: GeForce GTX 580
[GpuElemwise{exp,no_inplace}(), HostFromGpu(GpuElemwise{exp,no_inplace}.0)]
Looping 1000 times took 0.638810873032 seconds
Result is [ 1.23178029 1.61879349 1.52278066 ..., 2.20771813 2.29967761
1.62323296]
Used the gpu
可以通过THEANO_FLAGS参数来覆盖首选项中的参数,例如切换到CPU模式
THEANO_FLAGS='floatX=float32,device=gpu0,nvcc.fastmath=True' python .py
几个参考网页:
1、安装双系统 http://os.51cto.com/art/201405/439158.htm
2、安装CUDA http://www.cnblogs.com/platero/p/3993877.html
3、安装Theano http://blog.csdn.net/abcjennifer/article/details/23016583
合理地运用好GPU运算速度往往能得到数十倍的提升,安装配置过程虽然繁杂,但是绝对磨刀不误砍柴工,会有让你惊喜的性能飞跃,值得一试。