1.前言
最近继承了实验室师兄的电脑(GTX 1070),在装完mamba运行代码时报错(之前在实验室新机子上安装成功)
报错内容:RuntimeError:CUDA error:no kernel image is available for execution on the device
CUDA kernel errors might be asynchronously reported at some other API call, so ther stacktrace below might be incorrect.
由于之前在新机子上安装成功,因此安装步骤并没有出错,但遇到了这个奇怪的报错。
2.尝试解决
在网上查阅一些资料后,发现很多文章都说是torch和cuda版本不对应。但我用装好的torch和cuda跑了其他不用mamba的网路,是能运行的,且自查过torch和cuda版本是对应的。自查代码如下:
import torch
print(torch.__version__)
# 显示torch和cuda版本
print(torch.cuda.is_available())
# 显示True
3.解决方案
在多次尝试装了不同的torch(2.及以上版本)和cuda后,并没有解决该问题。由于现在可以参考的资料很少,本人为解决该问题查阅了好几天的资料,最终找到了以下两个方法。
3.1 方法一(不推荐)
此方法能让电脑运行起来mamba,但不知道是什么原因,运行精度特别低。推荐只在本地验证代码是否能运行,再用服务器跑的同学装。
想到之前在云服务器上也装过mamba,查看了当时装的版本为torch1.13.1和cuda117(python版本为3.7),猜测可能是1070不兼容过高版本的torch。因此,重装了torch1.13.1和cuda117,如下图所示:
再装对应版本的causal-conv1d和mamba-ssm的whl后,运行成功!
3.2 方法二
在使用方法一装完mamba后,欣喜万分,但运行代码后,又给了我当头一棒。miou和一些其他的模型评价指标巨低,这明显和我想在本地跑代码的想法有出入。运行结果如下图所示:
因此,我再次踏上了搜寻之旅,并把目光放在了github上。功夫不负有心人,在一段时间的搜索后,我看到了这篇文章: 宝藏文章
这篇文章中说他的显卡是GTX1070,计算能力为6.1。但causal-conv1d和mamba-ssm暂时不支持算力为6.1的设备,需在原码处添加如下代码:
cc_flag.append("-gencode")
cc_flag.append("arch=compute_60,code=sm_60")
3.2.1 下载对应的包
1.下载 causak-conv1d
2.下载 mamba-ssm
3.2.2 修改对应的setup.py文件
找到两个包内的setup.py文件并分别添加代码,如下图所示:
添加完后保存代码,进入对应的文件夹:
1.进入causal-conv1d-main: 使用以下代码进行安装(此次安装较慢,若安装失败,重新运行该代码)
CAUSAL_CONV1D_FORCE_BUILD=TRUE pip install .
2.进入mamba-main: 使用以下代码进行安装(此次安装可能需要10mins,请耐心等待,并需确认电脑上有足够的空间)
MAMBA_FORCE_BUILD=TRUE pip install .
看到如下图片,即安装成功:
4.再次运行
再次运行该代码,结果正常,如下图所示^_^: