README.md 5.18 KB
Newer Older
Rayyyyy's avatar
Rayyyyy 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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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
146
147
148
149
150
151
152
153
154
155
# Yuan2.0-M32
## 论文
`Yuan 2.0-M32: Mixture of Experts with Attention Router`
- https://arxiv.org/abs/2405.17976

## 模型结构
源2.0-M32模型运行时激活参数为37亿,M32在数学竞赛、基础数学、代码生成、综合知识能力、科学推理方面与LLaMA3-700亿不相上下。同时,源2.0-M32大幅提升了模型算力效率,在性能全面对标LLaMA3-700亿的同时,显著降低了在模型训练、微调和推理所需的算力开销,算力消耗仅为LLaMA3的1/19。
<div align=center>
    <img src="./doc/model.png"/>
</div>

## 算法原理
下图左边展示了Yuan2.0架构的MoE层缩放图,在Yuan 2.0中,MoE层取代了前馈层。下图右边展示了MOE层的结构。在Yuan2.0模型中,每个输入token将分配给32个专家中的2个(而在图中,这里以4个专家为例),MOE的输出是选定专家的加权总和,N是层数。

<div align=center>
    <img src="./doc/Attention Router.png" witdh=800 height=300/>
</div>

## 环境配置
-v 路径、docker_name和imageID根据实际情况修改

### Docker(方法一)
```bash
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-centos7.6-dtk24.04-py310
docker run -it --network=host --privileged=true --name=docker_name --device=/dev/kfd --device=/dev/dri --ipc=host --shm-size=32G --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -u root -v /path/your_code_data/:/path/your_code_data/ -v /opt/hyhal/:/opt/hyhal/:ro imageID /bin/bash

cd /your_code_path/yuan2.0-m32_pytorch
pip install -r requirements.txt
```

### Dockerfile(方法二)
```bash
cd ./docker
docker build --no-cache -t yuan2.0-m32:latest .

docker run -it --network=host --privileged=true --name=docker_name --device=/dev/kfd --device=/dev/dri --ipc=host --shm-size=32G --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -u root -v /path/your_code_data/:/path/your_code_data/ -v /opt/hyhal/:/opt/hyhal/:ro imageID /bin/bash

cd /your_code_path/yuan2.0-m32_pytorch
pip install -r requirements.txt
```

### Anaconda(方法三)
1、关于本项目DCU显卡所需的特殊深度学习库可从光合开发者社区下载安装: https://developer.hpccube.com/tool/

```bash
DTK软件栈:dtk24.04
python:python3.10
torch:2.1
apex: 1.1.0+0dd7f68.abi0.dtk2404.torch2.1
deepspeed: 0.12.3+gita724046.abi0.dtk2404.torch2.1.0
```

Tips:以上dtk软件栈、python、torch等DCU相关工具版本需要严格一一对应

2、其他非特殊库直接按照下面步骤进行安装

```bash
pip install apex-1.1.0+das1.0+0dd7f68.abi0.dtk2404.torch2.1-cp310-cp310-manylinux2014_x86_64.whl
pip install deepspeed-0.12.3+das1.0+gita724046.abi0.dtk2404.torch2.1.0-cp310-cp310-manylinux2014_x86_64.whl
pip install -r requirements.txt
```

## 数据集
### 准备数据集

数据预处理的脚本,参考[数据预处理说明文档](./docs/data_process.md).



数据集的目录结构如下:

```bash
├── datasets
│   ├── cnn_dm
│       ├── test.source
│       ├── test.target
│       ├── train.source
│       ├── train.target
│       ├── val.source
│       └── val.target
│   └── blank_yahoo
│       ├── blank
│       ├── test.txt
│       ├── train.txt
│       └── valid.txt
```

## 训练
1. 提供了用于预训练的文档和[example](./examples)的脚本,具体使用方法可以参考[预训练说明文档](./docs/pretrain.md)。这里以`Yuan-2.1B-M32`模型为例。

2. 预训练模型可参考[Yuan2.0-M32](https://github.com/IEIT-Yuan/Yuan2.0-M32)下的`Model Downloads`部分。

3. 开始训练之前,下列参数需要根据实际情况进行修改:
- `GPUS_PER_NODE` 修改为所需卡数
- `CHECKPOINT_PATH` 预训练模型地址
- `DATA_PATH` 训练数据地址
- `TOKENIZER_MODEL_PATH` tokenzier模型地址
- `TENSORBOARD_PATH`


特别地,如果dataset path如下所示:
```bash
/path/dataset.bin
```
则需要将`DATA_PATH`设置为:
```shell
#DATA_PATH='weight dataset_path'
DATA_PATH='1 /path/dataset'
```

4. 执行:
```bash
bash examples/pretrain_yuan2.0_moe_2x32B.sh
```

## 推理
1. 根据需求修改`--model_name_or_path`模型地址;

2. 添加环境变量
```bash
pip install -U huggingface_hub hf_transfer
export export HF_ENDPOINT=https://hf-mirror.com
```

3. 执行:
```bash
python inference.py --model_name_or_path THUDM/glm-10b
```
### Benchmarks 测试
提供了[**HumanEval**](./docs/eval_humaneval_cn.md)[**GSM8K**](./docs/eval_gsm8k_cn.md)[**MMLU**](./docs/eval_mmlu_cn.md)[**Math**](./docs/eval_math_cn.md)[**ARC-C**](./docs/eval_arc_cn.md) 的评估脚本,以方便大家复现我们的评测结果。

## result
<div align=center>
    <img src="./doc/result.png" width=1500 heigh=400/>
</div>

### 精度
测试数据:智源glm_trian_data数据,使用的加速卡:K100。
| device | dtype | params | acc |
| :------: | :------: | :------: | :------: |
| A100 | fp16 | bs=8, lr=1e-05 | 0.808 |
| K100 | fp16 | bs=8, lr=1e-05 | 0.804 |

## 应用场景
### 算法类别
多轮对话

### 热点应用行业
家居,教育,科研

## 源码仓库及问题反馈
- https://developer.hpccube.com/codes/modelzoo/yuan2.0-m32_pytorch

## 参考资料
- https://github.com/THUDM/GLM