哪些 TensorFlow 和 CUDA 版本组合兼容?
Which TensorFlow and CUDA version combinations are compatible?
我注意到一些较新的 TensorFlow 版本与较旧的 CUDA 和 cuDNN 版本不兼容。是否存在兼容版本的概述,甚至是否存在经过官方测试的组合列表?我在 TensorFlow 文档中找不到它。
TL;DR) 看这个 table: 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
并安装如下图所示的组合或 here。
以下图片和 link 提供了在 Linux、macOS 和 Windows 上正式 supported/tested CUDA 和 TensorFlow 组合的概述:
次要配置:
由于下面给定的规格在某些情况下可能过于宽泛,这里是一种有效的特定配置:
tensorflow-gpu==1.12.0
cuda==9.0
cuDNN==7.1.4
可以下载对应的cudnnhere.
测试构建配置
请参阅 https://www.tensorflow.org/install/source#gpu 获取最新的兼容性图表(对于官方 TF 车轮)。
(数据更新于 2020 年 5 月 20 日)
Linux显卡
Linux CPU
macOS GPU
macOS CPU
Windows显卡
Windows CPU
2020 年 12 月 5 日更新:有关更新信息,请参阅 Link for Linux and Link for Windows。
the tensorflow site中给出的兼容性table不包含cuda和cuDNN的特定次要版本。但是,如果不满足特定版本,尝试使用tensorflow时会出现错误。
对于tensorflow-gpu==1.12.0
和cuda==9.0
,兼容的cuDNN
版本为7.1.4
,注册后可从here下载。
您可以使用
检查您的cuda版本
nvcc --version
cuDNN 版本使用
cat /usr/include/cudnn.h | grep CUDNN_MAJOR -A 2
tensorflow-gpu 版本使用
pip freeze | grep tensorflow-gpu
更新:
由于 tensorflow 2.0 已经发布,我也会分享它兼容的 cuda 和 cuDNN 版本(for Ubuntu 18.04)。
tensorflow-gpu
= 2.0.0
cuda
= 10.0
cuDNN
= 7.6.0
您可以将此配置用于 cuda 10.0(10.1 从 3 月 18 日开始无法使用),这对我来说是:
- tensorflow>=1.12.0
- tensorflow_gpu>=1.4
安装版本tensorflow gpu:
pip install tensorflow-gpu==1.4.0
我错误地安装了 CUDA 10.1 和 CUDNN 7.6。您可以使用以下配置(这对我有用 - 从 9/10 开始)。 :
- Tensorflow-GPU == 1.14.0
- CUDA 10.1
- CUDNN 7.6
- Ubuntu 18.04
但我必须为它创建符号链接才能工作,因为 tensorflow 最初与 CUDA 10 一起工作。
sudo ln -s /opt/cuda/targets/x86_64-linux/lib/libcublas.so /opt/cuda/targets/x86_64-linux/lib/libcublas.so.10.0
sudo cp /usr/lib/x86_64-linux-gnu/libcublas.so.10 /usr/local/cuda-10.1/lib64/
sudo ln -s /usr/local/cuda-10.1/lib64/libcublas.so.10 /usr/local/cuda-10.1/lib64/libcublas.so.10.0
sudo ln -s /usr/local/cuda/targets/x86_64-linux/lib/libcusolver.so.10 /usr/local/cuda/lib64/libcusolver.so.10.0
sudo ln -s /usr/local/cuda/targets/x86_64-linux/lib/libcurand.so.10 /usr/local/cuda/lib64/libcurand.so.10.0
sudo ln -s /usr/local/cuda/targets/x86_64-linux/lib/libcufft.so.10 /usr/local/cuda/lib64/libcufft.so.10.0
sudo ln -s /usr/local/cuda/targets/x86_64-linux/lib/libcudart.so /usr/local/cuda/lib64/libcudart.so.10.0
sudo ln -s /usr/local/cuda/targets/x86_64-linux/lib/libcusparse.so.10 /usr/local/cuda/lib64/libcusparse.so.10.0
并将以下内容添加到我的 ~/.bashrc -
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda-10.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/cuda/targets/x86_64-linux/lib/
如果您在 jupyter notebook 中编码,并且想检查 tf 使用的是哪个 cuda 版本,运行直接在 jupyter cell 中执行以下命令:
!conda list cudatoolkit
!conda list cudnn
并检查 gpu 是否对 tf 可见:
tf.test.is_gpu_available(
cuda_only=False, min_cuda_compute_capability=None
)
我在升级到 TF 2.0 后遇到了类似的问题。 TF 报告的 CUDA 版本与 Ubuntu 18.04 认为我安装的不匹配。它说我使用的是 CUDA 7.5.0,但 apt 认为我安装了正确的版本。
我最终要做的是在/usr/local
中递归grep for CUDNN_MAJOR
,我发现/usr/local/cuda-10.0/targets/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 就再也找不到它了,然后一切都很顺利。
这一切都非常令人沮丧,我仍然觉得我只是做了一个随机的黑客攻击。但它奏效了 :) 也许这会对遇到类似问题的人有所帮助。
感谢第一个回答。
关于向后兼容性的一些事情。
我可以使用 cuda-11.1
和 cudnn 8.0.5
成功安装 tensorflow-2.4.0
。
我注意到一些较新的 TensorFlow 版本与较旧的 CUDA 和 cuDNN 版本不兼容。是否存在兼容版本的概述,甚至是否存在经过官方测试的组合列表?我在 TensorFlow 文档中找不到它。
TL;DR) 看这个 table: 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
并安装如下图所示的组合或 here。
以下图片和 link 提供了在 Linux、macOS 和 Windows 上正式 supported/tested CUDA 和 TensorFlow 组合的概述:
次要配置:
由于下面给定的规格在某些情况下可能过于宽泛,这里是一种有效的特定配置:
tensorflow-gpu==1.12.0
cuda==9.0
cuDNN==7.1.4
可以下载对应的cudnnhere.
测试构建配置
请参阅 https://www.tensorflow.org/install/source#gpu 获取最新的兼容性图表(对于官方 TF 车轮)。
(数据更新于 2020 年 5 月 20 日)
Linux显卡
Linux CPU
macOS GPU
macOS CPU
Windows显卡
Windows CPU
2020 年 12 月 5 日更新:有关更新信息,请参阅 Link for Linux and Link for Windows。
the tensorflow site中给出的兼容性table不包含cuda和cuDNN的特定次要版本。但是,如果不满足特定版本,尝试使用tensorflow时会出现错误。
对于tensorflow-gpu==1.12.0
和cuda==9.0
,兼容的cuDNN
版本为7.1.4
,注册后可从here下载。
您可以使用
检查您的cuda版本
nvcc --version
cuDNN 版本使用
cat /usr/include/cudnn.h | grep CUDNN_MAJOR -A 2
tensorflow-gpu 版本使用
pip freeze | grep tensorflow-gpu
更新: 由于 tensorflow 2.0 已经发布,我也会分享它兼容的 cuda 和 cuDNN 版本(for Ubuntu 18.04)。
tensorflow-gpu
= 2.0.0cuda
= 10.0cuDNN
= 7.6.0
您可以将此配置用于 cuda 10.0(10.1 从 3 月 18 日开始无法使用),这对我来说是:
- tensorflow>=1.12.0
- tensorflow_gpu>=1.4
安装版本tensorflow gpu:
pip install tensorflow-gpu==1.4.0
我错误地安装了 CUDA 10.1 和 CUDNN 7.6。您可以使用以下配置(这对我有用 - 从 9/10 开始)。 :
- Tensorflow-GPU == 1.14.0
- CUDA 10.1
- CUDNN 7.6
- Ubuntu 18.04
但我必须为它创建符号链接才能工作,因为 tensorflow 最初与 CUDA 10 一起工作。
sudo ln -s /opt/cuda/targets/x86_64-linux/lib/libcublas.so /opt/cuda/targets/x86_64-linux/lib/libcublas.so.10.0
sudo cp /usr/lib/x86_64-linux-gnu/libcublas.so.10 /usr/local/cuda-10.1/lib64/
sudo ln -s /usr/local/cuda-10.1/lib64/libcublas.so.10 /usr/local/cuda-10.1/lib64/libcublas.so.10.0
sudo ln -s /usr/local/cuda/targets/x86_64-linux/lib/libcusolver.so.10 /usr/local/cuda/lib64/libcusolver.so.10.0
sudo ln -s /usr/local/cuda/targets/x86_64-linux/lib/libcurand.so.10 /usr/local/cuda/lib64/libcurand.so.10.0
sudo ln -s /usr/local/cuda/targets/x86_64-linux/lib/libcufft.so.10 /usr/local/cuda/lib64/libcufft.so.10.0
sudo ln -s /usr/local/cuda/targets/x86_64-linux/lib/libcudart.so /usr/local/cuda/lib64/libcudart.so.10.0
sudo ln -s /usr/local/cuda/targets/x86_64-linux/lib/libcusparse.so.10 /usr/local/cuda/lib64/libcusparse.so.10.0
并将以下内容添加到我的 ~/.bashrc -
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda-10.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/cuda/targets/x86_64-linux/lib/
如果您在 jupyter notebook 中编码,并且想检查 tf 使用的是哪个 cuda 版本,运行直接在 jupyter cell 中执行以下命令:
!conda list cudatoolkit
!conda list cudnn
并检查 gpu 是否对 tf 可见:
tf.test.is_gpu_available(
cuda_only=False, min_cuda_compute_capability=None
)
我在升级到 TF 2.0 后遇到了类似的问题。 TF 报告的 CUDA 版本与 Ubuntu 18.04 认为我安装的不匹配。它说我使用的是 CUDA 7.5.0,但 apt 认为我安装了正确的版本。
我最终要做的是在/usr/local
中递归grep for CUDNN_MAJOR
,我发现/usr/local/cuda-10.0/targets/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 就再也找不到它了,然后一切都很顺利。
这一切都非常令人沮丧,我仍然觉得我只是做了一个随机的黑客攻击。但它奏效了 :) 也许这会对遇到类似问题的人有所帮助。
感谢第一个回答。
关于向后兼容性的一些事情。
我可以使用 cuda-11.1
和 cudnn 8.0.5
成功安装 tensorflow-2.4.0
。