首页 > Python资料 博客日记
VMamba 安装教程(无需更改base环境中的cuda版本)
2024-09-25 11:00:05Python资料围观171次
导航
- Linux下 Mamba 及 Vim 安装问题参看本人之前博客:Mamba 环境安装踩坑问题汇总及解决方法
- Windows 下 Mamba 的安装参看本人之前博客:Window 下Mamba 环境安装踩坑问题汇总及解决方法 (无需绕过selective_scan_cuda)
- Windows 下 VMamba的安装参看本人之前博客:Windows 下 VMamba 安装教程(无需更改base环境中的cuda版本且可加速)
- Window 下 Vim 环境安装参考本人之前博客:Window 下 Vim 环境安装踩坑问题汇总及解决方法
背景
最近有不少小伙伴在 Linux 上安装 VMamba (VMamba: Visual State Space Model)时,按照官方的安装命令会遇到各种各样的错误,部分错误可以按照 Mamba 以及 Vim 中相似的方法进行处理(参考笔者之前的博客:Mamba 环境安装踩坑问题汇总及解决方法),但是有些问题无法解决,特此汇总。注意,即使base环境中安装的 CUDA 版本过低,也不影响 Mamba,Vim 以及 VMamba 环境的正常安装。
(安装问题 / 资源自取 / 论文合作想法请+vx:931744281
)
Linux 下正确安装命令
运行之前需要下载好 Vmamba 官方的源码,用 git
下载方式如下:
git clone https://github.com/MzeroMiko/VMamba.git
下面分别是 CUDA 12.1 和 CUDA 11.8 两种环境的安装,由于此时 CUDA 的内核以及相关文件均安装在虚拟环境中,可以不考虑base环境里 CUDA 的版本。具体安装哪个版本由读者自由选择。环境安装成功的关键是最后一步是否能编译成功。
CUDA 12.1
conda create -n vmamba python=3.10
conda activate vmamba
conda install cuda-nvcc==12.1.105
pip install -r requirements.txt
conda install nvidia/label/cuda-12.1.0::libcusparse-dev # 可选,根据最后一步报错
conda install nvidia/label/cuda-12.1.0::libcublas-dev # 可选,根据最后一步报错
conda install nvidia/label/cuda-12.1.0::libcusolver-dev # 可选,根据最后一步报错
conda install libxcrypt # 可选,根据最后一步报错
cd kernels/selective_scan && pip install .
CUDA 11.8
conda create -n vmamba python=3.10
conda activate vmamba
conda install cudatoolkit==11.8
pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 --index-url https://download.pytorch.org/whl/cu118
pip install setuptools==68.2.2
conda install -c "nvidia/label/cuda-11.8.0" cuda-nvcc
pip install -r requirements.txt
conda install nvidia/label/cuda-11.8.0::cuda-cudart-dev # 可选,根据最后一步报错
conda install nvidia/label/cuda-11.8.0::libcusparse-dev # 可选,根据最后一步报错
conda install nvidia/label/cuda-11.8.0::libcublas-dev # 可选,根据最后一步报错
conda install nvidia/label/cuda-11.8.0::libcusolver-dev # 可选,根据最后一步报错
cd kernels/selective_scan && pip install .
最后一步编译不成功
其中的部分命令实际是根据最后一步报错倒推的,根据大家实际环境的不同因人而异。最后一步的 selective_scan
笔者已经打包出 whl 安装包,见 selective-scan-0.0.2-cp310-cp310-linux-x86-64.whl (CUDA 12.1 不含core)。可联系本人vx自取,安装命令为:
pip install selective_scan-0.0.2-cp310-cp310-linux_x86_64.whl
selective-scan(CUDA 11.8 包含selective_scan_core)的whl 为:selective-scan(CUDA 11.8 包含core)
selective-scan(CUDA 12.1 包含selective_scan_core)的whl 为:selective-scan(CUDA 12.1 包含core)
报错及解决(20240714)
几乎所有的报错都集中在最后一步的编译上,总结如下。
1. 基本报错信息
出现报错:
Building wheels for collected packages: selective_scan
Building wheel for selective_scan (setup.py) ... error
error: subprocess-exited-with-error
× python setup.py bdist_wheel did not run successfully.
│ exit code: 1
╰─> [61 lines of output]
torch.__version__ = 2.3.1+cu121
...
...
...
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for selective_scan
Running setup.py clean for selective_scan
Failed to build selective_scan
ERROR: Could not build wheels for selective_scan, which is required to install pyproject.toml-based projects
只有编译过程中出现错误,就会以这种输出结尾。因此,本段输出开头和结尾的报错信息毫无用处,需要重点查看中间部分的报错输出。如以下画框部分。
2. CUDA version mismatch
报错如下:
RuntimeError:
The detected CUDA version (11.8) mismatches the version that was used to compile
PyTorch (12.1). Please make sure to use the same CUDA versions.
原因是 CUDA 版本和 PyTorch 支持的CUDA版本不一致。解决方案为 升高 CUDA 版本
或 降低 PyTorch 支持的版本
,即:
conda uninstall cudatoolkit # 如果之前装了cudatoolkit,先卸载;其最高版本只有11.8
conda install cuda-nvcc==12.1.105
或者先卸载高版本的pytorch,然后
pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 --index-url https://download.pytorch.org/whl/cu118
注意,不指定 index-url 会默认安装CUDA最新版本的pytorch。
3. fatal error: cusparse.h
出现报错 fatal error: cusparse.h: No such file or directory
,如下:
....
xxxx/vmamba/lib/python3.10/site-packages/torch/include/ATen/cuda/CUDAContextLight.h:7:10: fatal error: cusparse.h: No such file or directory
7 | #include <cusparse.h>
| ^~~~~~~~~~~~
compilation terminated.
网传方法
网上有些博客的方法治标不治本,例如:
- 使用下列指令指定后解决问题:
export CUDA_HOME=/usr/local/cuda-10.2
;(博客:Cuda 程序编译报错: fatal error: cusparse.h: No such file or directory) - 修改文件~/.bashrc里的几个export PATH;(博客:有效解决OSError: libcusparse.so.11: cannot open shared object file: No such file or directory)
- 将缺少的
cusparse.h
下载放入对应目录;(博客:cusparse.h: No such file or directory compilation terminated.)
解决方法
解决方法是安装相关的环境,有两种解决方法:
- 在Linux环境下安装相关的包(不推荐且无必要,一般需要管理员权限),即
apt-get install cuda-cusparse-dev-10-1
(博客:fatal error: cusparse.h: No such file or directory compilation terminated. error: command ‘/usr/loca)。注意:cuda11起包名改成了libcusparse,因此,命令应改为:apt-get install libcusparse-dev-11-8
(博客:矩池云上缺少cusparse.h头文件解决方法)
- 更好的解决方法是利用
conda
安装libcusparse-dev
来解决,笔者发现,在 Anaconda 官方网站中,在 nvidia 仓库 下面存在合适的包可供下载,它们将 CUDA 的各个核心算子都写成了可供 conda 安装的包。因此,缺少什么CUDA头文件,均可以从这个仓库里找到合适的包。因此,此处的命令是:conda install nvidia/label/cuda-12.1.0::libcusparse-dev
。
4. fatal error: cublas_v2.h
出现报错 fatal error: cublas_v2.h: No such file or directory
,如下:
....
xxxx/vmamba/lib/python3.10/site-packages/torch/include/ATen/cuda/CUDAContextLight.h:7:10: fatal error: cublas_v2.h: No such file or directory
| #include <cublas_v2.h>
| ^~~~~~~~~~~~
compilation terminated.
原因同报错3,因此解决方法为:conda install nvidia/label/cuda-12.1.0::libcublas-dev
。
5. fatal error: cusolverDn.h
出现报错 fatal error: cusolverDn.h: No such file or directory
,如下:
....
xxxx/vmamba/lib/python3.10/site-packages/torch/include/ATen/cuda/CUDAContextLight.h:7:10: fatal error: cusolverDn.h: No such file or directory
| #include <cusolverDn.h>
| ^~~~~~~~~~~~
compilation terminated.
原因同报错3,因此解决方法为:conda install nvidia/label/cuda-12.1.0::libcusolver-dev
。
6. fatal error: crypt.h
出现报错 fatal error: crypt.h: No such file or directory
,原因同报错3,但此时 nvidia 下已经找不到对应的包了,出现报错的位置变成了 Python。
网传方法
有的博客先在Ubuntu中使用apt命令安装必要的库,针对虚拟环境调整文件路径,以及通过conda-forge渠道安装libxcrypt。(博客:crypt.h:No such file or directory 亲测)
方法较为复杂,不推荐且无必要,一般需要管理员权限。
解决方法
受网上博客最后一步启发,在Anaconda 官方网站 conda-forge 仓库
发现了一个包——libxcrypt,因此解决方法为:conda install libxcrypt
。
7. fatal error: cuda_runtime.h
配置 CUDA 11.8 版本时,发现最后一步编译出现错误,fatal error: cuda_runtime.h: No such file or directory
:
....
cc1plus: fatal error: cuda_runtime.h: No such file or directory
compilation terminated.
参考博客 如何在anaconda环境中安装cuda.h和cuda_runtime.h,得到具体的anaconda环境下的解决方法:
conda install nvidia/label/cuda-11.8.0::cuda-cudart-dev # 根据CUDA版本
报错及解决(20240715)
8. 正常安装 Vmamba 找不到找不到 selective_scan_cuda 模块
VMamba 中遇到selective_scan_cuda 模块
No module named 'selective_scan_cuda'
VMamba 的代码和 Mamba 是独立的,如果想有 selective_scan_cuda
包,则需要安装 mamba_ssm,参考之前博客:
注意,mamba 的这个包在Vmamba里面不是必须的。
9. 无法导入selective_scan_cuda_oflex和selective_scan_cuda_core模块
同时出现以上报错,一般因为安装的是Mamba 而不是 VMamba,Mamba 安装成功后环境中本来就没有selective_scan_cuda_oflex和selective_scan_cuda_core模块,请按前文 Vmamba 正确的顺序安装 Vmamba的环境。
10. 正常安装 Vmamba 找不到 selective_scan_cuda_core 模块
除了selective_scan_cuda_core 模块,还有可能找不到 selective_scan_cuda_nrow
模块,这是因为在编译 selective_scan
时,在 setup.py
第40行选用的模式只有 [‘oflex’]
MODES = ["oflex"]
# MODES = ["core", "ndstate", "oflex"]
# MODES = ["core", "ndstate", "oflex", "nrow"]
改为:
MODES = ["core", "oflex"]
# MODES = ["core", "ndstate", "oflex"]
# MODES = ["core", "ndstate", "oflex", "nrow"]
修改此处再编译即可。注意,该模块也不是必须的。而ndstate
在最新代码中源文件已经被删除,默认模式即可,不需要修改。
selective-scan(CUDA 11.8 包含selective_scan_core)的whl 为:selective-scan(CUDA 11.8 包含core)
selective-scan(CUDA 12.1 包含selective_scan_core)的whl 为:selective-scan(CUDA 12.1 包含core)
11. g++ 版本不支持
出现报错 RuntimeError: The current installed version of g++ (4.8.5) is less than the minimum required version
,具体为:
RuntimeError: The current installed version of g++ (4.8.5) is less than the minimum required version by CUDA 11.7 (6.0.0). Please make sure to use an adequate version of g++ (>=6.0.0, <=11.5.0).
如下图
原因很明显,base 环境里的 gcc 版本老旧,而一般升级版本需要root权限,参考博客:
解决方法依然是利用 conda 在虚拟环境中安装相关的包,在anaconda库中找到合适的 gcc包 和 g++包,譬如可以选择8.5.0版本
conda install conda-forge::gcc=8.5.0
conda install conda-forge::gxx=8.5.0
输入命令gcc-v
和 g++ -v
查看识别到的 gcc 以及 g++版本,如版本还是原来的,则增加环境变量至 .bashrc
,通过 vim ~/.bashrc
打开编辑,添加:
export PATH=/home/xxx/.conda/envs/xxx/bin:$PATH
12. fatal error: cuda_bf16.h:
发现最后一步编译出现错误,fatal error: cuda_bf16.h: No such file or directory
,此类问题,执行
conda install nvidia/label/cuda-11.8.0::cuda-cudart-dev # 根据CUDA版本
即可。
报错及解决(20240913)
13. RuntimeError:CUDA error:no kernel image is available
正常安装 Vmamba/ 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.
原因是显卡太老了(譬如有的读者使用的是GTX 1080 甚至GTX 1070 显卡),causal-conv1d
、 mamba-ssm
以及 vmamba
均暂时不支持算力为6.1的设备。解决方法参考下面的博客:
- 解决装完mamba运行时报错RuntimeError:CUDA error:no kernel image is available for execution on the device
- Ubuntu下VMamba环境1080ti显卡踩坑问题和解决
即,修改这三个包的 setup.py
,在代码段
cc_flag.extend(["-gencode", "arch=compute_70,code=sm_70"])
cc_flag.extend(["-gencode", "arch=compute_80,code=sm_80"])
之上插入:
cc_flag.append("-gencode")
cc_flag.append("arch=compute_60,code=sm_60")
或者
cc_flag.extend(["-gencode", "arch=compute_60,code=sm_60"])
然后再次重新按照前文的方法编译,不过官方提示太老的版本可能会对性能产生影响,建议最好更新设备。
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj