50系显卡 安装mamba-ssm踩坑教程

205 阅读3分钟

时间背景:2025-11

用过50系的人都知道pytorch在25年上半年有多尴尬。50系(RTX 5080/5090/5070 Ti…)是新架构 Blackwell,CUDA 算力是 sm_120,PyTorch 稳定版对 sm_120 支持还在逐步完善。

很多帖子都在吐槽:

“NVIDIA GeForce RTX 5080 with CUDA capability sm_120 is not compatible with the current PyTorch installation…”

现成的 cu118 + 旧 PyTorch 根本没有对 sm_120 做好支持,因此导致大量的模型和框架没办法在50系显卡上运行,包括mamba-ssm

官方推荐的mamba-ssm方案是WSL+conda,我沿用了这个路线并且做出了修改,理论上windows也是类似的逻辑,两者的问题是一致的。

虽然现在已经有稳定版支持cu128的,但是鉴于我之前的环境都是在nightly/cu128 上运行的,为了避免新的问题出现,我依旧沿用的nightly/cu128,后续可以换成稳定的release版本

在我安装完毕pytorch 和 mamba-ssm后 运行test.py用来测试 发现大量报错

Traceback (most recent call last):   
File "/mnt/d/project/Python/E1011/test.py",
line 2, in <module>     import mamba_ssm   File "/home/leaves/temp/ENTER/envs/mamba/lib/python3.10/site-packages/mamba_ssm/__init__.py", 
line 3, in <module>     from mamba_ssm.ops.selective_scan_interface import selective_scan_fn, mamba_inner_fn   File "/home/leaves/temp/ENTER/envs/mamba/lib/python3.10/site-packages/mamba_ssm/ops/selective_scan_interface.py", 
line 20, in <module>     import selective_scan_cuda ImportError: /home/leaves/temp/ENTER/envs/mamba/lib/python3.10/site-packages/selective_scan_cuda.cpython-310-x86_64-linux-gnu.so: undefined symbol: _ZN3c104cuda29c10_cuda_check_implementationEiPKcS2_ib ERROR conda.cli.main_run:execute(127): conda run python /mnt/d/project/Python/E1011/test.py failed. (See above for error)

具体来说

这个 .so 在编译的时候,以为 PyTorch 里有一个叫 c10_cuda_check_implementation 的函数;

运行时真正加载到内存的 PyTorch 里,这个符号没有 / 名字不一样 / ABI 变了;

所以动态链接器一加载 .so 就崩了

github上有很多人提过这类issue,不幸的是官方目前还是没有修,因此只能自己手动编译代码来解决这个问题。

环境检查

首先运py代码

import torch
print("torch:", torch.__version__)
print("cuda available:", torch.cuda.is_available())

终端运行命令

nvcc --version
which nvcc

确保输出的

torch :......+cu128

cuda available: True

nvcc 路径类似 /usr/local/cuda-12.8/bin/nvcc

如果之前使用pip安装了mamba-ssm,那么要提前把它卸载掉

pip uninstall -y mamba-ssm causal-conv1d selective_scan_cuda selective_scan || true

从仓库下载 causal-conv1d,编译并且导入

cd ~
git clone https://github.com/Dao-AILab/causal-conv1d.git
cd causal-conv1d

cd 的路径可以自行处理

设置环境变量

这一步非常重要,源码中有一段是

if CUDA_HOME is not None:
    _, bare_metal_version = get_cuda_bare_metal_version(CUDA_HOME)
    ...
if bare_metal_version <= Version("12.9"):
    ...

如果这里不设置环境变量就会复现之前的错误

export CUDA_HOME=/usr/local/cuda-12.8
export PATH="$CUDA_HOME/bin:$PATH"
export LD_LIBRARY_PATH="$CUDA_HOME/lib64:${LD_LIBRARY_PATH:-}"

可以简单确认下

echo $CUDA_HOME
# 应该输出:/usr/local/cuda-12.8

然后就可以进行编译了

pip install --no-build-isolation --no-cache-dir -e .

从仓库下载 mamba,编译并且导入

cd ~
git clone https://github.com/state-spaces/mamba.git
cd mamba
pip install --no-build-isolation --no-cache-dir -e .

到这一步mamba就编译好了,但是我目前的版本会触发一个warning

Overriding a previously registered kernel for the same operator and the same dispatch key operator: DaoAILab::_causal_conv1d_fwd_cpp(...) dispatch key: ADInplaceOrView previous kernel: ... new kernel: ...

我试了几种方案都没办法解决这个问题,但是不影响正常使用,实在觉得碍眼就在代码层屏蔽掉吧

import warnings
warnings.filterwarnings(
    "ignore",
    message="Overriding a previously registered kernel for the same operator and the same dispatch key",
    category=UserWarning,
)