当前位置: 代码迷 >> 综合 >> Tensorflow2.x GPU 配置 —— Linux
  详细解决方案

Tensorflow2.x GPU 配置 —— Linux

热度:78   发布时间:2023-10-16 16:03:39.0

目录

  • Tensorflow 2.x
  • GPU 支持
  • 安装 NVIDIA 驱动
    • 1. 使用包管理工具
    • 2. 手动下载安装
  • 安装 CUDA 库
  • 安装 cuDNN 库
  • 添加库路径
  • 更新 cuDNN 的坑

Tensorflow 2.x

在 Tensorflow 还是 1.x 版本的时候, 还是区分 cpu和 gpu 版本的, 安装时需要分别安装,现在的 2.x 版本已经不需要这么麻烦,直接就可以支持 cpu 和 gpu.

GPU 支持

要使用 GPU, 必须要另外安装一些驱动和库, Tensorflow 有官网的安装步骤。 官网的安装步骤挺简单的, Ubuntu 中直接使用 apt 就可以完成安装,不过要注意网络的问题。 这里介绍手动安装, 也就是逐步安装所需要的驱动和软件,以后 Tensorflow 要是更新了, 也知道是怎么回事, 然后更新对应的部件就可以了。

安装 NVIDIA 驱动

GPU 是外部设备, 用使用外部设备就必须下载对应的驱动, 目前 Tensorflow 支持 NVIDIA 的 GPU 设备。

1. 使用包管理工具

在源中查看可以使用的 nvidia 驱动, 这种方法比较好, 不需要查看自己的 GPU 是什么类型和系列对应该自己的操作系统版本。

sudo apt-cache search nvidia-driver

然后选择安装一个就好, 例如安装 430(目前 Tensorflow 需求 418 以上)

sudo apt-get install nvidia-driver-430

成功后,需要重启, 最后使用进行如下测试,要是输入对应GPU的信息就是正确安装了。

nvidia-smi

若不是 Ubuntu ,应该可以使用自己版本对应的包管理工具进行相似的安装。

2. 手动下载安装

这个我踩过坑, 没多大意思, 乱七八糟,我都怀疑那些人到底懂不懂,那些步骤是不是必要的,这里不介绍。

安装 CUDA 库

安装完驱动之后, 就要使用 GPU 了, 关键是怎么用, 当然是用别人写好的库来使用咯。 所以下载安装 NVIDIA 提供的库, 链接 CUDA Toolkit

根据自己的 Tensorflow 版本选择需要的 cuda 版本。下载完后文件可能是无法运行的,所以需要这样:

chmod +x cuda_10.1.105_418.39_linux.run

然后运行、安装。

sudo ./cuda_10.1.105_418.39_linux.run 

进入安装界面,输入 accpet 后, 可能会发现有点坑, 因为这里也可以顺带安装 Nvidia 驱动 (版本只有一个), 不过由于上面已经安装过了, 所以就不装了, X 表示安装的意思。 下次自己可以尝试直接这里安装。
Tensorflow2.x GPU 配置 —— Linux

注意 cuda 被安装在 /usr/local/ 下面, cuda 是软连接, 没有版本号的, 下次更新 cuda 时,一般情况下会自动更新软链接。
Tensorflow2.x GPU 配置 —— Linux
再来 nvidia-smi 应该会输出对应版本的 CUDA 版本。

安装 cuDNN 库

这是个深度神经网络库(DNN),用来 GPU 加速的。 在 官网 下载(需要登录,自己注册个账号就好了), 选择的目标版本(压缩格式的)。 下载完后解压。

tar -xf cudnn-10.1-linux-x64-v7.6.5.32.tgz 
cd cuda # 进入对应的目录

里面有头文件和库, 需要放到对应的 cuda 目录当中

sudo mv include/* /usr/local/cuda/include
sudo mv lib64/* /usr/local/cuda/lib64

添加库路径

到此就应该完结撒花了, 不过还需要添加库路径, 默认的库搜索的目录是包括 /usr/local/cuda/lib64 的,所以可以

vim ~/.bashrc
# 添加下面的内容
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64"# 保存后,更新一下
source ~/.bashrc

最后试试自己的GPU能不能正常使用吧,第一次使用 GPU 时, 第4行会耗费一点时间。

tf.test.is_gpu_available() # 返回 True
images = np.random.randn(1, 100, 100, 3)     
filters = np.zeros((1, 3, 3, 3)) 
output = tf.nn.conv2d(images, filters, 2, padding='SAME') 

更新 cuDNN 的坑

或许有些人已经配置好,但是更新 tensorflow 后,报错说 cuDNN 版本不匹配,自己经过上述步骤重新配置后还是报错版本不对,如果你确定 /usr/local/cuda/lib64 中的 libcudnn7.so (我这里是7) 是正确的版本, 那就表明 Tensorflow 在别的地方已经找到了 libcudnn7.so (旧版本)的。 那十有八九, 之前安装的方式是通过 .deb 之类的安装的, 然后自动将库放到了别的库路径, 搜索一下, 找到, 删掉或者改个名。应该就行。

locate libcudnn7.so 

正确路径应该是下面这种, 别乱删了。

/usr/local/cuda-10.1/targets/x86_64-linux/lib/libcudnn.so
/usr/local/cuda-10.1/targets/x86_64-linux/lib/libcudnn.so.7
/usr/local/cuda-10.1/targets/x86_64-linux/lib/libcudnn.so.7.6.5