Anaconda在环境目录中安装了旧版本的Cudnn-导致Tensorflow失败

时间:2019-05-30 10:34:29

标签: python tensorflow anaconda

我试图运行一些简单的tensorflow-gpu 2.0代码以在图像上执行卷积。我在ubuntu 18.04x64上使用Python 3.6.8建立了Anaconda环境。

错误似乎是,在安装tensorflow-gpu时,Anaconda会在cudnn-7.3.1环境的程序包目录中安装conda的旧版本。 Tensorflow使用的是此旧版本的cudnn,并且在运行下面的代码时导致cudnn错误。

import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import load_sample_image

# Load sample images
china = load_sample_image("china.jpg") / 255
flower = load_sample_image("flower.jpg") / 255
images = np.array([china, flower])
batch_size, height, width, channels = images.shape

# Create 2 filters
filters = np.zeros(shape=(7, 7, channels, 2), dtype=np.float32)
filters[:, 3, :, 0] = 1  # vertical line
filters[3, :, :, 1] = 1  # horizontal line

outputs = tf.nn.conv2d(images, filters, strides=1, padding="SAME")

plt.imshow(outputs[0, :, :, 1], cmap="gray") # plot 1st image's 2nd feature map
plt.axis("off") # Not shown in the book
plt.show()

我尝试运行此代码,但出现错误提示

tensorflow/stream_executor/cuda/cuda_dnn.cc:328]
Loaded runtime CuDNN library: 7.3.1 but source was
compiled with: 7.4.2.  CuDNN library major and
minor version needs to match or have higher minor
version in case of CuDNN 7.0 or later version. If
using a binary install, upgrade your CuDNN 

图书馆。如果是从源代码构建,请确保    运行时加载的库与该版本兼容  在编译配置期间指定。

我实际上已经在计算机上安装了cudnn 7.6版,因此这个冲突的cudnn 7.3.1肯定来自Anaconda。我在Anaconda环境目录中搜索了“ cudnn”,并找到了所有这些旧版本的库。还有许多旧的tensorflow版本,尽管这些似乎没有引起任何问题。

任何想法如何解决这个问题?我可以从字面上复制正确的cudnn.h文件等,但是我不确定那是最好的主意。如果某些符号已发生更改,那可能会使我的系统不稳定。

更新:

发现了几个相关但截然不同的问题。首先是关于在计算机上安装cudacudnn的多个版本-这不是我想要的。但在帖子中,用户指出Anaconda已安装版本7.3.1。

How to use the newest 7.5 cudnn in conda environment?

2 个答案:

答案 0 :(得分:0)

好吧,我终于找到了解决该问题的方法。这可能有效,也可能不适用于其他用户,但确实对我有用。

我最终遵循了该博客post的建议。

https://medium.com/@shaolinkhoa/install-tensorflow-gpu-2-0-alpha-on-anaconda-for-windows-10-ubuntu-ced099010b21?fbclid=IwAR1n3qGGmuG_b2Dns3SnnSmmcFYfooLdm292ZpvGJZ9fgwRUzwDxZVU5pak

基本思想是,您可以进入Anaconda文件夹,并将旧的cudnn库文件换成较新的文件。

有关此操作的详细信息,请参见博客文章。但这基本上是我遵循的步骤。

  1. 在我的tensorflow-2.0环境中使用numba安装conda install numba软件包。还要使用cudatoolkit 10安装最新的conda install -c anaconda cudatoolkit软件包。

  2. 从nvidia下载最新版本的cudnn。我使用的是7.6版

  3. 将文件解压缩到一个临时目录。

  4. 在Ubuntu中,我将Nautilus文件管理器打开到我的Anaconda环境文件夹中,并搜索了cudnncudnn字段在我的/lib环境的/includeTensorflow-2.0目录中。

  5. 我从临时目录或Anaconda环境cudnn.h目录中复制了/include文件。

  6. 我将临时目录中的其余cudnn/lib64库文件(包括文件libcudnn.so, libcudnn.so.7, libcudnn.so.7.6.0, libcudnn_static.a)复制到了Anaconda环境/lib目录中。

7。然后我运行numba -s来检查新的库文件是否被环境识别。

在那之后,我可以运行我的tensorflow-2.0代码,它工作得很好。

答案 1 :(得分:0)

似乎Anaconda刚刚更新了其内部版本,使其包含cudnn 7.6和cudatoolkit 10.1.168。因此,这个问题现在应该消失了。如果遇到此问题,简单的解决方案是使用

激活环境。
conda activate <environment_name>

然后更新您环境中的软件包

conda update --all

或者您也可以只更新单个软件包,而不是整个环境。