最详细的mamba讲解及环境配置(包含踩坑心得)

Mamba: Linear-Time Sequence Modeling with Selective State Spaces

1. 作者介绍

2. 以往的模型

3. Mamba中使用的结构

4. 文章整体框架

a. State Space Models(SSM)

b. Sequences with Structured State Spaces(S4)

S4比较SSM有三点升级

  1. 离散化SSM
  2. 循环/卷积表示
  3. 基于HiPPO处理长序列
ⅰ. 离散数据的连续化:基于零阶保持技术做连续化并采样

参考大佬博客:博客地址

  1. 首先,每次收到离散信号时,我们都会保留其值,直到收到新的离散信号,如此操作导致的结果就是创建了 SSM 可以使用的连续信号
  2. 保持该值的时间由一个新的可学习参数表示,称为步长(siz)——

    ,它代表输入的阶段性保持(resolution)
  3. 有了连续的输入信号后,便可以生成连续的输出,并且仅根据输入的时间步长对值进行采样

这些采样值就是我们的离散输出,且可以针对A、B按如下方式做零阶保持(做了零阶保持的在对应变量上面加了个横杠)

最终使我们能够从连续 SSM 转变为离散SSM,使得不再是函数到函数x(t)y(t),而是序列到序列xy,所以你看到,矩阵

现在表示模型的离散参数,且这里使用

,而不是

来表示离散的时间步长

ⅱ. 循环结构表示:方便快速推理

在每个时间步,都会涉及到隐藏状态的更新(比如

取决于

的共同作用结果,然后通过

预测输出

)

然后可以这样展开(其中,

始终是

的共同作用之下更新的)

ⅲ. 卷积结构表示:方便并行训练

在经典的图像识别任务中,我们用过滤器(即卷积核kernels)来导出聚合特征,而SSM也可以表示成卷积的形式

由于mamba处理的是文本而不是图像,因此我们需要一维视角

而用来表示这个“过滤器”的内核源自 SSM 公式

ⅳ. 长距离依赖问题的解决之道——HiPPO

HiPPO: Recurrent Memory with Optimal Polynomial Projections

c. Mamba的Motivation

Parallel Scan

d. Mamba的三大创新(有选择处理信息 + 硬件感知算法 + 更简单的SSM架构)

ⅰ. GPU memory hierarchy

ⅱ. Kernal fusion

ⅲ. Recomputation

e. Mamba的结构

vmamba(mamba)环境配置以及踩坑

注意:

  1. mamba暂时只支持linux系统(windows的ssm的包还没发,时间2024.4.22)
  2. mamba配置和vmamba之差一个包 ss2d的包(底下介绍vmamba安装的同时会介绍mamba)
  3. 安装时,需合理的科学上网
  4. 如想快速安装请下滑至最底下寻找完整步骤

vmamba仓库的地址:GitHub - MzeroMiko/VMamba: VMamba: Visual State Space Models,code is based on mamba

mamba仓库的地址:GitHub - state-spaces/mamba

步骤

1.克隆仓库

git clone GitHub - MzeroMiko/VMamba: VMamba: Visual State Space Models,code is based on mamba

cd VMamba

2.创建环境

conda create -n vmamba python=3.8

conda activate vmamba

3.安装依赖

pip install -r requirements.txt

cd kernels/selective_scan && pip install .#直接安装这一步会报错先装完第4步再安装

4.安装cuda(重要‼️不安装会报错)

最实用的cuda安装技巧(转载自csdn)

我这里安装在环境中的

cuda版本为12.1(如果不知道自己环境中的cuda版本,可以conda list下查看nvidia-nvtx-cu12)

torch版本为2.2

python版本为3.8

最大的坑在于需要在外面也安装cuda版本需要与vmamba环境中的版本一致,因为在环境中装的cuda是不完整的(如果想要查看是否装有cuda,请输入指令nvcc -V),

  • 安装前需要查看自己的显卡驱动(输入nvidia-smi),也可以去nvidia官网查看安装cuda所需要的最低驱动,如果低于cuda要求的最低版本参考博客

  • 安装cuda上nvidia官网(需科学上网)
  • 我这里安装的是cuda12.1

wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run

sudo sh cuda_12.1.0_530.30.02_linux.run

  • 最后需要更新cuda的路径

vim ~/.bashrc

#插入

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-12.1/lib64

export PATH=$PATH:/usr/local/cuda-12.1/bin

export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-12.1

#保存退出

:wq!

#重启一下

source ~/.bashrc

5.安装到这一步,恭喜你跳过了一个大坑🎉🎉 安装ssm所需要的cuda环境,接下来就要安装

下面给出官方网址:Releases · state-spaces/mamba · GitHub

因为直接pip install mamba-ssm 会一直卡在setup那一步一直不动(因为这里的pip会直接调用github上面给的仓库,没法直接访问就一直卡着)所以就需要自己去上面那个github上找whl

对于vmamba而言:只需要安装mamba-ssmv1.2.0.post1这一个安装包就行了,所以这里给出我安装的whl所对应的网址:链接

对于mamba而言:需要安装mamba-ssmcausal-conv1d

完整的流程

conda create -n vmamba python=3.10

conda activate vmamba

conda install cudatoolkit==11.8 -c nvidia  #这里使用11.8版本的cuda

pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 --index-url https://download.pytorch.org/whl/cu118

conda install -c "nvidia/label/cuda-11.8.0" cuda-nvcc

conda install packaging

下载mamba_ssmcausal_conv1d

下载完whl文件

pip install mamba_ssm-1.1.1+cu118torch2.1cxx11abiFALSE-cp310-cp310-linux_x86_64.whl

pip install  causal_conv1d-1.1.3+cu118torch2.1cxx11abiFALSE-cp310-cp310-linux_x86_64.whl

参考:博客地址

  • 24
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
Nginx是一个高性能的HTTP和反向代理服务器。它可以处理大量的并发连接,而且在处理静态文件时,它的效率非常高。Nginx的配置非常灵活,可以通过配置文件来控制其行为。下面是对Nginx详细配置的讲解。 1. 配置文件的路径 Nginx的配置文件位于/etc/nginx/nginx.conf。在这个文件中,可以设置全局的配置,包括http、server和location等。 2. 配置文件的结构 Nginx的配置文件采用了块状结构。每个块都以一个左花括号“{”开始,以一个右花括号“}”结束。块中包含了一些指令,每个指令都以一个分号“;”结束。指令和块之间可以使用空格、制表符或换行符隔开。 3. 全局配置 在Nginx的配置文件中,可以设置一些全局配置,如: worker_processes 2; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; 上面的配置指定了Nginx启动时使用的工作进程数量、错误日志文件的路径和进程ID文件的路径。 4. http配置 在Nginx的配置文件中,可以设置http块,包括一些http相关的配置,如: http { include /etc/nginx/mime.types; server_names_hash_bucket_size 64; access_log /var/log/nginx/access.log; server { listen 80; server_name example.com; location / { root /var/www/example.com; index index.html; } } } 上面的配置指定了mime.types文件的路径、服务器名的哈希桶的大小、访问日志文件的路径和一个server块。serve块中指定了监听的端口、服务器名和一个location块。location块中指定了请求的URL和返回的文件路径。 5. server配置 在Nginx的配置文件中,可以设置server块,包括一些server相关的配置,如: server { listen 80; server_name example.com; location / { root /var/www/example.com; index index.html; } } 上面的配置指定了监听的端口、服务器名和一个location块。location块中指定了请求的URL和返回的文件路径。 6. location配置 在Nginx的配置文件中,可以设置location块,包括一些location相关的配置,如: location / { root /var/www/example.com; index index.html; } 上面的配置指定了请求的URL和返回的文件路径。 7. 反向代理配置 在Nginx的配置文件中,可以设置反向代理服务器,如: server { listen 80; server_name example.com; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } 上面的配置指定了监听的端口、服务器名和一个location块。location块中指定了请求的URL和反向代理服务器的地址,同时还设置了Host和X-Real-IP头部信息。 总结: 以上是对Nginx详细配置的讲解,包括了全局配置、http配置、server配置、location配置和反向代理配置等。Nginx的配置非常灵活,可以根据实际需求进行配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值