配置的详细过程,总共分为以下几步:
一、 安装显卡驱动
二、安装cuda和cudnn
三、安装anaconda
四、 创建虚拟环境并配置theano
安装显卡驱动的方式很多,这里推荐最简单的一个方式
参考:https://blog.csdn.net/LittleVolcano/article/details/103456079
我这里安装的是cuda9和cudnn7.0.5,接下来都是按照此版本。
1.安装cuda
(1)cuda安装包:英伟达官网cuda安装包下载;
(2)选择CUDA Toolkit 9.0后,根据自己的系统选择,我的是Ubuntu16.04;
(3)直接选择runfile(local)就行了,然后选择Base Installer 下载;
(4)在downloads文件会有个cuda_9.0.176_384.81_linux.run的文件,ctrl+alt+t打开命令行,运行命令
sudo sh cuda_9.0.176_384.81_linux.run
安装过程中一直按住回车,直到显示到100%,接下来依次输入accept--> n --> y --> y --> y,这里选择一个n是因为不需要再安装显卡驱动,前面已经安装过了。
(5)安装完成后配置环境变量,打开home主目录下的 .bashrc文件,如果找不到这个文件,按ctrl+h展开隐藏文件,添加如下路径;
export LD_LIBRARY_PATH=$PATH:/usr/local/cuda-9.0/lib64
export PATH=$PATH:/usr/local/cuda-9.0/bin
export CUDA_HOME=/usr/local/cuda-9.0
终端执行指令
source ~/.bashrc
(6)检查一下安装成功与否
nvcc --version
如果如下图所示,就证明成功了,可以看到版本是9.0
(7)也可以采用以下方式检测
cd /usr/local/cuda/samples/1_Utilities/deviceQuery #由自己电脑目录决定
sudo make
sudo ./deviceQuery
2.安装cudnn
(1)cudnn安装包:cudnn官网下载
(2)根据cuda的版本选择对应的cudnn版本,直接选择cuDNN Library for Linux就行了;
(3)cudnn的下载比cuda稍微麻烦一点,需要注册,不过注册很容易,邮箱或是微信、QQ都可以。下载完后,downloads会出现一个cudnn-9.0-linux-x64-v7.tgz的文件,选择提取到此处,就会看到一个cuda的文件夹;
(4)在解压后的cuda文件夹内执行以下指令;
sudo cp include/cudnn.h /usr/local/cuda/include/
sudo cp lib64/lib* /usr/local/cuda/lib64/
(5)建立软链接
在/usr/local/cuda/lib64目录下打开终端,执行以下指令:
sudo chmod +r libcudnn.so.7.0.5
sudo ln -sf libcudnn.so.7.0.5 libcudnn.so.7
sudo ln -sf libcudnn.so.7 libcudnn.so
sudo ldconfig
(6)检测是否安装成功
终端执行
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
可以看到版本为 7.0.5
顺便说一句,在这里建立软链接后,环境变量其实是可以配置成如下,可以在多版本的cuda之间切换,由于我只安装了一个版本的cuda,安装多版本的cuda并切换,可以自行查找相关资料。
export LD_LIBRARY_PATH=$PATH:/usr/local/cuda/lib64
export PATH=$PATH:/usr/local/cuda/bin
export CUDA_HOME=/usr/local/cuda
注:
之前在笔记本的Ubuntu安装下安装显卡驱动和cuda时,遇到一个问题一直困扰着我。
在终端输入如下指令:nvidia-smi
会显示显卡信息如下:
右上角显示的CUDA version:10.1,而我安装的cuda版本是9.0,通过指令nvcc -V
也可以看到,正确安装了cuda,且版本是9.0,为什么和这里的显示不一样呢?
后来通过查找资料,了解到是CUDA有两个主要的API:runtime API和driver API。这两个API都有对应的CUDA版本,具体参考如下引用:
引用
https://cloud.tencent.com/developer/article/1536738
anaconda的安装比较简单,教程也比较多,这里不赘述。
(1)官网下载对应的anaconda安装包,我这里下载的是Anaconda2-5.0.1-Linux-86_64.sh,在download文件
(2)进入downloads文件夹,打开终端,输入指令
bash Anaconda2-5.0.1-Linux-86_64.sh
根据提示一步步安装成功,anaconda会自动加入环境变量。
这是比较关键的一步,也是比较容易出现很多报错的一步。
(1)创建虚拟环境
# 这里创建一个叫py27的虚拟环境,使用python 2,7
conda create -n py27 python=2.7
(2)激活环境
source activate py27
(3)安装theano,这里会自动安装theano 1.0.4,同时也会安装一些pygpu等包
conda install theano
(4)配置加测试
python -c "import theano"
这里会出现最常见的两个报错:
ValueError: You are tring to use the old GPU back-end.
ERROR (theano.gpuarray): Could not initialize pygpu, support disabled
别急,终端输入指令 sudo gedit ~/.theanorc
按如下修改
[global]
floatX=float32
device=cuda
optimizer=fast_compile
optimizer_including=cudnn # 如果你安装了cudnn需要加上这句话
[lib]
cnmem=0.8
[blas]
ldflas=-lopenblas
[nvcc]
fastmath=True
flags=-D_FORCE_INLINES
flags=-arch=sm_50 # 如果你的nvidia显卡是比较新的, cuda-toolkit是安装的比较老版本, 比如 gtx1660ti 但是cuda是7.5,就要加上这句话
[cuda]
root=/usr/local/cuda-9.0/
基本上配置完后,import Theano就不会出错了。
(5)最后也可以用官方的测试代码测试
from theano import function, config, shared, tensor
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([], tensor.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 %f seconds" % (iters, t1 - t0))
print("Result is %s" % (r,))
if numpy.any([isinstance(x.op, tensor.Elemwise) and
('Gpu' not in type(x.op).__name__)
for x in f.maker.fgraph.toposort()]):
print('Used the cpu')
else:
print('Used the gpu')
之前在很多资料上看到的测试代码,运行以后总是输出use cpu,但实际上是使用的gpu,这个是theano官方网站的测试代码,运行后结果如下图。
注
有些代码运行时需要加上THEANO_FLAGS=mode=FAST_RUN,device=cuda,floatX=float32 python xxx.py
,或者是直接把export THEANO_FLAGS='mode=FAST_RUN,device=cuda,floatX=float32'
加入到环境变量里面,我没加也没有出错,不过具体情况具体分体,出现问题不要急,多找资料,总能解决。