Skip to content

Commit 3272992

Browse files
authored
[llm]update LLM readme & add pp sft (#6709)
* update readme acoording to comments * add pp & delete unused files * tiny fix * not support ernie 3.5 * update gpt * delete unused pad * add support param * add opt * fix chatglm unitest
1 parent b071870 commit 3272992

34 files changed

+194
-2157
lines changed

llm/README.md

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,16 @@
3939
### 3.1 精调训练数据格式
4040

4141
为了方便用户测试,我们也提供示例数据集[广告生成数据集](https://bj.bcebos.com/paddlenlp/datasets/examples/AdvertiseGen.tar.gz),用户也可以仿照数据集的格式制作自己的数据集进行精调。我们支持的数据格式是每行包含一个字典,每个字典包含以下字段:
42+
4243
- `src` : `str, List(str)`, 模型的输入指令(instruction)、提示(prompt),模型应该执行的任务。
4344
- `tgt` : `str, List(str)`, 模型的输出。
4445

46+
样例数据:
47+
```
48+
{"src": "类型#裙*颜色#蓝色*风格#清新*图案#蝴蝶结", "tgt": "裙身处采用立体蝴蝶结装饰辅以蓝色条带点缀,令衣身造型饱满富有层次的同时为其注入一丝甜美气息。将女孩清新娇俏的一面衬托而出。"}
49+
...
50+
```
51+
4552
### 3.2 SFT
4653
SFT(Supervised Fine-Tuning)依托飞桨提出的[4D混合分布式并行](https://ai.baidu.com/forum/topic/show/987996)能力,支持使用Trainer API轻松切换数据并行(DP)、[张量并行(TP, Tensor Parallelism)](https://arxiv.org/abs/1909.08053)[流水线并行(PP, Pipeline Parallelism)](https://arxiv.org/abs/1811.06965)(目前仅支持Llama)等多种分布式训练策略。
4754

@@ -50,10 +57,13 @@ SFT(Supervised Fine-Tuning)依托飞桨提出的[4D混合分布式并行](https:
5057
<img src="https://ai.bdstatic.com/file/63F5EBB1E188457ABAFD311CFC1D8658" width=50% height=50%>
5158
</div>
5259

53-
5460
```
5561
# 张量并行分布式训练(常用)
62+
# 目前OPT不支持张量并行
5663
python -u -m paddle.distributed.launch --gpus "0,1,2,3" finetune_generation.py ./chatglm_v2/sft_argument.json
64+
65+
# 张量并行&流水线并行分布式训练(目前仅支持Llama)
66+
python -u -m paddle.distributed.launch --gpus "0,1,2,3" finetune_generation.py ./llama/sft_pp_argument.json
5767
```
5868

5969
### 3.3 LoRA
@@ -66,7 +76,7 @@ Transformer模型中包含许多Linear层需要进行密集的矩阵乘法计算
6676
</div>
6777

6878

69-
PaddleNLP LoRA API支持数据并行、张量并行等多种分布式训练策略,可以通过控制`tensor_parallel_degree` 调整并行训练策略。LoRA策略默认应用在所有Linear层,可拓展至**单机LoRA千亿模型**
79+
PaddleNLP LoRA API支持数据并行、张量并行等多种分布式训练策略,可以通过控制`tensor_parallel_degree` 调整并行训练策略。LoRA策略默认应用在所有Linear层,可拓展至**单机LoRA微调千亿模型**
7080

7181

7282
```
@@ -254,10 +264,11 @@ python -m paddle.distributed.launch --gpus "0,1,2,3,4,5,6,7" flask_server.py \
254264
## 6. 量化
255265

256266
****:量化后模型暂不支持推理,相关开源工作正在进行中,敬请期待。
257-
量化算法可以将模型输入和模型权重用更低比特数值表示,能够有效减少内存占用和计算开销。下面我们提供PTQ、GPTQ两种量化算法进行量化,更多技术细节详见[量化策略详细教程](https://github.com/PaddlePaddle/PaddleSlim/blob/develop/docs/zh_cn/tutorials/quant/advanced_quantization.md)
267+
量化算法可以将模型输入和模型权重用更低比特数值表示,能够有效减少内存占用和计算开销。下面我们提供PTQ、GPTQ两种量化算法结合**PaddleSlim自研策略**进行量化,更多技术细节详见[量化策略详细教程](https://github.com/PaddlePaddle/PaddleSlim/blob/develop/docs/zh_cn/tutorials/quant/advanced_quantization.md)
258268

259269
### 6.1 环境安装
260270
- PaddleSlim develop版本
271+
- PaddlePaddle develop版本
261272

262273
### 6.2 数据准备
263274

llm/bloom/README.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Bloom
2+
3+
## 1.模型介绍
4+
5+
6+
BLOOM是一种自回归大型语言模型(LLM),在大量文本数据上训练从而生生成目标文本,同时它能够支持46种语言和13种编程语言的文本交互。BLOOM 主要基于文本生成任务训练而成,可以很好的完成文本续写任务,此外 BloomZ 系列模型加入了 Instruction Tuning。
7+
8+
**支持模型权重:**
9+
| Model |
10+
|----------------------------------|
11+
| bigscience/bloom-560m |
12+
| bigscience/bloom-560m-bf16 |
13+
| bigscience/bloom-1b1/ |
14+
| bigscience/bloom-3b |
15+
| bigscience/bloom-7b1 |
16+
| bigscience/bloomz-560m/ |
17+
| bigscience/bloomz-1b1 |
18+
| bigscience/bloomz-3b |
19+
| bigscience/bloomz-7b1-mt |
20+
| bigscience/bloomz-7b1-p3 |
21+
| bigscience/bloomz-7b1 |

llm/chatglm/README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# ChatGLM
2+
3+
## 1. 模型介绍
4+
5+
ChatGLM-6B 是一个开源的、支持中英双语问答的对话语言模型,基于 [General Language Model (GLM)](https://arxiv.org/abs/2103.10360) 架构,具有 62 亿参数。ChatGLM-6B 使用了和 ChatGLM 相同的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答。
6+
7+
**支持模型权重:**
8+
9+
| Model |
10+
|----------------------------------|
11+
| THUDM/chatglm-6b |
12+
13+
## 2. 模型协议
14+
15+
ChatGLM-6B 模型的权重的使用需要遵循[License](../../paddlenlp/transformers/chatglm/LICENSE)

llm/chatglm_v2/README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# ChatGLM
2+
3+
## 1. 模型介绍
4+
5+
ChatGLM**2**-6B 是开源中英双语对话模型 [ChatGLM-6B](https://github.com/THUDM/ChatGLM-6B) 的第二代版本,在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础之上,ChatGLM**2**-6B 引入了[FlashAttention](https://github.com/HazyResearch/flash-attention)[Multi-Query Attention]等新特性。更详细的模型介绍见[ChatGLM2-6B GitHub](https://github.com/THUDM/ChatGLM2-6B)
6+
7+
**支持模型权重:**
8+
9+
| Model |
10+
|----------------------------------|
11+
| THUDM/chatglm2-6b |
12+
13+
## 2. 模型协议
14+
15+
16+
ChatGLM2-6B 模型的权重的使用需要遵循[License](../../paddlenlp/transformers/chatglm_v2/LICENSE)

llm/ernie-3.5-se/README.md

Lines changed: 9 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,8 @@
11
# ERNIE-3.5-SE
22

3-
**目录**
3+
## 1. 模型介绍
44

5-
- [1. 模型介绍](#0)
6-
- [2. 模型结构&训练策略](#1)
7-
- [3. 预训练](#2)
8-
- [4. 微调](#3)
9-
- [5. 预测](#4)
10-
- [6. 动转静](#5)
11-
12-
13-
<a name="0"></a>
14-
15-
## 模型介绍
16-
17-
ERNIE-3.5-SE 的代码开源主要包括模型组网、分布式预训练代码、微调以及预测服务。
18-
19-
20-
<a name="1"></a>
21-
22-
## 模型结构&训练策略
23-
24-
25-
* 模型结构:我们采用了Attention和FFN并行的Parallel Transformer的实现方式,将FFN和Attention层进行并行计算。通过这样的设计,我们可以把Attention和FFN需要的线形层计算进行算子融合,降低kernel调用以及通讯次数,提升并行训练的效率。并且我们发现第一层的FFN和最后一层的Attn作用不大,因此采用了“掐头去尾”策略,将底层的FFN的计算量挪到模型的顶层,在同FLOPs下效果和传统Transformer结构一致,但有更好的训练速度和吞吐。
5+
我们采用了Attention和FFN并行的Parallel Transformer的实现方式,将FFN和Attention层进行并行计算。通过这样的设计,我们可以把Attention和FFN需要的线形层计算进行算子融合,降低kernel调用以及通讯次数,提升并行训练的效率。并且我们发现第一层的FFN和最后一层的Attn作用不大,因此采用了“掐头去尾”策略,将底层的FFN的计算量挪到模型的顶层,在同FLOPs下效果和传统Transformer结构一致,但有更好的训练速度和吞吐。
266

277
<table>
288
<tr>
@@ -43,9 +23,7 @@ ERNIE-3.5-SE 的代码开源主要包括模型组网、分布式预训练代码
4323
* Sequence Length Warmup:通过动态调整前期训练的序列长度,提升模型的收敛效率。
4424

4525

46-
<a name="2"></a>
47-
48-
## 预训练
26+
## 2. 预训练
4927

5028
预训练数据制作参考[此处](../../model_zoo/ernie-1.0/preprocess/docs/OpenWebText2.md)
5129

@@ -114,13 +92,11 @@ python -u -m paddle.distributed.launch \
11492
4. `use_fused_ln` 需要安装[此目录](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/gpt-3/external_ops)下的自定义OP, `python setup.py install`。如果安装后仍然找不到算子,需要额外设置PYTHONPATH
11593
5. 当前脚本为sharding版本,需要4D并行训练(数据、sharding、张量、流水线并行)的用户,可另外调整相关参数。
11694

117-
<a name="3"></a>
11895

119-
## 微调
12096

121-
微调脚本具体可见 run_finetune.sh。
97+
## 3. 精调
12298

123-
### 多卡微调
99+
### SFT
124100
```shell
125101
python -m paddle.distributed.launch \
126102
--gpus "0,1,2,3,4,5,6,7" \
@@ -154,12 +130,9 @@ python -m paddle.distributed.launch \
154130
--sharding_parallel_degree 8
155131
```
156132

157-
### 单卡 LoRA 微调
133+
### LoRA
158134
```shell
159-
python -m paddle.distributed.launch \
160-
--gpus "0" \
161-
--log_dir "output_sft/$task_name""_log" \
162-
finetune_generation.py \
135+
python finetune_generation.py \
163136
--output_dir ./checkpoints/ \
164137
--per_device_train_batch_size 4 \
165138
--gradient_accumulation_steps 2 \
@@ -220,22 +193,11 @@ python -m paddle.distributed.launch \
220193
- `data_name`: 内置数据集名,定义数据集名必须同时定义数据集任务名
221194
- `dataset_path`: 自定义数据集路径。
222195

223-
<a name="4"></a>
224196

225-
## 预测
226-
227-
预测脚本具体可见 run_predict.sh。
197+
## 4. 动态图预测
228198

229199
```shell
230-
python -m paddle.distributed.launch --gpus "0" predict_generation.py \
200+
python predict_generation.py \
231201
--model_name_or_path <PATH_TO_CKPT> \
232202
--tokenizer_name_or_path ernie-tokenizer
233203
```
234-
235-
## 动转静
236-
237-
``` shell
238-
python export_generation_model.py \
239-
--model_path <PATH_TO_CKPT> \
240-
--output_path inference/ernie-3.5-se
241-
```

llm/ernie-3.5-se/export_generation_model.py

Lines changed: 0 additions & 129 deletions
This file was deleted.

0 commit comments

Comments
 (0)