1. 程式人生 > >執行yolo時,莫名出現cuda error的解決辦法

執行yolo時,莫名出現cuda error的解決辦法

最近在載入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 ((GPU),1)

CUDAifeq((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 修改過後重新編譯即可