README.md 5.29 KB
Newer Older
chenzk's avatar
v1.0  
chenzk committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# MiniCPM
2B小钢炮碾压Mistral-7B,消费级显卡可训练,超过或持平大部分7B规模模型,超越部分10B以上的模型,主体语言模型MiniCPM-2B仅有24亿(2.4B)的非词嵌入参数量, 总计2.7B参数量,整体性能超越 Llama2-13B、MPT-30B、Falcon-40B 等模型,以下步骤适于finetune及其推理。
## 论文
`未发表论文`

## 模型结构
[`minicpm`](./model/modeling_minicpm.py)基于原始transformer decoder结构进行魔改而成,细节请见代码,先对文本进行分词,并将每个词转换为词向量表示,然后通过多组attention和全连接层结构FeedForward提取特征,最后采用全连接层结构MLP改变输入张量的形状获得生成结果,为了进一步提供预测的准确率加入了强化学习DPO进行人类偏好对齐。

## 算法原理
[`minicpm`](./model/modeling_minicpm.py)算法主要将转换成向量的分词用qkv自相关和全连接层提取特征,然后利用全连接层输出监督训练结果,本算法进行大量细节上的魔改组合,具体算法原理可参考下图原始transformer模型结构右侧decoder部分进行初步理解。
<div align=center>
    <img src="./doc/transformer.png"/>
</div>

## 环境配置
```
chenzk's avatar
v1.0.2  
chenzk committed
17
mv minicpm_pytorch MiniCPM # 去框架名后缀
chenzk's avatar
v1.0  
chenzk committed
18
19
20
21
```

### Docker(方法一)
```
dcuai's avatar
dcuai committed
22
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.1-py3.10
dcuai's avatar
dcuai committed
23
# <your IMAGE ID>为以上拉取的docker的镜像ID替换
dcuai's avatar
dcuai committed
24
docker run -it --shm-size=32G -v $PWD/MiniCPM:/home/MiniCPM -v /opt/hyhal:/opt/hyhal --network=host --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name minicpm <your IMAGE ID> bash
chenzk's avatar
v1.0.2  
chenzk committed
25
26
cd /home/MiniCPM
pip install -r finetune/requirements.txt # finetune/requirements.txt
chenzk's avatar
v1.0  
chenzk committed
27
28
29
30
31
```
### Dockerfile(方法二)
```
cd MiniCPM/docker
docker build --no-cache -t minicpm:latest .
dcuai's avatar
dcuai committed
32
docker run --shm-size=32G --name minicpm -v /opt/hyhal:/opt/hyhal --network=host --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video -v $PWD/../../MiniCPM:/home/MiniCPM -it minicpm bash
chenzk's avatar
v1.0  
chenzk committed
33
34
35
36
# 若遇到Dockerfile启动的方式安装环境需要长时间等待,可注释掉里面的pip安装,启动容器后再安装python库:pip install -r requirements.txt。
```
### Anaconda(方法三)
1、关于本项目DCU显卡所需的特殊深度学习库可从光合开发者社区下载安装:
chenzk's avatar
chenzk committed
37
- https://developer.sourcefind.cn/tool/
chenzk's avatar
v1.0  
chenzk committed
38
```
dcuai's avatar
dcuai committed
39
40
DTK驱动:dtk24.04.1
python:python3.10
chenzk's avatar
v1.0  
chenzk committed
41
42
43
torch:2.1.0
torchvision:0.16.0
triton:2.1.0
dcuai's avatar
dcuai committed
44
apex:1.1.0
chenzk's avatar
v1.0  
chenzk committed
45
46
deepspeed:0.12.3
flash_attn:2.0.4
dcuai's avatar
dcuai committed
47
xformers:0.0.25
chenzk's avatar
v1.0  
chenzk committed
48
49
50
51
52
```
`Tips:以上dtk驱动、python、torch等DCU相关工具版本需要严格一一对应。`

2、其它非特殊库参照requirements.txt安装
```
chenzk's avatar
v1.0.2  
chenzk committed
53
pip install -r finetune/requirements.txt # finetune/requirements.txt
chenzk's avatar
v1.0  
chenzk committed
54
55
56
57
```

## 数据集
`AdvertiseGen`
mashun1's avatar
update  
mashun1 committed
58

