darknet YOLO 編譯使用GPU


Darknet在GPU上運行可以得到500倍的提速,編譯使用GPU要求顯卡是Nvidia卡並且正確安裝了CUDA。

GPU環境下的編譯配置都是在 /darknet/Makefile 文件中定義的,GPU環境的編譯有3點更改需要注意。


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


GPU=1

CUDNN=1


2. 更改CUDA的路徑

48~51行,在"ifeq ($(GPU), 1)"語句塊中修改為自己的CUDA安裝路徑,更改前默認路徑如下:


ifeq ($(GPU), 1) 

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

CFLAGS+= -DGPU

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


例如修改為:


ifeq ($(GPU), 1)
COMMON+= -DGPU -I/usr/local/cuda-8.0/include/
CFLAGS+= -DGPU
LDFLAGS+= -L/usr/local/cuda-8.0/lib64 -lcuda -lcudart -lcublas -lcurand


23行,修改NVCC的路徑:


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


3. 修改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


所以Tesla K80對應compute_30,Tesla K40c對應compute_35,Titan X對應compute_52,根據自己的GPU型號的計算能力進行配置,例如配置為:


ARCH= -gencode arch=compute_35,code=compute_35 \

重新編譯即可。

CUDA官方說明文檔:http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#virtual-architecture-feature-list



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM