Conda、Keras、cuDNN:不同版本显示

Conda, Keras, cuDNN: different versions showing

我正在使用 Anaconda(在 Ubuntu 18.04 中)并且我有一个安装了 Keras(和 tensorflow-gpu)的环境。以下是不同的版本:

这个版本是由 Conda 选择的,但我想知道为什么当 nvidia-smi 告诉我我的 cuda 应该是(或者是?)10.1 时它下载了 10.0:

NVIDIA-SMI 435.21 Driver Version: 435.21 CUDA Version: 10.1

但是,有趣的是,当我执行 nvcc --version:

Cuda compilation tools, release 9.1, V9.1.85

所以我的问题来了:我使用的是什么版本的 Cuda?我应该使用哪个版本的 Cuda? Anaconda 是否按环境处理 Cuda?

PS:(这不是我的问题,而是我为什么要问)

我问这个是因为我 运行 关注这个问题:

tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR

我在寻找解决方案 (could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR),但我尝试的答案 none 有效(删除文件,运行 in sudo 等)所以我认为这是一个兼容性问题

注意:虽然我不认为这个答案是解决方案,但它让我可以继续我的项目,所以目前它已经足够好了。

  1. 重新安装 Cuda 10.1(在我的情况下不是 10.2,因为 Steam 驱动程序 440 存在一些问题)(检查您的 nvidia 驱动程序是什么版本,并确保为该版本安装正确的 Cuda)
  2. 按照post安装:https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#post-installation-actions
  3. 使用 whereis cuda 查找系统上是否还有其他版本(在我的例子中,我有 cuda-dev-9.1,这解释了为什么 nvcc -V 显示那个版本)
  4. 删除所有旧版本
  5. 正常情况下,nvcc -V 和 nvidia-smi 应该显示相同的 Cuda 版本
  6. 如果需要重新安装 cudnn

现在,这并没有修复错误:

Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR

一个有效的解决方案(但仍然不是很好)是在 python 文件的顶部添加以下代码(我使用 Keras,但它也可以单独使用 TensorFlow):

from keras.backend.tensorflow_backend import set_session
import tensorflow as tf
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)
set_session(sess)

它(显然)有效!

非常感谢 Berkay 的支持!

(从技术上讲,尝试在添加另一个之前删除旧版本,但它也有效)