目录
- 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 表示安装的意思。 下次自己可以尝试直接这里安装。
注意 cuda 被安装在 /usr/local/ 下面, cuda 是软连接, 没有版本号的, 下次更新 cuda 时,一般情况下会自动更新软链接。
再来 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