VMamba 安装教程(无需更改base环境中的cuda版本)

yyywxk 2024-08-16 10:37:02 阅读 82

导航

Linux下 Mamba 及 Vim 安装问题参看本人之前博客:Mamba 环境安装踩坑问题汇总及解决方法Windows 下 Mamba 的安装参看本人之前博客:Window 下Mamba 环境安装踩坑问题汇总及解决方法 (无需绕过selective_scan_cuda)Windows 下 VMamba的安装参看本人之前博客:Windows 下 VMamba 安装教程(无需更改base环境中的cuda版本且可加速)Window 下 Vim 环境安装参考本人之前博客:Window 下 Vim 环境安装踩坑问题汇总及解决方法

目录

导航背景Linux 下正确安装命令CUDA 12.1CUDA 11.8最后一步编译不成功

报错及解决(20240714)1. 基本报错信息2. CUDA version mismatch3. fatal error: cusparse.h网传方法解决方法

4. fatal error: cublas_v2.h5. fatal error: cusolverDn.h6. fatal error: crypt.h网传方法解决方法

7. fatal error: cuda_runtime.h

报错及解决(20240715)8. 正常安装 Vmamba 找不到找不到 selective_scan_cuda 模块9. 无法导入selective_scan_cuda_oflex和selective_scan_cuda_core模块10. 正常安装 Vmamba 找不到 selective_scan_cuda_core 模块11. g++ 版本不支持12. fatal error: cuda_bf16.h:

背景

最近有不少小伙伴在 Linux 上安装 VMamba (VMamba: Visual State Space Model)时,按照官方的安装命令会遇到各种各样的错误,部分错误可以按照 Mamba 以及 Vim 中相似的方法进行处理(参考笔者之前的博客:Mamba 环境安装踩坑问题汇总及解决方法),但是有些问题无法解决,特此汇总。注意,即使base环境中安装的 CUDA 版本过低,也不影响 Mamba,Vim 以及 VMamba 环境的正常安装。

安装问题 / 资源自取 / 论文合作想法请+vx:<code>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

报错如下:

<code> 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,参考之前博客:

Linux:Mamba 环境安装踩坑问题汇总及解决方法Windows :Window 下Mamba 环境安装踩坑问题汇总及解决方法 (无需绕过selective_scan_cuda)

注意,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环境内安装gcc4.8.5(无root权限)Linux系统 利用conda更改gcc、g++版本(非root用户)

解决方法依然是利用 conda 在虚拟环境中安装相关的包,在anaconda库中找到合适的 gcc包 和 g++包,譬如可以选择8.5.0版本

<code>conda install conda-forge::gcc=8.5.0

conda install conda-forge::gxx=8.5.0

输入命令gcc-vg++ -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版本

即可。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。