在Linux Ubuntu下:
一、tensorflow-gpu无法调用GPU
检查
请通过以下语句来进行检查:
import tensorflow as tf
tf.test.is_gpu_available()
tf.config.list_physical_devices('GPU')
报错且返回False是不成功的:
这样是成功的,返回True:
二、版本检查
1. 检查tensorflow-gpu版本与CUDA版本对应关系
官网中检查tensorflow-gpu版本与CUDA版本对应关系,是否符合:
https://www.tensorflow.org/install/source#gpu
不同版本的tensorflow-gpu与CUDA对应关系如下表所示(图片有点旧了,python版本是2.7和3.3-3.8):
对于版本号大于1.13的tensorflow-gpu的1.x版本,如1.14、1.15,建议安装CUDA10.0,不要安装CUDA10.1,安装后会提示缺少很多库文件,而导致GPU版本的tensorflow无法使用,如下图所示:
如果是2.0以上的tensorflow,按下面列表安装(2023年5月更新, 现在TF2.X和CUDA版本的兼容性越来越好了,不同的TF2.X版本可以匹配多个CUDA版本,下表所示是本人验证过的,不是唯一匹配方案)
2.linux查看cuda和cudnn版本
查看cuda版本:
nvcc -V
查看cudnn版本
cat /usr/local/cuda-11.6/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
若此处显示找不到文件的话说明没有装cudnn,需要再进行安装
3. 更换版本
确定是版本对应问题后,卸载现在的版本并且重新安装:
pip uninstall tensorflow tensorflow-gpu
pip install tensorflow-gpu==x.x.x
三、解决报错:Could not load dynamic library ‘libcudnn.so.8’; dlerror: libcudnn.so.8: cannot open shared object file: No such file or directory
确定版本没有问题后仍然报错:
W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library ‘libcudnn.so.8’; dlerror: libcudnn.so.8: cannot open shared object file: No such file or directory
2023-05-11 15:10:35.942107: W tensorflow/core/common_runtime/gpu/gpu_device.cc:1850] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.
Skipping registering GPU devices…
说明只安装了CUDA,并未安装CUDA所对应的libcudnn甚至是CUDNN
1. 安装CUDNN(若没安装的话)
下载CUDA版本对应的cuDNN版本:
https://developer.nvidia.com/rdp/cudnn-archive#a-collapse805-111
参照官方文档进行安装:
https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#installlinux-tar
验证:
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
出现以下信息说明安装成功,由于安装的cuDNN版本是8.5.0,所以MAJOR、MINOR、PATCHLEVEL依次是8、5、0
2. 安装CUDA所对应的libcudnn
去官网找到对应的libcudnn版本
网址:https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/
我所对应的版本如图所示
下载:
wget https://developer.download.nvidia.cn/compute/cuda/repos/ubuntu2004/x86_64/libcudnn8_8.4.0.27-1+cuda11.6_amd64.deb
对应的dev也要进行安装:
wget https://developer.download.nvidia.cn/compute/cuda/repos/ubuntu2004/x86_64/libcudnn8-dev_8.4.0.27-1+cuda11.6_amd64.deb
最后进行安装:
sudo dpkg -i libcudnn8_8.4.0.27-1+cuda11.6_amd64.deb
sudo dpkg -i libcudnn8-dev_8.4.0.27-1+cuda11.6_amd64.deb
再进行测试后显示为True,至此跑程序就可以调用gpu了。