# MAMBA

## 论文

Mamba: Linear-Time Sequence Modeling with Selective State Spaces

https://arxiv.org/abs/2312.00752

## 模型结构

![图片1](图片1.png)

## 算法原理

![图片3](图片3.jpg)

![图片2](图片2.jpg)

```
	原始的SSM通过A B C H矩阵的变化得到y，但是由于不同的输入X都对应相同的A B C H矩阵，因此MAMBA模型对x进行处理得到不同的A' B' C' H'矩阵来作为mamba模块
```

## 环境配置

### Docker(方式一)

推荐使用docker方式运行，提供[光源](https://www.sourcefind.cn/#/main-page)拉取的docker镜像：

```
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.1-py3.10

docker run -dit --network=host --name=mamba_pytorch --privileged --device=/dev/kfd --device=/dev/dri --ipc=host --shm-size=16G  --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -u root --ulimit stack=-1:-1 --ulimit memlock=-1:-1  image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.1-py3.10
docker exec -it mamba_pytorch /bin/bash
pip install -r requirements.txt  -i https://mirrors.aliyun.com/pypi/simple/  --trusted-host mirrors.aliyun.com
```

### Dockerfile(方式二)

```
docker build -t mamba:latest .
docker run -dit --network=host --name=mamba_pytorch --privileged --device=/dev/kfd --device=/dev/dri --ipc=host --shm-size=16G  --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -u root --ulimit stack=-1:-1 --ulimit memlock=-1:-1 qwen:latest
docker exec -it mamba_pytorch /bin/bash
pip install -r requirements.txt  -i https://mirrors.aliyun.com/pypi/simple/  --trusted-host mirrors.aliyun.com
```

### conda(方式三)

```
conda create -n mamba_pytorch python=3.10
pip install -r requirements.txt  -i https://mirrors.aliyun.com/pypi/simple/  --trusted-host mirrors.aliyun.com
```



### 注意

requirements.txt中@http之类的三方库主要依赖torch，可以从[光合开发者社区](https://cancon.hpccube.com:65024/4/main/)下载对应版本的依赖库

按照上述方式配置好环境以后还需要编译&安装依赖项

```
cd causal-conv1d-1.4.0
python setup.py  install 
cd ..
python setup.py  install 
```

## 数据集

这里直接通过lm_eval从hugginface下载可能有问题，可以先通过modelscope获得hub镜像源后再通过原始代码下载

```
from modelscope.msdatasets import MsDataset
ds =  MsDataset.load('modelscope/hellaswag', subset_name='default')
```

```
#数据集目录
hellaswag/
└── default
    └── 0.1.0
        ├── 362ac471216900f3f7c021863caac4eb7886347d0f76d90b6b4361f59ffea4d7
        │   ├── cache-081f361bf081c0bf.arrow
        │   ├── cache-5d43362a7601c065.arrow
        │   ├── dataset_info.json
        │   ├── hellaswag-test.arrow
        │   ├── hellaswag-train.arrow
        │   └── hellaswag-validation.arrow
        ├── 362ac471216900f3f7c021863caac4eb7886347d0f76d90b6b4361f59ffea4d7_builder.lock
        └── 362ac471216900f3f7c021863caac4eb7886347d0f76d90b6b4361f59ffea4d7.incomplete_info.lock
```



## 模型下载

[官方mamaba与mamba2模型](https://huggingface.co/state-spaces)

目前mamba已经支持transformer，可以只下载带-hf后缀的模型进行使用，如果使用非hf格式的模型，还需要下载EleutherAI/gpt-neox-20b模型的tokenizer才可以使用

## 训练

```
#官方这里只给了训练的样例，没有更具体的例子
./run.sh
#验证 这里使用hellaswag任务作为示例，可选有lambada_openai,hellaswag,piqa,arc_easy,arc_challenge,winogrande,openbookqa
./run-eval.sh
```

## 推理

```
#可以通过传递--promt参数来进行具体的问答，也可以传递--batch参数来进行批量推理
./inf.sh  其中--model-name为hugginface模型名或者本地模型路径
```

## result

![图片4](图片4.jpg)

## 精度

|                 eval                  |       acc       |    acc_norm     |
| :-----------------------------------: | :-------------: | :-------------: |
| 数据集hellaswag，参数 batch64 float16 | 0.3080 ± 0.0046 | 0.3525 ± 0.0048 |

![图片5](图片5.jpg)

## 应用场景

### 算法类别

`对话问答`

### 热点应用行业

`科研,教育,政府,金融`

## 源码仓库及问题反馈

https://developer.hpccube.com/codes/modelzoo/mamba_pytorch

## 参考资料

https://github.com/state-spaces/mamba/tree/main
