调用GPU进行训练时出现 CUDA error : invalid device ordinal 核心已转储的错误 解决方案

ubuntu系统,在带有GTX 1080Ti显卡的笔记本上配置好了显卡驱动nvidia-384                    ,CUDA9.0,cuDNN7.0.5,opencv3.4.3,anaconda3 

环境,使用darknet进行训练时,使用以下指令训练:


```./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg scripts/darknet53.conv.74 -gpus 0,1

成功开始了训练,后来想修改代码重新训练,每次都报核心已转储的错误。
反复检查代码确认没问题,之后查看了无数核心已转储的教程还是没有解决,不掉用GPU时可以进行训练,也可以测试,接着怀疑是否是软件冲突,然后在makefile中试着把opencv等置0,没有检查出问题。确认过CUDA与cuDNN版本相匹配怀疑,怀疑opencv版本可能与CUDA版本有兼容性问题,卸载了opencv3.4.3重新装其他版本opencv还是不行。
之后搜到下面这个博客,

https://blog.csdn.net/qq_36362060/article/details/80739573

看到ubuntu16.4系统,GTX1080Ti显卡,opencv3.1.0 cuda8.0,cudnn v6.0跑yolo3 的配置,别人成功了,说明此配置没有问题。安装好了cuda8.0,cudnn v6.0,然后在安装opencv3.1.0 的时候一直报错,解决了很多错误,依然会出现奇怪的问题,opencv3.1.0很难装,后来安装opencv4.1.0,发现资料特别少,安装时也出现了一个怎么都解决不了的问题,之后又回归opencv3.4.3,成功安装opencv,测试通过。让darknet 里makefile中:
OPENCV=1
make一下,能跑通。
然而开始训练时,还是存在 CUDA error,核心已转储 的问题
做完一些列的事情差不多能排除核心已转储与软件冲突没有关系。

今天使用 nvidia-smi查看GPU信息
调用GPU进行训练时出现 CUDA error : invalid device ordinal 核心已转储的错误 解决方案_第1张图片
注意到这里只显示了一个GPU的信息,GPU 0 ,然而调用GPU进行训练的时候使用了GPU 0,1

瞬间明白了,问题应该出现在这里。一般的电脑都有自带的显卡,使用GPU训练时,加一个额外的显卡,就是两个显卡,因此使用-gpus 0,1,而我的笔记本只能显示一个额外加进去的显卡(之前能跑带-gpus 0,1的训练,说明电脑上有自带的独显,应该是独显突然出问题了),所以调用方法应该是

``
在终端执行该指令,终于没有问题了,太激动了,折腾这个问题折腾的太久了。另外,看到的darknet使用GPU进行训练的教程都带-gpus 0,1 ,实际上经过测试不需要带 **-gpus 0,1** 也可以运行。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190508102952346.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzc2NzM0NA==,size_16,color_FFFFFF,t_70)


你可能感兴趣的:(调用GPU进行训练时出现 CUDA error : invalid device ordinal 核心已转储的错误 解决方案)