2016-12-06 25 views
1

我试图用TensorFlow与GPU并得到了以下错误:错误是什么:`加载的运行时CuDNN库:5005,但源代码是用5103`编译的?

I tensorflow/core/common_runtime/gpu/gpu_device.cc:838] Creating TensorFlow device (/gpu:0) -> (device: 0, name: Tesla K20m, pci bus id: 0000:02:00.0) 
E tensorflow/stream_executor/cuda/cuda_dnn.cc:347] Loaded runtime CuDNN library: 5005 (compatibility version 5000) but source was compiled with 5103 (compatibility version 5100). If using a binary install, upgrade your CuDNN library to match. If building from sources, make sure the library loaded at runtime matches a compatible version specified during compile configuration. 
F tensorflow/core/kernels/conv_ops.cc:457] Check failed: stream->parent()->GetConvolveAlgorithms(&algorithms) 
当然

我试图解决这个错误(虽然这已经被问Loaded runtime CuDNN library: 5005 (compatibility version 5000) but source was compiled with 5103 (compatibility version 5100)),但我想理解的错误。我总是试图在发布(寻求帮助)之前尝试自己解决(编码)问题,但是即使启动这个问题我也很难,因为错误消息对我来说似乎有点神秘/不清楚,我似乎无法找到善于了解错误的含义。

要了解我把重点放在这似乎是在错误开头的行错误:

Loaded runtime CuDNN library: 5005 (compatibility version 5000) but source was compiled with 5103 (compatibility version 5100). 

阅读,似乎相关的一些github上的网页后,我意识到,读取错误如下实际上是更有帮助:

Loaded runtime CuDNN library: 5005 but source was compiled with 5103.

去除括号使错误做出更多的感觉(虽然我想知道/了解括号的作用是在错误信息,以方便用户调试),因为它似乎加载CuDNN文库5005(在文献中)但是TensorFlow(用于python)是用我猜想的版本5103进行编译的。显然,如果TensorFlow库使用根据5103的API,但是使用“真实”API与(cuda)深层对话学习库CuDNN是5005版本,​​它清楚这将是一个问题。尽管他们只是猜测发生了什么事情。

我的第一个混淆是,据我所知,没有这样的事情CuDNN 5005或5103.这将是非常好理解错误的意思是什么意思,以便我可以开始尝试调试真的。至于我可以告诉,当我使用module list我使用:

cudnn/5.0 

我的第二个困惑是括号,我忽略他们的意思:

  1. Loaded runtime CuDNN library: 5005 (compatibility version 5000)
  2. but source was compiled with 5103 (compatibility version 5100)

我真的不知道“兼容版本XXXX”是什么意思。也许它建议为CuDNN安装版本5000(无论这意味着什么)(它仍然令人困惑,因为没有5000版本的CuDNN)并编译使用CuDNN版本5100的TensorFlow版本(以某种方式)。

是否有人更准确地知道错误究竟意味着什么(并提供解决方案以解决我所链接的问题)

+0

这意味着Tensorflow发现cuDNN 5.0您的计算机上,但期待使用(即是针对编译)cuDNN 5.1。在错误输出中可能已经指出了一个简单的修复:升级 –

+0

@RobertCrovella你怎么知道它是什么意思?有4个数字报告,所有4个数字都是4位数,而cuDNN版本没有这样的报告。真的很混乱和不清楚,希望能找到这样干净的错误 –

+1

@CharlieParker这是人们如何以编程方式对版本进行编码,为了将5.1.03放入一个整数中,可以删除点。点,以防万一你需要超过10个小的或100个补丁版本秒。TensorFlow开发者在打印邮件时,并没有打算将其格式化为人类可读的格式。不要在其中寻找根本的智慧,版本化只是一个(愚蠢的)惯例。见例如[semver](http://semver.org/)获取更多信息 – Drop

回答

4

这是对正在发生的事情的近似描述。

cuDNN具有主要版本,其编号例如4.0,5.0,5.1等。

这些主要版本可能包含API更改。因此,使用cuDNN v4(即4.0)的程序可能需要一些修改以使用或使用cuDNN v5(即5.0)中的新功能。

主版本编码在4位版本号的前两位数字中。所以一个cuDNN的4位数字版本号码5103意味着它属于5.1主要版本并且具有03的子版本号。对于兼容性,这样的版本应该与任何其他的51DN的cuDNN库版本API兼容,因为它们都属于5.1主要版本(这不能保证是完全真实的AFAIK,但它是一般的想法)。因此,发行号为51xx的这些库中的任何一个都将具有5100的兼容性版本,以指示它们属于5.1版主要版本(并且(应该与其兼容))。我们只需要指定前两位数字 - 5000代表5.0,5100代表5.1。我们只需要指定前两位数字,即5000表示5.1,5100表示​​5.1。但是发行版可能有一个非零的版本号。这可能有多种原因,例如允许错误修复版本等。

当一个程序(如tensorflow)被设计为使用cuDNN时,它通常会被编码为与一个特定版本的cuDNN一起工作。在某些情况下,可以在编译时通过“编译”一个特定的cuDNN版本(以及它的相关API,即构建tensorflow时使用的头文件)来进行处理。因此,在编译时,像tensorflow这样的程序可以确定它编译的cuDNN API的版本,这是一个4位数版本(尽管一般来说,只有兼容性版本,即4位数字的前两位数字版本应该真的很重要)。

在运行时,您在某处安装了某个特定版本的cuDNN库(例如Linux上的.so)。该库的版本可以确定,查询和报告。如果实际的库版本不符合(至少从兼容版本的角度来看),那么tensorflow编译的cuDNN库的版本就是一个很好的迹象,表明事情可能不起作用,所以tensorflow在运行时指出了这一点:

Loaded runtime CuDNN library: 5005 but source was compiled with 5103.

这是tensorflow告诉你:“嘿,我的设计(编译)与cuDNN V5.1的工作,但你只给我cuDNN 5.0一起工作”。

子版本级别的差异应该不那么显着。如果您知道自己在做什么,即使您的张量流是针对版本5103编译的,也可以使用cuDNN运行时版本5107。这只是一个假设性示例,但这表明库中有一些不同旨在改变适当的功能或行为,或API接口。例如(假设这是一个假想的例子)。

在理想的情况下,您可以根据您使用的cuDNN版本构建tensorflow。但是,如果您已经下载了预构建的tensorflow软件包,那么您可能会看到这类信息(因为您大概是单独下载了cuDNN)。在这种情况下,您至少应该尝试将您使用的cuDNN主要版本与tensorflow期望的兼容版本进行匹配。在这个特定的例子中,你没有这样做。

+0

对不起,如此详细 - 我需要哪些set命令来修复这种情况? – Massyanya

0

也许你可以下载“cuDNN V5.1支持CUDA 8.0/7.5,然后再进行安装。

相关问题