Linux下安装mamba-ssm踩过的坑
起初的原因是,想要跑一个用到了mamba-ssm的项目,故尝试在wsl中配置mamba-ssm库。提示需要pip install mamba-ssm
后报错频繁,遇到了许多问题。查阅了很多blog和issue,安装了很多次环境,仿佛已经对注意事项倒背如流,但是就是无法解决最后的selective_scan_cuda.cpython-310-x86_64-linux-gnu.so: undefined symbol: ZN3c107Warning……
安装mamba-ssm
原本,安装mamba-ssm是非常简单的:
1 | pip install mamba-ssm |
但是主要有两个难点:
- 文件巨大,下载缓慢,以为是卡死
- 对python、CUDA、torch、numpy都有要求
更换Python版本
首先我直接在之前用过的环境中
1 | pip install mamba-ssm |
报错
1 | NameError: name 'bare_metal_version' is not defined |
查询后发现,mamba-ssm 目前对 Python 3.12 支持不佳,同时windows中配置nvcc似乎比linux要更麻烦点。所以就选择在wsl中配置该环境。
之后我选择了Python 3.11。
创建新环境
这里我选择python=3.11
1 | conda create -n MAMBA_SSM python=3.11 |
安装torch
这里我选择torch=2.4.1
。
详细列表可参见Previous PyTorch Versions
1 | pip install torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1 --index-url https://download.pytorch.org/whl/cu124 |
可以通过python -c "import torch; print(torch.__version__); print(torch.version.cuda)"
来检测当前torch版本。如果输出:
1 | 2.4.1+cu124 |
加速安装mamba_ssm
解决了上述问题后,如果在pip install mamba_ssm
的过程中遇到
1 | Guessing wheel URL: https://github.com/state-spaces/mamba/releases/download/v2.2.4/mamba_ssm-2.2.4+cu12torch2.7cxx11abiTRUE-cp310-cp310-linux_x86_64.whl |
说明可能遇到了网络波动问题(真网络波动吗?
可以去Releases · state-spaces/mamba手动下载,注意选择与python、torch、CUDA版本均匹配的wheel文件。比如我是python=3.11.11,torch=2.4.1+cu124,CUDA=12.8
,则下载mamba_ssm-2.2.2+cu122torch2.4cxx11abiFALSE-cp311-cp311-linux_x86_64.whl
。(注:由于我选择的是2.2.2旧版本,所以需要在Release v2.2.2 · state-spaces/mamba中寻找)
传输到wsl中。
如果是子用户,可能还需要修改权限:
1 | sudo chown xxx:xxx /home/xxx/mamba_ssm-2.2.2+cu122torch2.4cxx11abiFALSE-cp311-cp311-linux_x86_64.whl |
然后使用pip安装:
1 | pip install /home/xxx/mamba_ssm-2.2.2+cu122torch2.4cxx11abiFALSE-cp311-cp311-linux_x86_64.whl |
最后看到如:
1 | Successfully installed ... mamba-ssm-2.2.2 ... |
可知安装成功。
手动编译安装
如果上述仍然没有办法成功安装并运行,可选择手动编译。
可参考:
Issue #217 · state-spaces/mamba
安装gcc
如果遇到报错:
1 | raise RuntimeError("Failed to find C compiler. Please specify via CC environment variable.") |
这是triton在运行时需要用到C编译器,如gcc,但系统没有找到可用的C编译器。
我是ubuntu系统。故我需要输入:
1 | sudo apt update |
会安装 gcc、g++ 等常用编译工具。
然后输入:
1 | gcc --version |
会显示版本号,如:
1 | gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 |
则说明安装正常。
后记
其实,上文的种种版本,我尝试过了无数次组合。
最终,在友人的鼓励下,翻了很多issue,我最终选择重新创建一个环境,并且按照这条评论的版本,全部重装了一边。这次,一次性成功!
最后一次修改文章的各个版本号了,不改了。
参考文献
Windows和Linux系统上的Mamba_ssm环境配置_mamba-ssm安装-CSDN博客
但是其实上面这条blog基本没用上。反复装了无数种排列组合后,conda新开了个环境,采用9527MY这位同志的版本组合,一次性成功了。