README.md 4.37 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# 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
```



### 注意

hepj's avatar
hepj committed
57
requirements-test.txt为较为完整的依赖版本,可以参考。@http之类的三方库主要依赖torch,可以从[光合开发者社区](https://cancon.hpccube.com:65024/4/main/)下载对应版本的依赖库
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145

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

```
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