运行yolo时,莫名出现cuda error的解决办法

  • Post author:
  • Post category:其他


最近在加载yolo模型时,总是无缘无故出现cuda error的错误,初步判断为环境问题,所以讲yolo编译中需要注意的问题总结如下:

一、Darknet编译使用GPU要求显卡是Nvidia卡并且正确安装了CUDA。

GPU环境下的编译配置都是在 /darknet/Makefile 文件中定义的,GPU环境的编译有3点更改需要注意。

1. 更改Makefile前两行GPU和CUDNN的配置:

GPU=1

CUDNN=1

2、更改CUDA的路径

48~51行,在”ifeq (







(


G


P




U




)


,


1


)































































































C




U




D


A









































































































































i


f




e


q




(










(

G

P

U

)

,

1

)

C

U

D

A

i

f

e

q

(



(GPU), 1)

COMMON+= -DGPU -I/usr/local/cuda/include/

CFLAGS+= -DGPU

LDFLAGS+= -L/usr/local/cuda/lib64 -lcuda -lcudart -lcublas -lcurand

将三处的cuda路径改为自己本机上的路径即可

修改NVCC的路径:

NVCC=/usr/local/cuda-8.0/bin/nvcc

3、修改ARCH配置(该项在以前编译的过程中压根就没有注意,但是最近出现的cuda error都是因为这个隐秘的大坑。工程从别处拷贝个过来,两台机器的显卡不一样,但是本人直接编译。工程是直接可以编译的,但是一运行yolo模型就会出现cuda error。各位同学应该紧密关注自己显卡的型号,并将arch配置成符合自己显卡型号的配置)

如果经过1和2的配置修改后编译的darknet运行可能会报以下错误:

Loadingweights from yolo.weights…Done!

CUDA Error:invalid device function

darknet: ./src/cuda.c:21: check_error: Assertion `0’ failed.

Aborted (core dumped)

就是上述忽略自身显卡型号造成的。

这是因为配置文件Makefile中配置的GPU架构和本机GPU型号不一致导致的。

更改前默认配置如下(不同版本可能有变):

ARCH= -gencode arch=compute_30,code=sm_30 \

-gencode arch=compute_35,code=sm_35 \

-gencode arch=compute_50,code=[sm_50,compute_50] \

-gencode arch=compute_52,code=[sm_52,compute_52]

-gencode arch=compute_20,code=[sm_20,sm_21] \ This one is deprecated?

This is what I use, uncomment if you know your arch and want to specify

ARCH= -gencode arch=compute_52,code=compute_52

compute_30表示显卡的计算能力是3.0,几款主流GPU的compute capability列表:

GTX Titan x : 5.2

GTX 980 : 5.2

Tesla K80 : 3.7

Tesla K40 : 3.5

K4200 : 3.0

修改过后重新编译即可



版权声明:本文为qq_31511955原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。