Linux 安装 Tensorflow-gpu

实验环境:
硬件:Dell G7 / RTX2060
系统:Kubuntu 20.04 LTS
软件环境(已预先安装):
nvidia-driver-470
nvidia-cuda-toolkit
python3、pip3(没有安装Anaconda)

首先,先放几个重要的链接:
tensorflow各个版本与cuda版本的对应关系(有时效性,仅供参考)
https://blog.csdn.net/ysten618/article/details/106928786/
NVIDIA cuDNN 官方下载站
https://developer.nvidia.com/rdp/cudnn-archive#a-collapse765-101

安装TensorFlow并使其能够使用电脑的英伟达显卡,需要同时安装CUDA(让NVIDIA显卡能够用于并行计算的工具包)和cuDNN(让NVIDIA显卡能够用于神经网络计算的包)。
也就是,总共3个包:(默认python3、显卡驱动等这些基础的东西你已经装好了)
Tensorflow-GPU
CUDA
cuDNN
(若没有安装英伟达显驱,可参考 https://zhuanlan.zhihu.com/p/59618999 中的1.1和1.2步骤安装)

CUDA安装
由于本萌新认为安装显卡驱动是最危险、最难处理的步骤,所以本萌新安装tensorflow是以“不更改显卡驱动”为核心准则的,(实际上三个包的安装的版本并不是固定的)。通过命令
sudo aptitude install nvidia-cuda-toolkit
自动地安装适应当前显驱的最合适的CUDA。(本实验已经提前安装了CUDA,所有没有实际执行这一句)
查看CUDA版本:
本来应该有两种方法:
1)输入命令:
nvidia-smi

2)输入命令:
nvcc -V

两种方法显示的结果不一致,经过实验,以第二种方法的结果为准。

Tensorflow-GPU安装
根据“对应表”,选择合适的Tensorflow版本进行安装

例如,我的CUDA版本是10.1.243,所以可以选择Tensorflow-GPU-2.3.0进行安装,使用命令:
sudo pip3 install tensorflow-gpu==2.3.0
(注:pip3前面加sudo是我个人的陋习,你们实践的时候可以尝试不加sudo)

cuDNN安装
前往cuDNN官方下载站,根据“对应表”,选择合适的cuDNN版本下载。例如,我的CUDA版本为10.1.243,Tensorflow版本为2.3.0,那么cuDNN的版本应为7.6。

为了安装方便,本萌新选则使用Deb包进行傻瓜式安装,在这里有三个文件,只有1号文件是必须安装的cuDNN本体,2号3号随意安装,但安装必须先安装1号文件。
下载好后先命令行cd到下载目录下,然后使用命令:
sudo dpkg -i xxxxxxxxx.deb
进行Deb包安装。
(注:实验系统为Kubuntu20.04,但安装了属于Ubuntu18.04的包,目前尚未出现兼容性问题)

至此,tensorflow-gpu已经成功安装,现在可以检查其是否可以正常使用。本萌新提供一份简单的渣渣测试代码:
#########################################################################
import tensorflow as tf
import numpy as np
tf.compat.v1.disable_eager_execution()
N = 1000
x_data = np.random.rand(N).astype(np.float32)
y_data = x_data * 0.5 - 0.5
### Create TF Structure Start #################################################
# -1至1 的一维初始权重
Weights = tf.Variable(tf.random.uniform([1],-1.0,1.0))
# 0 的一维初始偏置
biases = tf.Variable(tf.zeros([1]))
#神经元计算值
y = Weights * x_data + biases
#误差(平方均值)
cost = tf.reduce_mean(tf.square(y - y_data))
#求导优化器(0.5的学习效率)
optimizer = tf.compat.v1.train.GradientDescentOptimizer(0.5)
#按照cost启动优化器
train = optimizer.minimize(cost)
#神经网络结构初始化按钮
init = tf.compat.v1.global_variables_initializer()
### Create TF Structure End #################################################
sess = tf.compat.v1.Session()
sess.run(init)
for step in range(1000):
sess.run(train)
if step%20 == 0:
print('%04d:'%step,'Weights = %f'%sess.run(Weights)[0],'biases = %f'%sess.run(biases)[0])
########################################################################
试运行该代码,观察输出结果,着重看有没有类似“Could not load dynamic library xxxxxxxx.so.xx.x.x”的错误发生,即缺少什么什么文件。
若显示缺少libcudart.so.10.1文件,那么说明安装的Tensorflow-GPU的需要的CUDA版本为10.1.x,(着重看文件的数字后缀,它对应者包的版本)。
若显示缺少libcudnn.so.7文件,即说明安装的Tensorflow-GPU的需要的cuDNN版本为7.x。
这种问题自行重新安装各个包、调整其版本即可。