Linux 下 Mamba 环境安装踩坑问题汇总(重置版)
导航
安装教程导航
Mamba 及 Vim 安装问题参看本人博客:Mamba 环境安装踩坑问题汇总及解决方法(初版)- Linux 下 Mamba 安装问题参看本人博客:Mamba 环境安装踩坑问题汇总及解决方法(重置版)
- Windows 下 Mamba 的安装参看本人博客:Window 下Mamba 环境安装踩坑问题汇总及解决方法 (无需绕过selective_scan_cuda)
- Linux 下 Vim 安装问题参看本人博客:Linux 下 Vim 环境安装踩坑问题汇总及解决方法(重置版)
- Windows 下 Vim 安装问题参看本人博客:Window 下 Vim 环境安装踩坑问题汇总及解决方法
- Linux 下Vmamba 安装教程参看本人博客:Vmamba 安装教程(无需更改base环境中的cuda版本)
- Windows 下 VMamba的安装参看本人博客:Windows 下 VMamba 安装教程(无需更改base环境中的cuda版本且可加速)
- Windows下 Mamba2及高版本 causal_conv1d 安装参考本人博客:Windows 下Mamba2 环境安装问题记录及解决方法(causal_conv1d=1.4.0)
- Windows 下 Mamba / Vim / Vmamba 环境安装终极版参考本人博客:Windows 下Mamba2 / Vim / Vmamba 环境安装问题记录及解决方法终极版(无需绕过triton)
- (GPU算力12.0版本)Windows 下 Mamba / Vim / Vmamba 环境配置教程 参考本人博客:Windows 下 Mamba / Vim / Vmamba 环境配置安装教程(适用于5070,5080,5070Ti等GTX 50系显卡)
安装教程及安装包索引
不知道如何入手请先阅读新手索引:Linux / Windows 下 Mamba / Vim / Vmamba 安装教程及安装包索引
本系列教程已接入ima知识库,欢迎在ima小程序里进行提问!(如问题无法解决,安装问题 / 资源售后 / 论文合作想法请+文末或个人简介vx)
目录
- 导航
- 安装教程导航
- 安装教程及安装包索引
- 前言
- 问题描述
- 原因分析:
- Linux下解决方法
- 1. 利用Docker
- 2. 从源码编译
- 3. 利用官方的 whl 文件
- 出现的问题
- 1. CDUA版本不识别
- 2. pip install 之后卡住不动
- 3. 安装后调用时出现`xxx-linux-gnu.so undefined symbol`报错
- 4. 出现 `incompatible function arguments`
- 5. 出现 `unexpected keyword argument 'bimamba_type'`
- 6. 出现 `cannot import name 'packaging' `
- 7. 出现 `no kernel image is available`
前言
由于本人第一篇博客Mamba 环境安装踩坑问题汇总及解决方法(初版) Linux和Windows的问题夹杂,不易查询,重新整理在Linux下所有安装过程中可能出现的问题。
问题描述
直接 pip 安装或者下载工程文件再setup,出现了以下报错但不限于:
Building wheel for causal-conv1d (setup.py) ... error
error: command '/usr/bin/gcc' failed with exit code 1
RuntimeError: Error compiling objects for extension
ERROR: Could not build wheels for causal-conv1d, which is required to install pyproject.toml-based projects
Connection timed out> [end of output]
ModuleNotFoundError: No module named 'packaging'
FileNotFoundError: [Errno 2] No such file or directory: '/usr/local/cuda/bin/nvcc'
error: subprocess-exited-with-error
原因分析:
大部分原因是CUDA版本不匹配,有部分是网络原因。
Linux下解决方法
1. 利用Docker
使用网友配置好的Docker环境,参考:解决causal_conv1d和mamba_ssm无法安装 -> 直接使用Mamba基础环境docker镜像。
DockHub仓库地址:https://hub.docker.com/repository/docker/kom4cr0/cuda11.7-pytorch1.13-mamba1.1.1/general
代码:docker pull kom4cr0/cuda11.7-pytorch1.13-mamba1.1.1:1.1.1
2. 从源码编译
直接下载工程文件,再setup。参考步骤为:
git clone https://github.com/Dao-AILab/causal-conv1d.git
cd causal-conv1d
git checkout v1.1.1 # 用你想要的版本
CAUSAL_CONV1D_FORCE_BUILD=TRUE pip install .
cd ..
git clone https://github.com/state-spaces/mamba.git
cd mamba
git checkout v1.1.1 # 用你想要的版本
pip install . # 方式一,下载whl安装,两种方式选择一个即可
MAMBA_FORCE_BUILD=TRUE pip install . # 方式二,强制在本地编译安装,Win 下无法识别此命令
从源码编译经常容易出现错误,大部分都是 CUDA C++ 相关的问题,不同的设备环境不一样,报错也是千差万别,具体解决方法可以类似 Vmamba 安装教程(无需更改base环境中的cuda版本)。
3. 利用官方的 whl 文件
受博文 “flash-attention踩坑:使用conda管理CUDA”启发,合理调整安装顺序,先安装CUDA,并且安装cuda-nvcc,正确的安装步骤如下:
conda create -n your_env_name python=3.10.13
conda activate your_env_name
conda install cudatoolkit==11.8 -c nvidia
# 魔法版
pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 --index-url https://download.pytorch.org/whl/cu118
# 国内版-上交镜像
pip install torch==2.1.1+cu118 torchvision==0.16.1+cu118 torchaudio==2.1.1+cu118 -f https://mirror.sjtu.edu.cn/pytorch-wheels/torch_stable.html
# 国内版-阿里镜像
pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 -f https://mirrors.aliyun.com/pytorch-wheels/cu118
conda install -c "nvidia/label/cuda-11.8.0" cuda-nvcc
conda install packaging
pip install causal-conv1d==1.1.1 # 版本号根据实际情况选择,或者不指定直接安装最新
pip install mamba-ssm==1.1.3.post1 # 版本号根据实际情况选择,1.1 和 1.2 实测有函数不兼容,不设定默认装最新版本
一般通过以上步骤即可顺利安装,版本大家自己自由调整,cuda>=11.7。
注意,截止到20250401,官方whl的最高算力仅支持7.0-9.0,GPU 算力12.0(50系列,解决方法见Windows 下 Mamba / Vim / Vmamba 环境配置安装教程(适用于5070,5080,5070Ti等GTX 50系显卡))或者GPU算力 6.0 (1080系列,解决方法见后文no kernel image is available
)均没有对应的whl,此时应从源码编译。
出现的问题
1. CDUA版本不识别
不少小伙伴在装完 cuda-nvcc
以后,安装 causal-conv1d
时还是会显示CUDA版本不对的错误,这是由于环境中还可能有CUDA_HOME
(Linux)变量指定到错误的位置,此时需要检查:
nvcc -V
python -c "import torch.utils.cpp_extension; print(torch.utils.cpp_extension.CUDA_HOME)"
确保其输出的是正确的版本或位置。尤其是要保证第二句命令输出的位置是正确的。
在 Linux 下,如果第二句命令输出位置是base环境的,使用 which nvcc
获取虚拟环境正确的路径,然后在 .bashrc
里面设置成这个位置 export CUDA_HOME='....'
,source ~/.bashrc
激活配置,然后再继续安装过程。
2. pip install 之后卡住不动
在Linux下卡住不动是因为它在下载对应的 *.whl
文件,需要科学上网,可以等它下载失败输出正确的网址,然后手动下载再pip install 这个 whl 文件。可以直接下载whl安装
在我的配置下面:
causal_conv1d 下载链接为:https://github.com/Dao-AILab/causal-conv1d/releases/download/v1.1.1/causal_conv1d-1.1.1+cu118torch2.1cxx11abiFALSE-cp310-cp310-linux_x86_64.whl
mamba_ssm 下载链接为:https://github.com/state-spaces/mamba/releases/download/v1.1.3.post1/mamba_ssm-1.1.3.post1+cu118torch2.1cxx11abiFALSE-cp310-cp310-linux_x86_64.whl
然后直接 pip install xxxx.whl
进行安装。
3. 安装后调用时出现xxx-linux-gnu.so undefined symbol
报错
有的小伙伴报错,譬如 ImportError xxxx selective_scan_cuda.cpython-xxx-linux-gnu.so undefined symbol
(可以用编译好的文件直接替换,selective-scan-cuda-linux-gnu.so)或者 ImportError xxxx causal_conv1d_cuda.cpython-xxx-linux-gnu.so undefined symbol
(可以用编译好的文件直接替换,causal-conv1d-cuda.cpython-310-x86-64-linux-gnu.so)。
出现 .so undefined symbol
一般是有的因为 CUDA 版本不匹配造成的,参考本博客 20240418更新-关于CDUA版本
。譬如在虚拟环境中 which nvcc
调用的是虚拟环境的 cuda,但是 python -c "import torch.utils.cpp_extension; print(torch.utils.cpp_extension.CUDA_HOME)"
输出的位置确是base 环境的 usr/local/cuda
。
也有可能在下 whl 时,whl 和环境没匹配上(python 版本,torch版本以及cuda版本),还有譬如 cxx11abiFALSE
和 cxx11abiTRUE
的区别,即 GLIBCXX_USE_CXX11_ABI
的值,挨个检测这些的版本。这里给出获得 GLIBCXX_USE_CXX11_ABI
值的方法 (参考博客:[教程] Linux系统Anaconda平台下基于conda配置Mamba_ssm环境):
python -c 'import torch; print(torch._C._GLIBCXX_USE_CXX11_ABI); print(torch.compiled_with_cxx11_abi())'
一般情况下,这两个值应该是一致的,如果输出为 TRUE,则应下载
causal_conv1d-1.1.1+cu118torch2.1cxx11abiTRUE-cp310-cp310-linux_x86_64.whl
和
mamba_ssm-1.1.3.post1+cu118torch2.1cxx11abiTRUE-cp310-cp310-linux_x86_64.whl
,
如果输出为 FALSE,则应下载
causal_conv1d-1.1.1+cu118torch2.1cxx11abiFALSE-cp310-cp310-linux_x86_64.whl
和
mamba_ssm-1.1.3.post1+cu118torch2.1cxx11abiFALSE-cp310-cp310-linux_x86_64.whl
,
需要和环境一一对应(版本号大家按自己需要)。
4. 出现 incompatible function arguments
在用 pip install mamba-ssm
安装完 mamba-ssm
发现原来正常运行的代码出现以下报错:
File "/home/xxx/.conda/envs/mamba/lib/python3.10/site-packages/mamba_ssm/ops/selective_scan_interface.py", line 187, in forward
conv1d_out = causal_conv1d_cuda.causal_conv1d_fwd(
TypeError: causal_conv1d_fwd(): incompatible function arguments. The following argument types are supported:
1. (arg0: torch.Tensor, arg1: torch.Tensor, arg2: Optional[torch.Tensor], arg3: Optional[torch.Tensor], arg4: bool) -> torch.Tensor
Invoked with: tensor(
[-4.9056e-40, -4.9057e-40, -4.9074e-40, -4.9078e-40]], device='cuda:0',
requires_grad=True), Parameter containing:
tensor([ 0.0322, -0.1139, 0.0770, ..., -0.0320, -0.1266, -0.1096],
device='cuda:0', requires_grad=True), None, None, None, True
经过检查发现是 mamba-ssm
版本的问题,报错的版本号为 1.2.0.post1
,即 pip install mamba-ssm
安装的是最新版本,与之前的函数存在部分不兼容,而之前正常运行版本为 1.1.3.post1
。
5. 出现 unexpected keyword argument 'bimamba_type'
有小伙伴在跑 Vision Mamba
时遭遇以下报错(Linux):
TypeError: Mamba.__init__() got an unexpected keyword argument 'bimamba_type'
因为 Vision Mamba
修改了 Mamba
的源代码,从 Mamba
官方途径安装的包中是没有这个函数的,所以需要先卸载原版Mamba
,再从 Vision Mamba
代码里的Mamba 源码手动安装,而不是从 Mamba
官方途径安装。不过实测也可以直接进行文件替换,用 Vision Mamba
的selective_scan_interface.py 替换 selective_scan_interface.py,替换 causal_conv1d_interface.py
和 mamba_simple.py
。
6. 出现 cannot import name 'packaging'
最近有小伙伴在安装时出现以下报错:ImportError: cannot import name 'packaging' from 'pkg_resources
,原因是 setuptools
版本太高,一般是70.0.0,需要降级,直接 pip install setuptools==68.2.2
即可。
7. 出现 no kernel image is available
正常安装出现报错:
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.
这个问题在本人博客(VMamba 安装教程(无需更改base环境中的cuda版本))已经提到过,是因为GPU算力的问题。causal-conv1d 、 mamba-ssm 以及 vmamba 均暂时不支持算力为6.1及以下的设备,解决方法见这个博客,需要重新从源码进行编译,不能下载官方的whl。