Check failed: error == cudaSuccess (8 vs. 0) invalid device function

本文详细介绍了在配置Faster R-CNN实验环境时遇到GPU编译运行错误的解决方法,包括修改setup.py文件、删除特定文件以及重新编译等步骤。适用于使用GPU进行Faster R-CNN实验的读者。

最近在复现R-CNN一系列的实验时,配置代码环境真是花费了不少时间。由于对MATLAB不熟悉,实验采用的都是github上rbg大神的python版本。在配置Faster R-CNN时,编译没有问题,一运行 ./tools/demo.py --net zf  就会出现如下错误:

Loaded network ./data/faster_rcnn_models/ZF_faster_rcnn_final.caffemodel  
F1008  roi_pooling_layer.cu:91] Check failed: error == cudaSuccess (8 vs. 0) invalid device function  
*** Check failure stack trace: ***  

但是采用CPU mode运行时可以成功。

最后在https://github.com/rbgirshick/py-faster-rcnn/issues/2 找到了我想要的答案,有兴趣的可以慢慢阅读。

不想看的话,就直接按照我下面的方式修改。

一般情况下都是因为显卡的计算能力不同而导致的,修改 py-faster-rcnn/lib/setup.py 的第135行,将arch改为与你显卡相匹配的数值,(比如我的GTX 760,计算能力是3.0,就将sm_35改成了sm_30)然后删除utils/bbox.c,nms/cpu_nms.c ,nms/gpu_nms.cpp 重新编译即可


我看到有些人说还有其他的问题,那么可以在最开始的makefile.config文件中就开始修改,不过我没有试过,具体步骤如下

As below, there is my solution (thress steps):  
1 if you're using the GPU instance on AWS, then please change the architecture setting into:  
# CUDA architecture setting: going with all of them.  
# For CUDA < 6.0, comment the *_50 lines for compatibility.  
CUDA_ARCH := -gencode arch=compute_30,code=sm_30 \  
-gencode arch=compute_50,code=sm_50 \  
-gencode arch=compute_50,code=compute_50  
Because the GPU in AWS does not support compute_35  
2 I changed sm_35 into sm_30 in lib/setup.py file  
3 cd lib, remove these files: utils/bbox.c nms/cpu_nms.c nms/gpu_nms.cpp, if they exist.  
And then make && cd ../caffe/ && make clean && make -j8 && make pycaffe -j8  




### 解决方案 当遇到 `no kernel image is available for execution on the device` 的错误时,通常是因为编译后的 CUDA 二进制文件不兼容当前 GPU 架构的计算能力 (Compute Capability)[^1]。以下是可能的原因以及解决方案: #### 原因分析 1. **目标架构不匹配**: 编译时未指定正确的 `-arch` 或 `-gencode` 参数,导致生成的目标代码无法运行在当前设备上[^2]。 2. **CUDA 版本与驱动版本冲突**: 安装的 NVIDIA 驱动程序版本过低或过高,可能导致 CUDA 应用无法正常加载到设备上[^3]。 #### 解决方法 ##### 方法一:重新配置编译选项 确保在构建项目时指定了适合目标 GPU 的架构标志。例如,对于具有 Compute Capability 3.5 的 NVIDIA Tesla K40C 设备,可以尝试以下命令来设置合适的架构参数: ```bash nvcc -arch=sm_35 your_kernel.cu -o your_kernel ``` 如果需要支持多个架构,则可以通过 `-gencode` 参数实现更灵活的支持: ```bash nvcc -gencode arch=compute_35,code=sm_35 \ -gencode arch=compute_70,code=sm_70 \ your_kernel.cu -o your_kernel ``` 上述命令会为目标硬件分别生成适用于不同架构的指令集。 ##### 方法二:更新或重置环境 有时删除旧版 CUDA 和显卡驱动并全新安装最新版本能够解决问题。按照引用中的描述操作如下: - 卸载现有 cuda 及 nvidia driver 组件; - 清理残留依赖项(如提及被误删的组件 nvidia-docker2); - 下载对应平台最新的稳定发行包完成部署过程。 注意,在执行这些更改之前最好备份重要数据以防万一出现问题影响正常使用体验。 ##### 方法三:验证驱动和库的一致性 确认已安装的操作系统内核模块同所选图形处理器驱动相吻合,并且该组合得到官方文档认可可搭配特定系列cuda工具链一起工作。 最后再次测试应用程序看是否仍然存在相同类型的报错现象。 --- ###
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值