运行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)”语句块中修改为自己的CUDA安装路径,更改前默认路径如下:ifeq((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
修改过后重新编译即可

### YOLO 运行 CUDA 错误解决方案 当遇到 `RuntimeError: CUDA error: device-side assert triggered` 的错误,通常表明存在底层硬件或软件层面的问题。具体到YOLO模型,在处理特定数据集出现此类错误可能源于多个方面。 #### 数据集配置问题 对于某些数据集(如HRSC2016),其标签ID从1开始编号,而YOLO框架期望的类别ID是从0开始的连续整数序列[^2]。这种不一致可能导致CUDA设备端断言触发器被激活,进而抛出上述异常。为了修正这一问题: - **检查并调整类别映射**:确认所使用的数据集中类别的定义方式是否与YOLO的要求相吻合;必要修改相应的`.yaml`文件来重新指定各目标类型的索引位置。 ```python # 示例代码片段用于展示如何读取和打印YAML文件的内容 import yaml with open('path/to/your/dataset.yaml', 'r') as file: config = yaml.safe_load(file) print(config['names']) ``` #### 验证数据预处理过程 确保所有输入图像及其对应的边界框坐标均处于合理范围内,并且不会越界访问GPU内存地址空间。特别是当采用第三方工具(例如COCO至YOLO格式转换脚本)准备训练样本,务必仔细审查生成的结果,防止潜在的数据损坏或格式不符情况发生[^3]。 #### 利用CPU模式排查根本原因 尝试切换到仅限于中央处理器(CPU)的工作环境执行相同的任务流程,以此排除显卡驱动程序版本兼容性等因素干扰的同更容易定位实际存在的逻辑缺陷所在之处。如果此仍然遭遇类似的数组下标溢出提示,则几乎可以肯定是由前述提到的数据源本身引起的矛盾冲突所致。 通过以上措施应该能够有效缓解乃至彻底消除由不当设置引发的相关技术难题。当然,针对具体情况还需要进一步深入分析才能得出最优化解法。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值