You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 00:50:37