CUDA/caffe ERROR:cudaGetDeviceCount returned 30/35,Check failed: error == cudaSuccess (30/35 vs. 0)_cudagetdeviceproperties returned 35-程序员宅基地

技术标签: prime  cuda  deeplearning  caffe  error  nvidia  

解决方法

在双显卡系统中,cuda运行时NVIDAI显卡必须是当前使用的显卡,否则无法获取GPU设备,cudaGetDeviceCount函数会报错,错误码35。
使用nvidia-prime切换到N卡时,如果只是按照提示logout,再重新login是不行的,必须重启系统,否则会报错,错误码30。
caffe的问题也是同样的道理,因为caffe也要调用cuda的cudaGetDeviceCount函数获取GPU设备。

问题解决过程

环境:ubuntu16+nvidia-378 driver+cuda8.0+cudnn5.1+GTX965M显卡
成功安装cuda 8.0,也正常编译了Caffe以后,执行mnist训练程序来测试一下,然鹅报错了:

$ ./build/tools/caffe train –solver=examples/mnist/lenet_solver.prototxt
I0312 22:15:25.125078 2171 caffe.cpp:217] Using GPUs 0
I0312 22:15:25.126852 2171 caffe.cpp:222] GPU 0: 0 cg�
F0312 22:15:25.127008 2171 common.cpp:151] Check failed: error == cudaSuccess (35 vs. 0) CUDA driver version is insufficient for CUDA runtime version
* Check failure stack trace: *
@ 0x7f1bb831c5cd google::LogMessage::Fail()
@ 0x7f1bb831e433 google::LogMessage::SendToLog()
@ 0x7f1bb831c15b google::LogMessage::Flush()
@ 0x7f1bb831ee1e google::LogMessageFatal::~LogMessageFatal()
@ 0x7f1bb8882192 caffe::Caffe::SetDevice()
@ 0x40c950 train()
@ 0x4088e8 main
@ 0x7f1bb6a51830 __libc_start_main
@ 0x4091b9 _start
@ (nil) (unknown)
已放弃 (核心已转储)

显然是cuda的问题,于是执行cuda samples程序中的deviceQuery,果然也是报错,,错误码35:

$ ./NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release/deviceQuery
./NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release/deviceQuery Starting…

CUDA Device Query (Runtime API) version (CUDART static linking)

cudaGetDeviceCount returned 35
-> CUDA driver version is insufficient for CUDA runtime version
Result = FAIL

这里写图片描述
笔记本电脑是双显卡(i7 cpu有集成显卡),猜测应该是NVIDIA显卡没启用,执行nvidia-setting,在PRIME profile中果然显示当前使用的是Intel 集成显卡,于是切换到nvidia显卡。
这里写图片描述

PRIME切换到nvidia显卡时提示要logout才能生效,于是登出再重新登录,再执行上面的mnist训练,还是报错,执行deviceQuery也报错,不过这次错误不一样了,错误代码30。

$ ./build/tools/caffe train –solver=examples/mnist/lenet_solver.prototxt
I0312 22:17:46.619762 3469 caffe.cpp:217] Using GPUs 0
I0312 22:17:46.639750 3469 caffe.cpp:222] GPU 0: 1(�
F0312 22:17:46.639799 3469 common.cpp:151] Check failed: error == cudaSuccess (30 vs. 0) unknown error
* Check failure stack trace: *
@ 0x7fe1702315cd google::LogMessage::Fail()
@ 0x7fe170233433 google::LogMessage::SendToLog()
@ 0x7fe17023115b google::LogMessage::Flush()
@ 0x7fe170233e1e google::LogMessageFatal::~LogMessageFatal()
@ 0x7fe170797192 caffe::Caffe::SetDevice()
@ 0x40c950 train()
@ 0x4088e8 main
@ 0x7fe16e966830 __libc_start_main
@ 0x4091b9 _start
@ (nil) (unknown)
已放弃 (核心已转储)

$ ./NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release/deviceQuery
./NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release/deviceQuery Starting…

CUDA Device Query (Runtime API) version (CUDART static linking)

cudaGetDeviceCount returned 30
-> unknown error
Result = FAIL

这里写图片描述

要想到切换显卡时没有重启系统,是不是这个原因生成的呢?于是sudo reboot重启电脑,再次进入,执行deviceQuery就正常了
这里写图片描述

再执行mnist训练也正常了。
尼玛这PRIME的提示妥妥的是坑爹嘛,你直接提示切换显卡要reboot不就成了嘛 ,logout显然不管用嘛。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/10km/article/details/61665578

智能推荐

fgets用法:char *fgets( char *str, int num, FILE *stream );_char fgets-程序员宅基地

文章浏览阅读89次。#include <stdio.h>int main(void){ //逐个取出user.txt文件内的字符串,并且打印 FILE * file; char line[128]; char * ret; file = fopen("users.txt", "r"); if(!file){ printf("文件打开错误"); return 1; } while(ret = fgets(line, sizeof(line), file)){ /._char fgets

安装kali Linux 2018.2以后的事_kali linux2018..2-程序员宅基地

文章浏览阅读4.3k次。一、添加更新源:leafpad /etc/apt/sources.list二、添加源阿里云 deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib..._kali linux2018..2

Ubuntu14.04安装libfreenect2使用kinect2-程序员宅基地

文章浏览阅读6.3k次。kinect2出来时OpenNI已被水果公司收购,第三方的驱动支持只剩下libfreenect2了。

DL/T 645多功能电能表通信协议测试方法_dl645-2007通信协议进行三相/单相电表读取-程序员宅基地

文章浏览阅读3.7k次。1 前言DL/T645多功能电能表通信协议(Multi-function watt-hour meter communication protocol)标准是为统一和规范电能表的多功能电能表与数据终端设备进行数据交换时的物理连接和协议。本文将以DL/T645-2007多功能电能表通信协议为基础,介绍如何使用格西烽火通信测试软件进行编写测试项目,进行测试多功能电能表。2 通信协议2.1 术语多功能电能表 multi-function watt-hour meter由测量单元和数据处理单元等_dl645-2007通信协议进行三相/单相电表读取

js day6 Math和日期_js根绝几岁几月几天计算出生日期-程序员宅基地

文章浏览阅读128次。&lt;script type="text/javascript"&gt; //宿主对象:内置对象。// Math.pow()--求幂,参1:底数 参2:指数 console.log(Math.pow(2,3));//8 // Math.random()--随机产生0-1之..._js根绝几岁几月几天计算出生日期

搞java的薪资30K+是什么水平?_java 30k处于什么样的水平-程序员宅基地

文章浏览阅读657次。不知不觉已经工作 5 年了, 一 路走 来磕磕碰碰但总算有了自己的一点小体会。 对于一个 Java 开发人员来说,到了 5 年的关键节点,需要掌握哪些知识点呢? 经过我自己的总结,我列出了下面的思维导图。从上面的图片我们可以看出大致分为三个部分:JDK 源码、JVM 原理、框架源码。JDK源码JDK 源码是一切的基础,许多框架都参考了 JDK 源码的实现思路,因此弄懂 JDK 源码是一件非..._java 30k处于什么样的水平

随便推点

Oracle技术分享系列一:Oracle数据库学习资源推荐_oracle学习资料-程序员宅基地

文章浏览阅读1k次。Oracle 作为一个技术大厂为其员工和用户提供了大量的免费学习资源。虽然有人说,Oracle有什么新技术也从来都不发论文,对科技的发展贡献十分有限。但其实Oracle的很多技术实现都明明白白地写在官方技术文档里。而且所有学习者都可以免费试用Oracle数据库的所有功能,还有丰富的技术社区、邮件组,散落在各地的热心的用户组,甚至是专门的回答各种问题的由大师组成的ASK TOM团队回答你的的各种问题,可以说对学习者是相当友好的了。..._oracle学习资料

window.history.back(); 缓存 返回上级页面不刷新数据-程序员宅基地

文章浏览阅读1.2w次,点赞6次,收藏5次。问题我们经常会做完一个操作之后返回上一个页面(比如新增完一条记录)然后我们希望返回上一个页面的时候就自动刷新他。但是由于JS的缓存机制导致我们的数据还是从前一次里面取的(他的初衷是希望你更快,更省资源)但是和我们的需求不同如图:探索从网上找的一些资料:在window.history.back(); 后面加location.reload();win..._window.history.back

hadoop-2.7.2伪分布式windows安装及配置_此时不应有hadoop-2.7.2\bin-程序员宅基地

文章浏览阅读312次。hadoop-2.7.2伪分布式windows安装及配置首先准备hadoop-2.7.2压缩包将复制好的压缩包解压至D盘的soft文件夹下,修改名字为hadoop使用winutils中的bin目录整个替换hadoop中的bin目录在hadoop的data文件夹下创建datanode及namenode文件夹,用来保存节点信息JDK1.8安装路径环境配置![在这里插入图片描述](https://img-blog.csdnimg.cn/20210118172546609.png?x-oss-process=ima_此时不应有hadoop-2.7.2\bin

File类总结_filecsnd-程序员宅基地

文章浏览阅读284次。最近一直在忙项目,所以没有及时更新小知识,今天就为大家讲一下file的知识点。首先呢,我们需要了解文件路径的概念。文件路径就是文件在电脑中的位置,表示文件路径的方式有两种:相对路径和绝对路径。相对路径是指目标相对于当前文件的路径,例如:“./index.html”。绝对路径:从盘符开始的路径或者网址的全路径,例如“C:\windows\system32\cmd.exe”或者“https://blo..._filecsnd

IsWindow函数的作用_c# iswindow-程序员宅基地

文章浏览阅读2k次。基于对话框的应用程序一般是要保证应用流程的,比如父窗口不存在了,是否需要该窗口继续存在,这时需要用到 IsWindow 函数。IsWindow函数功能:该函数确定给定的窗口句柄是否标识一个已存在的窗口。函数原型:BOOL IsWindow(HWND hWnd);参数:hWnd:被测试窗口的句柄。返回值:如果窗口句柄标识了一个已存在的窗口,返回值为非零;如果窗口句柄未标识一个已存_c# iswindow

最短路径(三)SPFA算法(负权)_spfa 负权图-程序员宅基地

文章浏览阅读588次。AcWing 851. spfa求最短路给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出impossible。数据保证不存在负权回路。输入格式第一行包含整数n和m。接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。输出格式输出一个整数,表示1号点到n号点的最短距离。如果路径不存在,则输出”impossible”。数据范围1≤n,m≤105,图中涉及边长绝对值均不_spfa 负权图

推荐文章

热门文章

相关标签