时间背景: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,
)