我试图运行一些简单的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
文件等,但是我不确定那是最好的主意。如果某些符号已发生更改,那可能会使我的系统不稳定。
更新:
发现了几个相关但截然不同的问题。首先是关于在计算机上安装cuda
和cudnn
的多个版本-这不是我想要的。但在帖子中,用户指出Anaconda已安装版本7.3.1。
答案 0 :(得分:0)
好吧,我终于找到了解决该问题的方法。这可能有效,也可能不适用于其他用户,但确实对我有用。
我最终遵循了该博客post的建议。
基本思想是,您可以进入Anaconda文件夹,并将旧的cudnn
库文件换成较新的文件。
有关此操作的详细信息,请参见博客文章。但这基本上是我遵循的步骤。
在我的tensorflow-2.0环境中使用numba
安装conda install numba
软件包。还要使用cudatoolkit 10
安装最新的conda install -c anaconda cudatoolkit
软件包。
从nvidia下载最新版本的cudnn
。我使用的是7.6版
将文件解压缩到一个临时目录。
在Ubuntu中,我将Nautilus文件管理器打开到我的Anaconda环境文件夹中,并搜索了cudnn
。 cudnn
字段在我的/lib
环境的/include
和Tensorflow-2.0
目录中。
我从临时目录或Anaconda环境cudnn.h
目录中复制了/include
文件。
我将临时目录中的其余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
或者您也可以只更新单个软件包,而不是整个环境。