安装显卡驱动
系统设置=>软件和更新=>附加驱动=>切换到最新的nvidia驱动=>应用更改=>完成后重启
终端输下面命令看是否安装成功
nvidia-smi

可以看到我的nvidia版本为384.130。
如果想另外安装驱动参考最全面解析 Ubuntu 16.04 安装nvidia驱动 以及各种错误.
安装CUDA
需要到CUDA工具集下载。
里面有各种版本,根据自己的tensorflow-gpu版本和nvidia驱动版本下载对应的CUDA版本,例如我的tensorflow-gpu版本1.14,我下载的CUDA版本就是10.0(注意下载的是runfile文件,不是deb)
已经安装CUDA的可以通过下面命令卸载,版本号换成你自己的
sudo /usr/local/cuda-6.5/bin/uninstall_cuda_6.5.pl
删除后一般需要重启

下载后输入下面命令安装
sudo sh cuda_10.0.130_410.48_linux.run
安装过程中安装驱动填入no(上面已经安装),其他都默认或yes
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?
(y)es/(n)o/(q)uit: no
3.安装好后需要设置环境变量,在主目录下的.bashrc中添加环境变量,需要将版本换成你自己CUDA的版本号
vim ~/.bashrc
export CUDA_HOME=/usr/local/cuda
export PATH=$PATH:$CUDA_HOME/bin
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
使环境变生效
source ~/.bashrc
输入命令查看是否成功
cd /usr/local/cuda-10.0/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery
会输出一堆信息,就可以了。否则可能要重新来过。
补充:
查看tensorflow版本
1.进入python环境(根据你自己的环境)
python3.6
2.输入以下代码
>>> import tensorflow as tf
>>> tf.__version__
1.14.0
查看tensorflow版本和nvidia驱动对应的CUDA版本


安装cuDNN
官网下载cuDNN需要填写一些东西,照填就对了
到nvidia官网根据tensorflow-gpu和CUDA对应的版本下载cuDNN。
进入到cuDNN的文件夹,解压cuDNN
tar -xvf cudnn-10.0-linux-x64-v7.4.1.5.tgz
将cuda里的文件复制到之前安装的cuda的路径中(默认为 /usr/local/cuda-10.0)
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
安装tensorflow-gpu
一般使用pip安装tensorflow-gpu,这一步很容易。
sudo pip install tensorflow-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:1'):
c = a+b
#注意:allow_soft_placement=True表明:计算设备可自行选择,如果没有这个参数,会报错。
#因为不是所有的操作都可以被放在GPU上,如果强行将无法放在GPU上的操作指定到GPU上,将会报错。
sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True,log_device_placement=True))
#sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
sess.run(tf.global_variables_initializer())
print(sess.run(c))

注意,这里只能在终端运行,如果要在IDE运行,可能还需要配置环境变量。
注:图片均来自网络,侵删。