Linux 下 Mamba 环境安装踩坑问题汇总(重置版)

ops/2025/1/1 11:17:04/

导航

安装教程导航

  • Mamba 及 Vim 安装问题参看本人博客:Mamba 环境安装踩坑问题汇总及解决方法(初版)
  • Linux 下Mamba 及 Vim 安装问题参看本人博客:Mamba 环境安装踩坑问题汇总及解决方法(重置版)
  • Windows 下 Mamba 的安装参看本人博客:Window 下Mamba 环境安装踩坑问题汇总及解决方法 (无需绕过selective_scan_cuda)
  • 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)

目录

  • 导航
    • 安装教程导航
  • 前言
  • 环境安装
  • 出现的问题
    • 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下所有安装过程中可能出现的问题。

环境安装

正确的安装步骤如下:

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/cu118conda install -c "nvidia/label/cuda-11.8.0" cuda-nvcc
conda install packagingpip install causal-conv1d==1.1.1  # 版本号根据实际情况选择,或者不指定直接安装最新
pip install mamba-ssm==1.1.3.post1  # 版本号根据实际情况选择,1.1 和 1.2 实测有函数不兼容,不设定默认装最新版本

一般通过以上步骤即可顺利安装,版本大家自己自由调整,cuda>=11.7。

出现的问题

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 进行安装。

linuxgnuso_undefined_symbol_56">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版本),还有譬如 cxx11abiFALSEcxx11abiTRUE 的区别,即 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 forwardconv1d_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.TensorInvoked 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

mamba_type_91">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.pymamba_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。


http://www.ppmy.cn/ops/146046.html

相关文章

【SpringMVC】Bean 加载控制

在实际开发中,SpringMVC 负责扫描和加载 Controller 层的 Bean 对象,而业务层和数据层等其他模块的 Bean 则由 Spring 框架负责扫描和加载。那么,如何控制 Spring 仅加载除了 Controller 层之外的其他 Bean 呢?为了解决这个问题&a…

人工智能与物联网:从智慧家居到智能城市的未来蓝图

引言:未来已来,智能化的世界 想象一下,一个早晨,智能闹钟根据你的睡眠状态自动调整叫醒时间,咖啡机早已备好热腾腾的咖啡,窗帘缓缓拉开,迎接清晨的阳光。这不是科幻小说中的场景,而是…

upload-labs关卡记录3

同理,我们先上传一个一句话木马进行尝试,发现页面会刷新,于是看是白名单还是黑名单 看到提示:不允许上传.asp,.aspx,.php,.jsp后缀文件!说明这是黑名单的类型。这里我们发现在限制里面,并没有说不能上传.ht…

neo4j修改文字字体大小

网上找了半天全是在说圆圈大小的,甚至连neo4j教程也是,其实要改文字大小的话,改style才行。 1.查看样式 :style2.修改样式 以下是示例 :style node {font-size: 16px; /* 修改字体大小为16px,可以根据需要调整 */ }relations…

C#运动控制系统:雷赛控制卡实用完整例子 C#雷赛开发快速入门 C#雷赛运动控制系统实战例子 C#快速开发雷赛控制卡

雷赛控制技术 DMC系列运动控制卡是一款新型的 PCI/PCIe 总线运动控制卡。可以控制多个步进电机或数字式伺服电机;适合于多轴点位运动、插补运动、轨迹规划、手轮控制、编码器位置检测、IO 控制、位置比较、位置锁存等功能的应用。 DMC3000 系列卡的运动控制函数库功…

rust 的 2015、2018、2021 这三个 edition

Rust Edition: 从2015到2021的演进之路 - 让语言更优雅地成长 2015 Edition:扎根基础,构筑安全之城 2015 Edition 作为 Rust 1.0 的起点,确立了这门语言独特的"城市规划理念"。它不仅奠定了 Rust 标志性的内存安全机制,…

hhdb客户端介绍(64)

功能模块实现 连接管理功能模块 技术实现细节 前端技术: 采用基于 Qt 的界面开发框架,利用其丰富的 UI 组件库构建连接管理窗口。例如,使用 QLineEdit 组件来实现服务器地址、端口号、用户名和密码等信息的输入框,通过 QPushB…

全自动PPT转视频解决方案:PPT + TTS + 自动化处理

一、概述 本文介绍如何使用Python实现PPT自动转换为视频的完整流程,包括PPT处理、文本提取、语音合成和视频生成,全程无需人工干预。 二、所需环境和库 pip install python-pptx pip install azure-cognitiveservices-speech pip install moviepy pip…