本篇适合第一次安装tensorflow-gpu的人,折腾了好久,一开始装了CUDA 10.1,发现tensorflow 1.13版本调用不起来GPU,后来看了官方的说明,CUDA10.1好像要2.0以上的tensorflow,所以放弃了CUDA10.1,装起了CUDA 9.0,以下为安装步骤
一、安装nvidia驱动
首先在终端 输入
nvidia-smi
如果有以下显示,说明驱动正常(这86%是我正在运行程序,就截图说明下而已)
如果没有反映或者提示没有这个命令之类,那么采用以下方式,我看到网上很多是要切换到无桌面命令格式,感觉好麻烦,其实不用,只要先在软件中搜索“软件更新”,首先找个镜像源,如果使用Ubuntu自带的更新实在太慢,还不一定成功,选择源的格式如下:
选择源之后,还是在软件更新中,选择附加驱动,然后选择合适的驱动,应用更改就好
然后在终端输入 nvidia-smi,应该可以正常显示第一个图的样子,接下来安装cuda9.0
二、安装cuda9.0
1、下载deb文件,网址如下:https://developer.nvidia.com/cuda-90-download-archive?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1604&target_type=deblocal
文件大小1.2GB,下载速度还是挺快的,下载完成后,进入下载目录,然后在终端输入以下命令:
sudo dpkg -i cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb
sudo apt-key add /var/cuda-repo-/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda
如果发现自动升级最新版本了,重新运行最后一条命令
sudo apt-get install cuda-9.0
此时CUDA安装完成,之后添加环境变量
gedit ~/.bashrc
在文件最后添加
export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64\
${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
然后 source ~/.bashrc
三、安装CUDNN
首先去官网下载https://developer.nvidia.com/rdp/cudnn-archive ,我下载的版本是cuDNN v7.0.5版本
下载完成后,对文件进行解压,有一个cuda的文件夹,包括include 和 lib64,把里面的文件复制到/usr/local/cuda/里面相应的目录里:
sudo cp 解压地址/cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp 解压地址/cuda/lib64/libcudnn* /usr/local/cuda/lib64/
然后给文件加读权限
sudo chmod a+x /usr/local/cuda/include/cudnn.h
sudo chmod a+x /usr/local/cuda/lib64/libcudnn*
更新网络链接
cd /usr/local/cuda/lib64/
sudo chmod +r libcudnn.so.7.0.5 # 自己查看.so的版本
sudo ln -sf libcudnn.so.7.0.5. libcudnn.so.7
sudo ln -sf libcudnn.so.7 libcudnn.so
sudo ldconfig
查看cudnn是否安装好:
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
显示如下,说明好啦
至此,基本安装就ok了,以上主要参考https://zhuanlan.zhihu.com/p/58114055?utm_source=wechat_session&utm_medium=social&utm_oi=28989976477696感谢分享,很清楚
然后就是装tensorflow-gpu了,直接pip3安装就行测试是否使用GPU,测试程序是否调用GPU
import tensorflow as tf
with tf.device('/cpu:0'):
a = tf.constant([1.0,2.0,3.0],shape=[3],name='a')
b = tf.constant([1.0,2.0,3.0],shape=[3],name='b')
with tf.device('/gpu:0'):
c = a+b
#因为不是所有的操作都可以被放在GPU上,如果强行将无法放在GPU上的操作指定到GPU上,将会报错。
sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True,log_device_placement=True))
sess.run(tf.global_variables_initializer())
print(sess.run(c))
如果显示操作是在GPU上,说明成功了,不成功的话,tensorflow-gpu版本是否都是匹配的