【踩坑记录】SiamMask 报错:CUDA error: no kernel image is available for execution on the device 解决方案(适配 RTX 4090)
一、问题背景
近期在服务器上部署 SiamMask 模型时,遇到以下报错:
RuntimeError: CUDA error: no kernel image is available for execution on the device
该问题发生在运行以下命令时:
python -m tools.demo \
--resume experiments/siammask_sharp/SiamMask_VOT.pth \
--config experiments/siammask_sharp/config_vot.json \
--base_path datasets/datapath/images
环境信息如下:
配置项 | 版本/型号 |
---|---|
显卡 | NVIDIA RTX 4090 |
显卡架构 | Ada Lovelace (Compute Capability 8.9) |
CUDA 驱动 | 12.4 |
PyTorch | 1.4.0 |
PyTorch CUDA 编译版本 | 10.1 |
二、错误原因分析
该错误通常表示:
当前 PyTorch 所编译支持的 CUDA 架构中,没有包含当前 GPU(如 RTX 4090)的内核代码。
更直白地说:
- 你的 PyTorch 是 2020 年的版本(1.4.0),当时 根本没有 RTX 4090。
- PyTorch 1.4 编译时最多只支持到 CUDA 10.1,且不包含 Compute Capability 8.9(RTX 4090 所需)。
三、解决方案
✅ 推荐方案:升级 PyTorch 到支持新显卡的版本
1. 卸载旧版本 PyTorch
pip uninstall torch torchvision torchaudio -y
2. 安装支持 RTX 4090 的 PyTorch(建议使用 cu118 编译版本)
pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu118
⚠ 注意:你不需要额外安装 CUDA Toolkit,PyTorch 自带编译好的 CUDA 运行时。
3. 验证是否安装成功
import torch
print(torch.__version__) # 应为 2.1.0
print(torch.version.cuda) # 应为 11.8
print(torch.cuda.is_available()) # 应为 True
四、其他可选方案(不推荐)
1. 使用 CPU(调试用)
修改 tools/demo.py
:
device = torch.device('cpu')
但会非常慢,不适合正式使用。
2. 自行从源码编译 PyTorch
复杂耗时,适用于嵌入式/定制需求场景,不适合大多数用户。
五、升级 PyTorch 后 SiamMask 的兼容性问题
由于 SiamMask 是基于 PyTorch 1.x 编写的老项目,在 PyTorch 2.x 中运行可能会遇到以下问题:
.data
访问方式被弃用volatile
参数已移除- 一些 BN 层行为变化
torch.Tensor.cpu().numpy()
之间类型不兼容
如遇此类问题,可以参考警告信息修改代码,或留言我来协助修复。
六、总结
错误提示:
CUDA error: no kernel image is available for execution on the device
根本原因: PyTorch 版本太旧,不支持新显卡(如 RTX 4090)
解决方案:
- 升级 PyTorch 到 2.1.0+
- 使用 cu118 编译版本(CUDA 11.8),兼容 Ada 架构
- 若有 API 不兼容问题,适当修改 SiamMask 源码即可解决
如果你也遇到相同问题,希望这篇博客能帮你少踩一点坑。如果有更多关于 SiamMask 或目标跟踪相关的问题,欢迎留言交流!