README.md 5.93 KB
Newer Older
zhaoying1's avatar
zhaoying1 committed
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
# ChatGLM2-6B

## 论文
`GLM: General Language Model Pretraining with Autoregressive Blank Infilling`
- [https://arxiv.org/abs/2103.10360](https://arxiv.org/abs/2103.10360)

## 模型结构
ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本。ChatGLM2-6B同样采用Transformer模型结构:

<div align="center">
<img src="ptuning/media/transformers.jpg" width="300" height="400">
</div>

以下是ChatGLM2-6B的主要网络参数配置:


| 模型名称 | 隐含层维度 | 层数 | 头数 | 词表大小 | 位置编码 | 最大长 |
| -------- | -------- | -------- | -------- | -------- | -------- | -------- | 
|ChatGLM-6B | 4,096 | 28 | 32 | 65024 |  RoPE | 32768 |


## 算法原理
模型基于 [General Language Model (GLM)](https://github.com/THUDM/GLM) 架构,GLM是一种基于Transformer的语言模型,以自回归空白填充为训练目标,同时具备自回归和自编码能力。

<div align="center">
<img src="ptuning/media/GLM.png" width="550" height="200">
</div>


## 环境配置

### Docker(方式一)
推荐使用docker方式运行,提供拉取的docker镜像:
```
shantf's avatar
shantf committed
35
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.1-py3.10
zhaoying1's avatar
zhaoying1 committed
36
37
38
39
```

进入docker,安装docker中没有的依赖:
```
shantf's avatar
shantf committed
40
docker run -dit --network=host --name=chatglm --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 -v /opt/hyhal:/opt/hyhal:ro --ulimit memlock=-1:-1 image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.1-py3.10
zhaoying1's avatar
zhaoying1 committed
41
42
docker exec -it chatglm /bin/bash
pip install transformers==4.28.0 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
silencealiang's avatar
silencealiang committed
43
pip install accelerate sentencepiece mdtex2html gradio rouge_chinese nltk jieba datasets==2.20.0 protobuf peft==0.5.0 pydantic==1.10.9 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
zhaoying1's avatar
zhaoying1 committed
44
45
46
```
### Dockerfile(方式二)
```
zhaoying1's avatar
zhaoying1 committed
47
docker build -t chatglm2:latest .
shantf's avatar
shantf committed
48
docker run -dit --network=host --name=chatglm2 --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 -v /opt/hyhal:/opt/hyhal:ro --ulimit stack=-1:-1 --ulimit memlock=-1:-1 chatglm2:latest
zhaoying1's avatar
zhaoying1 committed
49
docker exec -it chatglm2 /bin/bash
zhaoying1's avatar
zhaoying1 committed
50
51
52
53
54
```

### Conda(方法三)
1. 创建conda虚拟环境:
```
shantf's avatar
shantf committed
55
conda create -n chatglm python=3.10
zhaoying1's avatar
zhaoying1 committed
56
57
```

chenzk's avatar
chenzk committed
58
2. 关于本项目DCU显卡所需的工具包、深度学习库等均可从[光合](https://developer.sourcefind.cn/tool/)开发者社区下载安装。
shantf's avatar
shantf committed
59
60
61
- DTK 24.04.1
- Pytorch 2.1.0
- Deepspeed 0.12.3
zhaoying1's avatar
zhaoying1 committed
62
63
64
65
66
67
68
69
70
71
72

    Tips:以上dtk驱动、python、deepspeed等工具版本需要严格一一对应。

3. 其它依赖库参照requirements.txt安装:
```
pip install -r requirements.txt
```

## 数据集
本仓库以 [ADGEN](https://aclanthology.org/D19-1321.pdf) (广告生成) 数据集为例介绍代码的使用方法,该数据集任务为根据输入(content)生成一段广告词(summary),以下为下载地址:
- [Google Drive](https://drive.google.com/file/d/13_vf0xRTQsyneRKdD1bZIr93vBGOczrk/view?usp=sharing) 或者 [Tsinghua Cloud](https://cloud.tsinghua.edu.cn/f/b3f119a008264b1cabd1/?dl=1)
luopl's avatar
luopl committed
73
74
75

数据集SCNet快速下载链接[AdvertiseGen](http://113.200.138.88:18080/aidatasets/project-dependency/advertisegen)

zhaoying1's avatar
zhaoying1 committed
76
77
78
79
80
81
下载处理好的 ADGEN 数据集,将解压后的AdvertiseGen目录放到 [ptuning](./ptuning)本目录下。数据集目录结构如下:
```
 ── AdvertiseGen
    │   ├── dev.json
    │   └── train.json
```
zhaoying1's avatar
zhaoying1 committed
82
### 模型下载
zhaoying1's avatar
zhaoying1 committed
83
84
85
86
87
88
89
90
91
92
93
94
95
96
Hugging Face模型下载地址:
[ChatGLM2-6B](https://huggingface.co/THUDM/chatglm2-6b)

## 训练

### P-tuning v2 微调训练
本仓库实现了对于ChatGLM-6B模型基于[P-Tuning v2](https://github.com/THUDM/P-tuning-v2)的微调。P-Tuning v2是由清华大学提出的一种高效参数微调方法。

#### 单机多卡训练
```
    cd ptuning
    bash ptuning_train.sh
```
注意:请根据自己的需求配置其中的模型路径、数据集路径、batchsize、学习率等参数;
shantf's avatar
shantf committed
97
98
如果需要更改指定的显卡编号,可以在ptuning_train.sh脚本中使用--include=localhost,替换CUDA_VISIBLE_DEVICES。
比如使用4,5,6,7号卡,则将CUDA_VISIBLE_DEVICES=0,1,2,3删除,在deepspeed后面增加--include=localhost:4,5,6,7。
zhaoying1's avatar
zhaoying1 committed
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
146
147
148
149
150

#### 推理测评
在 P-tuning v2 训练时模型只保存 PrefixEncoder 部分的参数,所以在推理时需要同时加载原 ChatGLM-6B 模型以及 PrefixEncoder 的权重,可直接运行一下命令:
```
    cd ptuning
    bash evaluate_ptuning.sh
```


### Finetune全参数微调

#### 单机多卡训练
```
    cd ptuning
    bash ft_train.sh
```
注意:请根据自己的需求配置其中的模型路径、数据集路径、batchsize、学习率等参数;

#### 集群训练
```
    cd ptuning/multi_node
    bash run_train.sh
```
注意:请根据自己的需求配置其中的模型路径、数据集路径、batchsize、学习率等参数;


#### 推理测评
```
    cd ptuning
    bash evaluate_finetune.sh
```


### LoRA 微调训练
#### 单机多卡训练
```
    cd ptuning/lora
    bash lora_train.sh
```
#### LoRA推理
```
    python infer_lora.py
```



## 推理
运行如下命令:

    python cli_demo.py

程序会在命令行中进行交互式的对话,在命令行中输入指示并回车即可生成回复,输入 clear 可以清空对话历史,输入 stop 终止程序。
zhaoying1's avatar
zhaoying1 committed
151
152


dcuai's avatar
dcuai committed
153
## Result
zhaoying1's avatar
zhaoying1 committed
154
155
156
157
158
- 推理效果如下:
<div align="center">
<img src="./ptuning/media/cli.png" width="650" height="100">
</div>

dcuai's avatar
dcuai committed
159
### 精度
zhaoying1's avatar
zhaoying1 committed
160

zhaoying1's avatar
zhaoying1 committed
161
162
163
164
165
166


## 应用场景

### 算法类别

zhaoying1's avatar
zhaoying1 committed
167
`对话问答`
zhaoying1's avatar
zhaoying1 committed
168
169
170

### 热点应用行业

zhaoying1's avatar
zhaoying1 committed
171
`医疗,教育,科研,金融`
zhaoying1's avatar
zhaoying1 committed
172
173
174

## 源码仓库及问题反馈

chenzk's avatar
chenzk committed
175
- https://developer.sourcefind.cn/codes/modelzoo/chatglm2-6b_pytorch
zhaoying1's avatar
zhaoying1 committed
176
177
178
179
180
181

## 参考

- [THUDM/ChatGLM2-6B](https://github.com/THUDM/ChatGLM2-6B/tree/main)
- [zero_nlp](https://github.com/yuanzhoulvpi2017/zero_nlp/tree/main)