RTX3090运行PointPillar评估代码遇CUDA内核镜像不可用错误求助
问题描述
在RTX 3090上运行Dual-Radar项目评估代码时遇到CUDA错误,错误日志如下:
[13.73019 90.45654 -0.80213207 0.57002985] [12.367015 90.64196 1.0528708 0.56709075] [12.335012 90.66197 -0.82074624 0.5729689 ]] Error! Traceback (most recent call last): File "test.py", line 201, in <module> main() File "test.py", line 197, in main eval_single_ckpt(model, test_loader, args, eval_output_dir, logger, epoch_id, dist_test=dist_test) File "test.py", line 63, in eval_single_ckpt eval_utils.eval_one_epoch( File "/workspace/Dual-Radar/tools/eval_utils/eval_utils.py", line 199, in eval_one_epoch pred_dicts, ret_dict = model(batch_dict) File "/root/anaconda3/envs/DR/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1102, in _call_impl return forward_call(*input, **kwargs) File "/workspace/Dual-Radar/tools/../pcdet/models/detectors/pointpillar.py", line 21, in forward pred_dicts, recall_dicts = self.post_processing(batch_dict) File "/workspace/Dual-Radar/tools/../pcdet/models/detectors/detector3d_template.py", line 273, in post_processing recall_dict = self.generate_recall_record( File "/workspace/Dual-Radar/tools/../pcdet/models/detectors/detector3d_template.py", line 310, in generate_recall_record iou3d_rcnn = iou3d_nms_utils.boxes_iou3d_gpu(box_preds[:, 0:7], cur_gt[:, 0:7]) File "/workspace/Dual-Radar/tools/../pcdet/ops/iou3d_nms/iou3d_nms_utils.py", line 69, in boxes_iou3d_gpu max_of_min = torch.max(boxes_a_height_min, boxes_b_height_min) RuntimeError: CUDA error: no kernel image is available for execution on the device eval: 0%|
已运行基础测试代码验证GPU和CUDA状态:
import torch import sys print('A', sys.version) print('B', torch.__version__) print('C', torch.cuda.is_available()) print('D', torch.backends.cudnn.enabled) device = torch.device('cuda') print('E', torch.cuda.get_device_properties(device)) print('F', torch.tensor([1.0, 2.0]).cuda())
输出结果:
A 3.8.16 (default, Jun 12 2023, 18:09:05) [GCC 11.2.0] B 1.10.1+cu113 C True D True E _CudaDeviceProperties(name='NVIDIA GeForce RTX 3090', major=8, minor=6, total_memory=24259MB, multi_processor_count=82) F tensor([1., 2.], device='cuda:0')
当前环境:CUDA 11.3,PyTorch 1.10.1+cu113,已尝试更换1.9.0、1.11.0、1.10.0等PyTorch版本,问题仍未解决。怀疑是否因矩阵过大导致,寻求解决方法。
解决方案
这个错误核心是编译的CUDA内核不支持RTX 3090的SM86架构,和矩阵大小无关,按以下步骤排查:
重新编译项目中的CUDA算子
Dual-Radar依赖的pcdet库包含自定义CUDA算子(比如iou3d_nms),这些算子可能是在旧GPU架构下编译的,不兼容SM86。- 进入项目根目录,执行清理和重新编译:
cd /workspace/Dual-Radar python setup.py clean python setup.py develop - 编译时可指定环境变量强制适配SM86架构:
export TORCH_CUDA_ARCH_LIST="8.6" python setup.py develop
- 进入项目根目录,执行清理和重新编译:
检查PyTorch的CUDA架构支持
部分PyTorch预编译包可能默认不包含SM86支持,执行以下命令验证:import torch print(torch.cuda.get_arch_list())如果输出里没有
sm_86,建议升级到PyTorch 1.12+的cu113预编译包,或从源码编译PyTorch并指定SM86架构。临时切换到CPU算子(验证用)
修改detector3d_template.py中调用GPU算子的代码,替换为CPU版本后再转回CUDA:# 原代码 iou3d_rcnn = iou3d_nms_utils.boxes_iou3d_gpu(box_preds[:, 0:7], cur_gt[:, 0:7]) # 修改后 iou3d_rcnn = iou3d_nms_utils.boxes_iou3d(box_preds[:, 0:7].cpu(), cur_gt[:, 0:7].cpu()).cuda()注意:此方法会降低运行速度,仅用于验证问题根源。
确保CUDA环境一致性
检查系统CUDA、PyTorch绑定CUDA、编译算子时使用的CUDA版本是否一致:nvcc --version python -c "import torch; print(torch.version.cuda)"若版本不一致,重新安装匹配的PyTorch和CUDA工具包。
内容的提问来源于stack exchange,提问作者qx lin
相关产品推荐
相关产品推荐

