起初的原因是,想要跑一个用到了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是非常简单的:

pip install mamba-ssm

但是主要有两个难点:

  1. 文件巨大,下载缓慢,以为是卡死
  2. 对python、CUDA、torch、numpy都有要求

更换Python版本

首先我直接在之前用过的环境中

pip install mamba-ssm

报错

NameError: name 'bare_metal_version' is not defined
mamba_ssm was requested, but nvcc was not found. Are you sure your environment has nvcc available?

查询后发现,mamba-ssm 目前对 Python 3.12 支持不佳,同时windows中配置nvcc似乎比linux要更麻烦点。所以就选择在wsl中配置该环境。

之后我选择了Python 3.11。

创建新环境

这里我选择python=3.11

conda create -n MAMBA_SSM python=3.11
conda activate MAMBA_SSM

安装torch

这里我选择torch=2.4.1

详细列表可参见Previous PyTorch Versions

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版本。如果输出:

2.4.1+cu124
12.4

加速安装mamba_ssm

解决了上述问题后,如果在pip install mamba_ssm的过程中遇到

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
error: <urlopen error [Errno 110] Connection timed out>
ERROR: Failed building wheel for mamba_ssm

说明可能遇到了网络波动问题(真网络波动吗?

可以去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中。

如果是子用户,可能还需要修改权限:

sudo chown xxx:xxx /home/xxx/mamba_ssm-2.2.2+cu122torch2.4cxx11abiFALSE-cp311-cp311-linux_x86_64.whl

然后使用pip安装:

pip install /home/xxx/mamba_ssm-2.2.2+cu122torch2.4cxx11abiFALSE-cp311-cp311-linux_x86_64.whl

最后看到如:

Successfully installed ... mamba-ssm-2.2.2 ...

可知安装成功。

手动编译安装

如果上述仍然没有办法成功安装并运行,可选择手动编译。

可参考:

Issue #217 · state-spaces/mamba

安装gcc

如果遇到报错:

raise RuntimeError("Failed to find C compiler. Please specify via CC environment variable.")
RuntimeError: Failed to find C compiler. Please specify via CC environment variable.

这是triton在运行时需要用到C编译器,如gcc,但系统没有找到可用的C编译器。

我是ubuntu系统。故我需要输入:

sudo apt update
sudo apt install build-essential

会安装 gcc、g++ 等常用编译工具。

然后输入:

gcc --version

会显示版本号,如:

gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

则说明安装正常。

后记

其实,上文的种种版本,我尝试过了无数次组合。

最终,在友人的鼓励下,翻了很多issue,我最终选择重新创建一个环境,并且按照这条评论的版本,全部重装了一边。这次,一次性成功!

最后一次修改文章的各个版本号了,不改了。

参考文献

Windows和Linux系统上的Mamba_ssm环境配置_mamba-ssm安装-CSDN博客

但是其实上面这条blog基本没用上。反复装了无数种排列组合后,conda新开了个环境,采用9527MY这位同志的版本组合,一次性成功了。

Linux下安装mamba-ssm踩过的坑的更多相关文章

  1. Linux下安装opencv(踩坑记录帖)

    1.首先安装依赖项:sudo apt install build-essential sudo apt install build-essentialsudo apt install cmake gi ...

  2. Nginx入门篇-基础知识与linux下安装操作

    我们要深刻理解学习NG的原理与安装方法,要切合实际结合业务需求,应用场景进行灵活使用. 一.Nginx知识简述Nginx是一个高性能的HTTP服务器和反向代理服务器,也是一个 IMAP/POP3/SM ...

  3. Linux下安装 Posgresql 并设置基本参数

    在Linux下安装Postgresql有二进制格式安装和源码安装两种安装方式,这里用的是二进制格式安装.各个版本的Linux都内置了Postgresql,所以可直接通过命令行安装便可.本文用的是Cen ...

  4. Linux下安装Tomcat服务器和部署Web应用

    一.上传Tomcat服务器

  5. Linux下安装使用Solr

    Linux下安装使用Solr 1.首先下载Solr.mmseg4j分词包.tomcat并解压,这用google.百度都可以搜索得到下载地址. 2.因为要使用到中文分词,所以要设置编码,进入tomcat ...

  6. Linux下安装tar.gz类型的jdk,并配置环境变量

    近期因要学习一门技术,必须在Linux下运行,故开始学习如何使用Linux. 在安装jdk时出现了困难,环境变量配置不成功,花了一天时间才搞定,特分享出来,供大家参考. Linux下安装jdk,步骤如 ...

  7. Linux下安装和配置JDK与Tomcat(升级版)

    在这个版本 Linux下安装和配置JDK与Tomcat(入门版) 的基础上优化升级 1.下载相关软件 apache-tomcat-6.0.37.tar.gz jdk-6u25-linux-i586-r ...

  8. Linux下安装cmake

    cmake是一个跨平台的编译工具,特点是语句简单,编译高效,相对于原有的automake更为高效,接下来说明在Linux下安装cmake工具的过程 首先去cmake官网下载cmake安装包,下载界面网 ...

  9. linux下安装安装pcre-8.32

    linux下安装安装pcre-8.32 ./configure --prefix=/usr/local/pcre 出现以下错误 configure: error: You need a C++ com ...

  10. CentOS linux下安装和配置Apache+SVN(用浏览器http方式访问SVN目录)

    在CentOS linux下安装SVN,我们可以进行以下步骤: 第一步:安装CentOS Linux操作系统,并在CentOS安装进行的同时,自定义安装这一步,一定要勾选Subversion(在“开发 ...

随机推荐

  1. C语言 链表操作

    #include<stdio.h>#include<stdlib.h>struct node{    int data;    struct node *next;};int ...

  2. MySQL2022.3.2

    创建库 CREATE DATABASE STUDENT; 创建表 CREATE TABLE STU(SNO INT PRIMARY KEY,//主键SNM CHAR(2) NOT NULL,//不能为 ...

  3. 解密prompt系列50. RL用于优化Agent行为路径的一些思路

    OpenAI新推出的Deep Research功能,属实有些惊艳,也验证了去年的一些观点,之后的大模型工作流会呈现一些截然不同的形态,有敏捷型的例如语音端到端的及时对话,也会有异步长流程的复杂任务,去 ...

  4. Vulnhub-Source-1(CVE-2019-15107)

    一.靶机搭建 选择打开选项 选中下载的ova文件,然后导入选择一个存放路径即可 如果遇到不兼容的情况,可以打开.vmx修改,改为和虚拟机一个版本号 二.信息收集 官方信息 Name: Source: ...

  5. rust学习笔记(8)

    cargo cargo是一个用来帮助控制项目开发的工具 cargo.toml 这是一个用来管理项目的文件 首先是[package]部分 [package] name = "foo" ...

  6. nnUNet 使用方法

    首先明确分割任务. 其次明确研究方法和步骤. 再做好前期准备,如数据集的采集.标注以及其中的训练集/测试集划分. 其中的参考链接: (四:2020.07.28)nnUNet最舒服的训练教程(让我的奶奶 ...

  7. VRRP+BFD实验

    VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)的工作原理主要涉及多个路由器(或具备路由功能的设备)协同工作,通过VRRP报文和优先级机制来选举出一 ...

  8. Delphi Inputbox 输入时显示‘*’号

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  9. osmts:OERV之一站式管理测试脚本

      最近团队里面实习的小伙伴开发了一个新的项目,可以用来一键式运行各种测试脚本并且完成数据总结,我也尝试部署了一下,遇到了一些问题,接下来一起解析一下这个项目.   首先是获取osmts git cl ...

  10. [每日算法 - 华为机试] leetcode45 :跳跃游戏 II 「动态规划神器推荐」

    leetcode入口 45. 跳跃游戏 IIhttps://leetcode.cn/problems/jump-game-ii/ 题目描述 给定一个长度为 n 的 0 索引整数数组 nums.初始位置 ...