- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我试图将 TensorFlow 与 GPU 结合使用,但出现以下错误:
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(在 UNIX/OS 级别)但是 TensorFlow(用于 python)是用我猜的版本 5103 编译的。显然,如果 TensorFlow 库使用的是根据 5103 的 API,但是“真正的”API 与(cuda ) 深度学习库CuDNN是5005版本的,弄清楚会有问题。尽管它们只是对正在发生的事情的猜测。
我的第一个困惑是,据我所知,没有 CuDNN 5005 或 5103 这样的东西。如果能确定那部分错误的含义,我就可以开始尝试调试它了,这真是太棒了真实的。据我所知,当我使用 module list
时,我正在使用:
cudnn/5.0
我的第二个困惑是我忽略的括号及其含义:
加载的运行时 CuDNN 库:5005(兼容版本 5000)
但是源码是用5103编译的(兼容版本5100)
老实说,我不知道“兼容版本 XXXX”是什么意思。也许它建议为 CuDNN 安装 5000 版(无论这意味着什么)(这仍然令人困惑,因为没有 5000 版的 CuDNN)并编译一个使用 CuDNN 5100 版的 TensorFlow(不知何故)。
是否有人更准确地知道错误的确切含义(并为我链接的问题提供他们的解决方案?)
最佳答案
这是对正在发生的事情的大概描述。
cuDNN 的主要版本已编号,例如4.0、5.0、5.1 等
这些主要版本可能包含 API 更改。因此,使用 cuDNN v4(即 4.0)的程序可能需要进行一些修改才能使用或使用 cuDNN v5(即 5.0)中的新功能。
主要版本编码在 4 位版本号的前两位数字中。因此,cuDNN 4 位版本号 5103 表示它属于 5.1 主要版本,子版本号为 03。出于兼容性目的,此类版本应与任何其他版本 API 兼容51xx 的 cuDNN 库版本,因为它们都属于 5.1 主要版本(这不能保证 AFAIK 严格正确,但这是一般的想法)。因此,这些版本编号为 51xx 的库中的任何一个都将具有 5100 的兼容版本,以表明它们属于(并且(应该)兼容)5.1 主要版本。
所以当我们提到兼容版本时(这个库与哪个主要版本兼容)我们只需要指定前两位数字 - 5000 表示 5.0,5100 表示 5.1。但是一个版本可能有一个非零的子版本号。这可能有多种原因,例如允许发布错误修复等。
当一个程序(如 tensorflow)被设计为使用 cuDNN 时,它通常会被编码为与特定版本的 cuDNN 一起工作。在某些情况下,这可以在编译时通过“编译”特定的 cuDNN 版本(及其关联的 API,即构建 tensorflow 时使用的头文件)来处理。因此,在编译时,像 tensorflow 这样的程序可以确定它是针对哪个版本的 cuDNN API 编译的,那就是 4 位版本(尽管一般来说,只有兼容版本,即 4 位的前两位)版本真的很重要)。
在运行时,您的机器上某处加载了特定版本的 cuDNN 库(例如 .so 在 Linux 上)。可以确定、查询和报告该库的版本。如果该实际库版本与编译 tensorflow 所针对的 cuDNN 库版本不匹配(至少从兼容性版本的角度来看),那么这是一个很好的迹象,表明事情可能无法正常工作,因此 tensorflow 在运行时会指出这一点:
Loaded runtime CuDNN library: 5005 but source was compiled with 5103.
这是 tensorflow 告诉你“嘿,我被设计(编译)为与 cuDNN v5.1 一起工作,但你只给我 cuDNN 5.0 来工作”。
子版本级别的差异应该不太重要。如果您知道自己在做什么,即使您的 tensorflow 是针对版本 5103 编译的,也可以使用 cuDNN 运行时版本 5107。这只是一个假设的示例,但这表明库中存在一些差异,但不是旨在更改适当的功能或行为,或 API 接口(interface)。例如,它可能只是 5103 的错误修复版本(假设。这是一个想象的例子。)
在理想情况下,您将针对您正在使用的 cuDNN 版本构建 tensorflow。但是,如果您已经下载了预构建的 tensorflow 包,那么您可能会看到此类消息(因为您可能是单独下载了 cuDNN)。在这种情况下,您至少应该设法将您正在使用的 cuDNN 主要版本与 tensorflow 期望的兼容版本相匹配。在这个特定示例中,您没有这样做。
关于python - 错误: `Loaded runtime CuDNN library: 5005 but source was compiled with 5103` mean?是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41005249/
这些指针之间有区别吗?每次通话到底发生了什么。 *p++ (*p)++, *(p)++ 最佳答案 1和3是一样的。 请记住 ++ 的后缀和一元形式。和 --有一个结果和一个副作用: x++ 的结果是
这个问题已经有答案了: difference between grep Vs cat and grep (5 个回答) 已关闭 8 年前。 我看到一个例子,其中有人这样做: cat source.tx
它曾经有效。现在,当我添加一个断点时: saveSnippet: (title, imageUrl, role) => { debugger; ... chrome (
开发.Net Web应用程序时,如果生成运行时错误,则会显示一些在Exception类中找不到的“额外”调试信息。 它显示了“源错误”部分,其中显示了代码摘录,其中行号准确显示了错误的产生位置,并显示
Firefox 中的“源”和“生成的源”有什么区别? 请举例说明。 编辑: 7 月 3 日 “搜索引擎”使用哪个来源,生成的还是生成前的? 最佳答案 Source 将显示页面加载的源(由服务器提供)。
对于具有两个不同工作表的Excel文件,我有两个OLE DB源。工作表A和工作表B。工作表A单元格I6包含日期,我想组合这两个源并在工作表B中添加一列,以将该值设置为工作表A的日期值。有可能做到吗?任
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
这是我的代码: import speech_recognition as sr r = sr.Recognizer() with sr.Microphone() as source: prin
我是 mysql 新手。我正在尝试 setter 工示例数据库 我尝试了 stackoverflow 中提到的一些方法,但没有帮助 谁能告诉我如何解决这个问题 SELECT 'LOADING depa
在终端中,我启动程序如下: 1) source env.sh 2) source activate enviroment 3) program --args 除了在 Pycharm 中并调试代码之外,
IntelliJ 如何知道目录是“源”还是“测试源”?如何始终将目录标记为“测试源”? build.gradle 1 apply plugin: 'java' apply plugin: 'idea'
这个问题类似于Source script to separate environment in R, not the global environment , 但有一个关键的转折。 考虑一个源另一个脚
和有什么区别--devtool source-map & eval-source-map ? 最佳答案 webpack 文档有一个方便的图表,说明这些不同的选项可能适合哪些情况。 他们显示eval-s
这个问题已经有答案了: Issue with virtualenv - cannot activate (36 个回答) 已关闭 4 年前。 venv) C:\Users\Sunil\PycharmP
在以前版本的 Akka Streams 中,groupBy 返回一个 Source 的 Source 可以具体化为一个 Source[Seq [A]]. 在 Akka Streams 2.4 中,我看
这个问题已经有答案了: Issue with virtualenv - cannot activate (36 个回答) 已关闭 4 年前。 venv) C:\Users\Sunil\PycharmP
是否可以获取 Bash 片段的源代码,但仅在特定条件成立时才实际提供其中的函数? 所以我要问的是,我可以无条件地获取目录中的所有文件,但获取的文件包含是否向采购外壳提供功能的逻辑。 例子: .bash
我无法查看 JavaCore.class 源代码,但我可以很好地使用代码。 例如,要查看方法JavaCore.create(..) 的源代码,我ctrl - click(或按f3) 在 JavaCor
-- Sample employee database -- See changelog table for details -- Copyright (C) 2007,2008, MySQL
当我在我的 IDE 中编译项目时它工作正常但是当我在 bamboo 中编译时它给我以下错误。 我已经检查过我在任务中配置的 jdk 版本是 1.6,我还尝试从 pom 中的 maven 插件强制执行
我是一名优秀的程序员,十分优秀!