我注意到一些较新的TensorFlow版本与较旧的CUDA和cuDNN版本不兼容。是否存在兼容版本的概述,甚至官方测试的组合列表?我在TensorFlow文档中找不到它。


当前回答

在升级到TF 2.0后,我遇到了类似的问题。TF报告的CUDA版本与Ubuntu 18.04认为我已经安装的版本不匹配。它说我使用的是CUDA 7.5.0,但apt认为我安装的版本是正确的。

我最终不得不做的是在/usr/local中递归地grep CUDNN_MAJOR,我发现/usr/local/cuda-10.0/target /x86_64-linux/include/cudnn.h确实将版本指定为7.5.0。 /usr/local/cuda-10.1是正确的,而/usr/local/cuda指向/usr/local/cuda-10.1,所以对我来说,为什么TF要查看/usr/local/cuda-10.0是一个谜。

不管怎样,我只是把/usr/local/cuda-10.0移动到/usr/local/old-cuda-10.0,所以TF再也找不到它了,然后一切都像魔法一样工作。

这一切都很令人沮丧,我仍然觉得我只是做了一次随机入侵。但它起作用了:)也许这将帮助那些有类似问题的人。

其他回答

TL;DR)参见以下表格:https://www.tensorflow.org/install/source#gpu

一般来说:

查看CUDA版本:

cat /usr/local/cuda/version.txt

和cuDNN版本:

grep CUDNN_MAJOR -A 2 /usr/local/cuda/include/cudnn.h

并安装如下所示的图像或这里的组合。

下面的图片和链接提供了在Linux、macOS和Windows上官方支持/测试的CUDA和TensorFlow组合的概述:

小配置:

由于下面给出的规范在某些情况下可能过于宽泛,下面是一个特定的配置:

tensorflow-gpu = = 1.12。 cuda = = 9。 cuDNN = = 7。1。4

相应的资料可在此下载。

测试的构建配置

请参考https://www.tensorflow.org/install/source#gpu获得最新的兼容性图表(官方TF车轮)。

(数据于2020年5月20日更新)

Linux GPU

Linux CPU

一样GPU

CPU一样

Windows GPU

Windows CPU

2020年12月5日更新:有关更新信息,请参阅Link For Linux和Link For Windows。

tensorflow站点中给出的兼容性表不包含cuda和cuDNN的特定小版本。但是,如果不满足特定的版本,在尝试使用tensorflow时会出现错误。

对于tensorflow-gpu==1.12.0和cuda==9.0,兼容的cuDNN版本是7.1.4,注册后可以从这里下载。

你可以检查你的cuda版本使用 学校网站——版本

使用cuDNN版本 cat /usr/include/cudnn.h | grep CUDNN_MAJOR -A 2 .单击“确定”

使用Tensorflow-gpu版本 PIP freeze | grep tensorflow-gpu

更新: 由于tensorflow 2.0已经发布,我将分享它兼容的cuda和cuDNN版本(适用于Ubuntu 18.04)。

Tensorflow-gpu = 2.0.0 Cuda = 10.0 cuDNN = 7.6.0

如果你在jupyter笔记本上编码,并且想要检查tf使用的cuda版本,直接在jupyter单元中运行以下命令:

!conda list cudatoolkit

!conda list cudnn

检查gpu对tf是否可见:

tf.test.is_gpu_available(
    cuda_only=False, min_cuda_compute_capability=None
)

你可以在cuda 10.0上使用这个配置(10.1在3月18日不能工作),这为我运行:

tensorflow > = 1.12.0 tensorflow_gpu > = 1.4

安装tensorflow版本:

pip install tensorflow-gpu==1.4.0

在升级到TF 2.0后,我遇到了类似的问题。TF报告的CUDA版本与Ubuntu 18.04认为我已经安装的版本不匹配。它说我使用的是CUDA 7.5.0,但apt认为我安装的版本是正确的。

我最终不得不做的是在/usr/local中递归地grep CUDNN_MAJOR,我发现/usr/local/cuda-10.0/target /x86_64-linux/include/cudnn.h确实将版本指定为7.5.0。 /usr/local/cuda-10.1是正确的,而/usr/local/cuda指向/usr/local/cuda-10.1,所以对我来说,为什么TF要查看/usr/local/cuda-10.0是一个谜。

不管怎样,我只是把/usr/local/cuda-10.0移动到/usr/local/old-cuda-10.0,所以TF再也找不到它了,然后一切都像魔法一样工作。

这一切都很令人沮丧,我仍然觉得我只是做了一次随机入侵。但它起作用了:)也许这将帮助那些有类似问题的人。