【问题标题】:GPU not found while using TensorFlow 2.0.0使用 TensorFlow 2.0.0 时未找到 GPU
【发布时间】:2020-04-03 10:55:28
【问题描述】:

我正在迁移到 Tensorflow 2.0,我正在努力

Ubuntu 18.04

CUDA 10.2

Python 3.7

索泰 GeForce® GTX 1080 Ti Mini (ZT-P10810G-10P)

当我运行 nvcc -Vnvidia-smi 时,我可以看到 GPU。但以下命令并未列出 GPU。

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

tf.config.experimental.list_physical_devices(device_type=None)
Output: [PhysicalDevice(name='/physical_device:CPU:0', device_type='CPU'),
PhysicalDevice(name='/physical_device:XLA_CPU:0', device_type='XLA_CPU')]

from keras import backend as K
K.tensorflow_backend._get_available_gpus()
Output: []

编辑 1:在 tensorflow gpu support website 上,他们有针对 tensorflow 1.15tensorflow 1.14 的说明,但没有针对更高版本的说明。

同样重启和重新安装 tensorflow-gpu 也无济于事。

更新 CUDA 和 cudnn 也没有用。

【问题讨论】:

  • 尝试卸载'tensorflow'包,然后通过'pip install tensorflow-gpu'重新安装gpu版本

标签: tensorflow keras gpu tensorflow2.0


【解决方案1】:

来自链接https://www.tensorflow.org/install/source#linux,对于 tensorflow-2.0.0,它需要 cuDNN 版本 7.4 和 CUDA 10.0。不确定您的 cuDNN 版本是什么(您可以通过以下方式查看:

cat ${CUDNN_H_PATH} | grep CUDNN_MAJOR -A 2

它应该返回:

#define CUDNN_MAJOR 7
#define CUDNN_MINOR 5
#define CUDNN_PATCHLEVEL 0
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)

=> 这意味着它的 7.5.0

我已经读过,如果上面的链接指定 7.4,则不能使用任何其他版本(甚至不能使用 7.5、7.6 等)。因此,请在 cuDNN 下载中查找存档版本。

我建议您卸载 /usr/local 文件夹中的所有 nvidia 驱动程序、tensorflow-gpu、cuDNN、所有 cuda 库和工具包,然后重新安装。不要同时安装 tensorflow 和 tensorflow-gpu。只需安装 tensorflow-gpu 之一。

以下是卸载 nvidia-cuda-toolkit 及其依赖项的方法:

sudo apt-get remove --auto-remove nvidia-cuda-toolkit

记得编辑你的 ~/.bash_profile 文件

在正确卸载并清除所有内容后,安装 nvidia-driver-418(我个人使用此版本,但根据 nvidia 文档,对于 CUDA 10,只要其 410.xx 就可以了 - nvidia docs tensorflow release notes):

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-driver-418

然后重新启动并使用 nvidia-smi 命令检查它是否显示: NVIDIA-SMI 430.50 驱动程序版本 430.50

然后下载并安装CUDA 10.0

请不要下载任何其他版本(不是 10.1、10.2 等 - 很抱歉打扰了)

只记得选择 n(否) 来安装 NVIDIA Accelerated Graphics Driver。会提示安装不完整,但可以忽略。

确保 ~/.bashrc 文件包含 cuda-10.0

export PATH=/usr/local/cuda-10.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64 

然后为 CUDA 10.0 下载 cuDNN v7.4.2。使用 tar 命令解压 tgz 文件后,cd 进入 cuda 文件夹并将 lib64/ 目录的内容及其所有内容复制到 /usr/local/cuda/lib64/ 路径中。另外,将 include/ 文件夹复制到 /usr/local/cuda/include/ 路径中,如下所示:

sudo cp -P lib64/* /usr/local/cuda/lib64/
sudo cp -P include/* /usr/local/cuda/include/

检查

tf.test.is_gpu_available()

它应该返回 True。

【讨论】:

  • 做了所有这些,但 TF 仍然没有检测到 GPU
【解决方案2】:

是的,非常感谢@Ran Fang。

TF 2.0 只能在 GPU 上使用 CUDA 10.0 和 cuDNN 7.4 - 你可以 检查依赖here

我完成了上述所有操作,我目前的版本是 CUDA 10.0、cuDNN 7.4.1 和 NVIDIA-SMI 410.129。您可以查看TF-CUDA dependenciesNVIDIA Drivers - CUDA dependencies

对我来说,要检查 cuDNN 版本,以下命令适用于 Ubuntu 18.04 -

cat /usr/include/cudnn.h | grep CUDNN_MAJOR -A 2

但执行上述所有操作并仅安装 tensorflow-gpu 并不能让 GPU 正常工作。

最终奏效的方法如下 - 先卸载所有 tensorflow 包,然后才安装 -

pip uninstall tensorflow tf-nightly tensorboard tb-nightly tensorflow-estimator

pip install tf-nightly-gpu-2.0-preview

工作就像一个魅力。

按照 this 教程安装 Tensorflow 2.0 和相应的依赖项。

您也可以通过thisthisthis doc完全卸载较新的CUDA和cuDNN版本并安装较旧的CUDA 10.0版本。

【讨论】:

    【解决方案3】:

    完成上述所有操作后,我在运行 model.fit(..) 后遇到错误 -

    UnknownError: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above. [Op:Conv2D]

    我在这里关注了thread 并关注了@RadV 的回答,它奏效了。他的回答——

    在此 TensorFlow GPU 指令page 上升级每条指令

    所以现在我有,

    Ubuntu 18.04

    当我在终端运行 nvidia-smi 时,它显示 CUDA 10.2

    which nvcc 在终端中的输出给出 /usr/local/cuda-10.0/bin/nvcc

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-15
      • 1970-01-01
      • 2019-05-25
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      • 2019-11-09
      相关资源
      最近更新 更多