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
最新文章
- 那些VisualStudio隐藏的调试功能
- appium 常用api介绍(1)
- linux gksu用法
- HDOJ 1220 Cube
- POJ 2246 Matrix Chain Multiplication(结构体+栈+模拟+矩阵相乘)
- ubuntu安装kvm流程
- 2015北大夏令营day1 B:An Idea of Mr. A
- 【转】morgan stanley 电面面经新鲜出炉
- CSS学习笔记(1):选择器
- Uva 1061 The Morning after Halloween
- Tomcat启动一闪而过
- 利用ffmpeg做视频解码的顺序
- iOS中 项目开发易错知识点总结 韩俊强的博客
- 教小朋友学Linux
- echo 输入背景和字体常用方法
- Qt Designer问题(挖坑)
- ol3对地图上某些特定的经纬度进行标注
- springmvc源码解析(二)
- 为啥RESTFULL如此重要?
- node、npm的安装和环境变量的配置
热门文章
- Windows Thin PC体验 &; 语言包更改(win 7 included)
- linux 静态库使用经验
- leetCode 61.Rotate List (旋转链表) 解题思路和方法
- Enumerate Combination C(k, n) in a bitset
- Hibernate demo之使用注解
- ASP.NET页面间传值的几种方式
- Linux下Kafka单机安装配置方法
- 编译webrtc for android库与apk
- javascript的defer和async(转载)
- python的安装及matplotlib安装