chenzk's avatar
chenzk committed
59
[原始链接](https://cloud.tsinghua.edu.cn/f/b3f119a008264b1cabd1/?dl=1)
chenzk's avatar
v1.0  
chenzk committed
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75

```
# 校验文件完整性
md5sum data/AdvertiseGen.tar.gz 
# 解压数据集
tar xvf data/AdvertiseGen.tar.gz
```
数据预处理脚本脚本为:[`convert_data.py`](./convert_data.py),数据目录结构如下:
```
data/AdvertiseGenChatML
    ├── train.json
    └── dev.json
```
`更多资料可参考源项目的README_origin.md`

## 训练
chenzk's avatar
chenzk committed
76
finetune所需预训练权重下载地址:[modelscope](https://modelscope.cn/models/OpenBMB/miniCPM-bf16)
chenzk's avatar
v1.0  
chenzk committed
77

dcuai's avatar
dcuai committed
78
本步骤说明的预训练权重采用`miniCPM-bf16`,请下载后放入目录checkpoint下面:checkpoint/
chenzk's avatar
v1.0  
chenzk committed
79
80
81
82
83
84
85
86
87
88
89
90
91
92
### 单机单卡(LoRA finetune)
```
cd MiniCPM
bash finetune/lora_finetune.sh # LoRA finetune,显存占用10619MiB。
# 受限于模型/数据规模,模型可能出现幻觉性问题,若仅仅采用LoRA finetune幻觉性问题较为严重。
```
### 单机多卡(全参数finetune)
```
bash finetune/sft_finetune.sh # 全参数finetune,显存占用30245MiB。
```
更多资料可参考源项目的[`finetune`](./finetune/README.md)


## 推理
chenzk's avatar
v2.0  
chenzk committed
93
94

方法一:pytorch推理
chenzk's avatar
v1.0  
chenzk committed
95
96
97
98
99
```
python infer.py
# 若采用官方默认权重推理:代码里设置path = 'checkpoint/miniCPM-bf16'
```

chenzk's avatar
v2.0  
chenzk committed
100
101
方法二:vllm推理(更快)

dcuai's avatar
dcuai committed
102
1、vllm对环境有特殊要求,需要安装以下版本的库才可用,所需版本位于仓库中:
chenzk's avatar
v2.0  
chenzk committed
103
```
dcuai's avatar
dcuai committed
104
105
pip install vllm-0.5.0+das.opt1.34e37fc.dtk24041-cp310-cp310-linux_x86_64.whl
pip install lmslim-0.1.0+das.dtk24041-cp310-cp310-linux_x86_64.whl
chenzk's avatar
v2.0  
chenzk committed
106
107
108
109
```
2、模型推理
```
cd MiniCPM
dcuai's avatar
dcuai committed
110
python infer_vllm.py 
chenzk's avatar
v2.0  
chenzk committed
111
112
```

chenzk's avatar
v1.0  
chenzk committed
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
## result
```
#问题
山东省最高的山是哪座山, 它比黄山高还是矮?差距多少?
#生成答案
山东省最高的山是泰山,海拔1545米。
相对于黄山(海拔1864米),泰山海拔较低,相差约319米。
```
### 精度
测试数据(LoRA finetune):[`AdvertiseGen`](./data/AdvertiseGenChatML/dev.json),推理框架:pytorch。

|  device   | train_loss |
|:---------:|:----------:|
| DCU Z100L |   5.1066   |
| GPU V100S |   5.1052   |

## 应用场景
### 算法类别
`对话问答`
### 热点应用行业
`制造,广媒,金融,能源,医疗,家居,教育`
## 源码仓库及问题反馈
chenzk's avatar
chenzk committed
135
- http://developer.sourcefind.cn/codes/modelzoo/minicpm_pytorch.git
chenzk's avatar
v1.0  
chenzk committed
136
137
138
139
140
## 参考资料
- https://github.com/OpenBMB/MiniCPM.git
- https://shengdinghu.notion.site/MiniCPM-c805a17c5c8046398914e47f0542095a
- https://hf-mirror.com/ #Huggingface镜像官网下载教程
- https://hf-mirror.com/datasets #Huggingface镜像数据地址