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

Ubuntu Docker环境下OpenCV+CUDA+TensorRT运行报错求助

解决Ubuntu Docker环境下OpenCV(CUDA/TensorRT)运行时"no kernel image is available for execution on the device"报错

核心原因

OpenCV编译时生成的CUDA内核二进制文件(PTX/SASS)与宿主机GPU的计算能力不匹配,导致GPU无法找到可执行的内核代码。

解决步骤

1. 确认宿主机GPU计算能力

在宿主机终端执行命令,获取GPU对应的计算能力值:

nvidia-smi --query-gpu=compute_cap --format=csv,noheader

示例输出如7.5(对应Turing架构)、8.6(对应Ampere架构)。

2. 重新编译OpenCV并指定匹配的CUDA架构

若为自行编译的OpenCV,在cmake配置阶段添加对应GPU的计算能力参数:

cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D WITH_CUDA=ON \
      -D CUDA_ARCH_BIN="7.5" \  # 替换为你的GPU计算能力值,多架构用逗号分隔如"7.5,8.6"
      -D CUDA_ARCH_PTX="" \
      -D WITH_TENSORRT=ON \
      -D OPENCV_EXTRA_MODULES_PATH=/path/to/opencv_contrib/modules \
      ..

完成配置后重新编译安装OpenCV。

3. 检查Docker容器GPU映射配置

运行容器时需使用nvidia-docker工具,确保GPU设备正确映射:

docker run --gpus all -it your-image-name

或指定单GPU:

docker run --gpus '"device=0"' -it your-image-name

进入容器后执行nvidia-smi验证GPU是否正常识别。

4. 验证CUDA与OpenCV版本兼容性

OpenCV 4.5.2官方兼容CUDA 11.1~11.3版本,在容器内执行以下命令确认CUDA版本,确保与编译OpenCV时使用的CUDA版本一致:

nvcc --version

5. 临时替代方案(仅应急使用)

若暂时无法重新编译,可在代码中禁用CUDA加速,改用CPU处理:

cv::Mat img = cv::imread("test.jpg");
cv::Mat channels[3];
cv::split(img, channels); // 替换cuda::split为CPU版本的split

内容的提问来源于stack exchange,提问作者Mirnamiq Abdullayev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:12:52