README.md 6.45 KB
Newer Older
dcuai's avatar
dcuai committed
1
# FinGPT-glm
wanglch's avatar
wanglch committed
2
## 论文
dcuai's avatar
dcuai committed
3
- [FinGPT: Open-Source Financial Large Language Models](https://arxiv.org/abs/2306.06031)
wanglch's avatar
wanglch committed
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
## 模型结构
GLM是一个开放的双语(中英)双向密集模型,使用通用语言模型(GLM)算法进行预训练。GLM是一种基于Transformer的语言模型,以自回归空白填充为训练目标。

<div align=center>
    <img src="./figs/transformer.jpg"/>
</div>

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

<div align=center>
    <img src="./figs/GLM.png"/>
</div>

## 环境配置
### Docker(方法一)

```
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu22.04-dtk23.10.1-py310 

docker run -it -v /path/your_code_data/:/path/your_code_data/ -v /opt/hyhal/:/opt/hyhal/:ro --shm-size=64G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name fingpt <your imageID> bash

dcuai's avatar
dcuai committed
26
cd /path/your_code_data/
wanglch's avatar
wanglch committed
27
28
29
30
31
32
33
34

pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

pip install deepspeed-0.12.3+gitfe61783.abi0.dtk2310.torch2.1.0a0-cp310-cp310-manylinux2014_x86_64.whl
```
### Dockerfile(方法二)

```
dcuai's avatar
dcuai committed
35
cd /path/your_code_data/docker
wanglch's avatar
wanglch committed
36
37
38
39
40
41
42
43

docker build --no-cache -t fingpt:latest .

docker run --shm-size=64G --name fingpt -v /opt/hyhal:/opt/hyhal:ro --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video -v /path/your_code_data/:/path/your_code_data/ -it fingpt bash

pip install deepspeed-0.12.3+gitfe61783.abi0.dtk2310.torch2.1.0a0-cp310-cp310-manylinux2014_x86_64.whl
```
### Anaconda(方法三)
dcuai's avatar
dcuai committed
44
45
46
关于本项目DCU显卡所需的特殊深度学习库可从光合开发者社区下载安装:
https://developer.hpccube.com/tool/

wanglch's avatar
wanglch committed
47
48
49
50
```
DTK驱动:dtk23.10
python:python3.10
torch: 2.1.0
dcuai's avatar
dcuai committed
51
52
torchvision: 0.16.0
apex: 1.1.0
wanglch's avatar
wanglch committed
53
54
55
56
57
58
deepspped: 0.12.3
```
`Tips:以上dtk驱动、python、paddle等DCU相关工具版本需要严格一一对应`

其它非深度学习库参照requirements.txt安装:
```
dcuai's avatar
dcuai committed
59
cd fingpt-glm_pytorch
wanglch's avatar
wanglch committed
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

pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple

```
## 数据集

- [huggingface数据集下载地址] <https://huggingface.co/FinGPT> 网站提供12中不同任务的数据集用于训练

需要训练数据转换为必要的json格式,数据格式为:
```
  {
    "instruction": "描述原子的结构。",
    "input": "",
    "output": "原子是物质的基本单位,它由三种基本粒子组成:质子、中子和电子。质子和中子形成原子核,位于原子中心,核外的电子围绕着原子核运动。\n\n原子结构具有层次性。原子核中,质子带正电,中子不带电(中性)。原子核非常小且致密,占据了原子总质量的绝大部分。电子带负电,通常围绕核运动,形成若干层次,称为壳层或电子层。电子数量与质子数量相等,使原子呈电中性。\n\n电子在每个壳层中都呈规律分布,并且不同壳层所能容纳的电子数也不同。在最里面的壳层一般只能容纳2个电子,其次一层最多可容纳8个电子,再往外的壳层可容纳的电子数逐层递增。\n\n原子核主要受到两种相互作用力的影响:强力和电磁力。强力的作用范围非常小,主要限制在原子核内,具有极强的吸引作用,使核子(质子和中子)紧密结合在一起。电磁力的作用范围较大,主要通过核外的电子与原子核相互作用,发挥作用。\n\n这就是原子的基本结构。原子内部结构复杂多样,不同元素的原子核中质子、中子数量不同,核外电子排布分布也不同,形成了丰富多彩的化学世界。"
  },
```

可以使用**data_process.py**进行数据处理

```
python data_process.py
```

项目中已提供用于试验训练的迷你数据集,训练数据目录结构如下,用于正常训练的完整数据集请按此目录结构进行制备:
```
 ── dataset
    │   ├── dataset_new
    │             ├── data-00000-of-00001.arrow
    │             ├── dataset_info.json
    │             └── state.json
    │   └── twitter-financial-news-sentiment
    │             ├── sent_dataset_meta.txt
    │             ├── sent_train.csv
    │             └── sent_valid.csv
    │   └── dataset_new.json
    │   └── dataset_new.jsonl         
    │                        
```
## 训练

dcuai's avatar
dcuai committed
100
根据实际情况在脚本中修改权重相关路径
wanglch's avatar
wanglch committed
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
### 单机多卡
```
bash multi_dcu_train.sh
```

### 单机单卡
```
bash single_dcu_train.sh
```
## 推理

**注:[FinGPT预训练模型权重下载地址](https://www.modelscope.cn/models/Wangluochao/FinGPT_ChatGLM2-6B/files)直接下载模型文件至新建文件夹'/FinGPT/FinGPT_mt_chatglm2-6b-merged'路径下进行推理。**
```
python inference_FinGPT.py
```
## result

wanglch's avatar
wanglch committed
118
### 交互式推理
wanglch's avatar
wanglch committed
119
<div align=center>
wanglch's avatar
wanglch committed
120
    <img src="./figs/single_task_cn.png"/>
wanglch's avatar
wanglch committed
121
122
123
</div>

### 精度
wanglch's avatar
wanglch committed
124
测试数据:[twitter-financial-news-sentiment](./dataset/dataset_new.jsonl),使用的加速卡:V100S/K100。
wanglch's avatar
wanglch committed
125
126
127

根据测试结果情况填写表格:
根据测试结果情况填写表格:
wanglch's avatar
wanglch committed
128
| device | train_loss | train_runtime |eval_los |eval_runtime |
wanglch's avatar
wanglch committed
129
130
131
132
133
134
135
136
| :------: | :------: | :------: | :------: |:------: |
| V100s |  0.371248 | 4445.348 | 0.06542 | 30.5495 |
| K100 | 0.371148 | 4018.4874 | 0.06536 | 53.1593 |
## 应用场景
### 算法类别
`对话问答`

### 热点应用行业
wanglch's avatar
wanglch committed
137
`金融,教育,政府,科研`
wanglch's avatar
wanglch committed
138
139
140
141
142
143
144
145
146
147

## 预训练权重
- [modelscope预训练模型下载地址] <https://www.modelscope.cn/models/Wangluochao/FinGPT_ChatGLM2-6B/files>
  
  可下载带有lora后缀的预训练权重,使用本人编写的**merge_model.py**文件进行模型合并。
- [huggingface预训练模型及数据集下载地址](https://huggingface.co/FinGPT)

- [FinGPT_ChatGLM2-6B预训练模型下载地址](https://www.modelscope.cn/models/Wangluochao/FinGPT_ChatGLM2-6B/files)

## 源码仓库及问题反馈
dcuai's avatar
dcuai committed
148
- https://developer.hpccube.com/codes/modelzoo/fingpt-glm_pytorch
wanglch's avatar
wanglch committed
149
150
151
152
153
154
155
156


## 参考资料
- [https://github.com/AI4Finance-Foundation/FinGPT](https://github.com/AI4Finance-Foundation/FinGPT)
- [https://github.com/AI4Finance-Foundation/FinGPT/blob/master/FinGPT_Training_LoRA_with_ChatGLM2_6B_for_Beginners.ipynb](https://github.com/AI4Finance-Foundation/FinGPT/blob/master/FinGPT_Training_LoRA_with_ChatGLM2_6B_for_Beginners.ipynb)