Skip to content

Commit 513e21d

Browse files
authored
adjust llm readme (#8672)
* fix readme * update readme * fix readme * fix readme
1 parent 04c2f2b commit 513e21d

File tree

2 files changed

+31
-30
lines changed

2 files changed

+31
-30
lines changed

llm/README.md

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,34 @@
11
## 🚣‍♂️ 飞桨大模型套件介绍 🚣
2-
飞桨大模型套件秉承了一站式体验、性能极致、生态兼容的设计理念,旨在提供业界主流大模型预训练、精调(含SFT、PEFT)、量化、推理等统一流程, 帮助开发者低成本、低门槛、快速实现大语言模型定制化
2+
飞桨大模型套件以一站式体验、极致性能和生态兼容性为设计理念,致力于为开发者提供业界主流的大模型预训练、精调(包含SFT、PEFT技术)、对齐、量化和推理等全方位服务。开发者能够以便捷、低成本的方式快速实现大语言模型的定制化需求
33

44
<div align="center">
5-
<img width="800" alt="llm" src="https://github.com/PaddlePaddle/PaddleNLP/assets/63761690/da10e972-260c-4925-bf49-1e0aefd2a65c">
5+
<img width="800" alt="llm" src="https://github.com/PaddlePaddle/PaddleNLP/assets/63761690/4e61647b-8d66-4870-ba45-77a57990523c">
66
</div>
77

88

99
## 💪🏼 大模型套件特色 💪🏼
1010

11-
- **飞桨4D并行分布式策略**。 PaddleNLP Trainer 封装支持飞桨4D并行配置(数据并行、张量并行、流水线并行、 分组参数切分并行),屏蔽多硬件编程复杂性,用户可以修改Trainer配置组合多种预训练或精调过程的分布式策略,充分组合大模型4D并行训练能力,能有效提升在多模型、多硬件下的训练性能
11+
- **飞桨4D并行分布式策略**。 PaddleNLP Trainer通过封装支持飞桨的4D并行配置,即数据并行、张量并行、流水线并行以及分组参数切分并行,从而简化了多硬件编程的复杂性。用户仅需通过修改Trainer的配置,就能灵活组合各种预训练或精调过程中的分布式策略,充分发挥大模型的4D并行训练能力,进而在多模型、多硬件环境下显著提升训练性能
1212

13-
- **高效精调策略**飞桨大模型套件提供SFT、PEFT等多种精调策略,搭载自研Zero Padding零填充优化策略有效减少训练数据中pad token的占比,提高模型训练效率。独创PEFT结合低比特和分布式并行策略,大幅降低大模型精调硬件门槛
13+
- **高效精调对齐策略**飞桨大模型套件提供了包括SFT、DPO、RLHF在内的多种精调对齐方法。套件中自研的Zero Padding零填充优化技术,有效降低了训练数据中无效填充标记(pad token)的比例,进一步增强了模型训练的效率。同时,独创的PEFT技术结合低比特和分布式并行方法,显著降低了进行大模型精调对齐的硬件要求
1414

15-
- **大模型无损量化**。大模型套件内置了PaddleSlim团队自研的自适应Shift-SmoothQuant的A8W8量化算法和业界主流GPTQ的W4量化算法,实现了主流大模型的无损量化,有效加速模型推理。
16-
17-
- **高性能推理**。大模型套件高性能推理模块内置动态插入和全环节算子融合策略,极大加快并行推理的速度。同时隐藏了底层实现的细节,实现了开箱即用高性能并行推理能力。
15+
- **大模型无损量化**。大模型套件预先集成了PaddleSlim LLM.PTQ量化算法,以及业界广泛采用的GPTQ和AWQ的W4量化方法,成功实现了对主流大模型的无损量化处理,显著加速了模型的推理速度。
1816

17+
- **高性能推理**。大模型套件的高性能推理模块内置了动态插入和全环节算子融合的高级策略,这极大地提升了并行推理的速度。同时,该模块隐藏了底层技术细节,为用户提供了开箱即用的高性能并行推理功能。
1918

2019
## 🛠️ 支持模型列表 🛠️
2120

22-
| Model | Pretrain | SFT | LoRA | Prefix Tuning | DPO | Quantization | Weight convert |
23-
|----------------------------------------|----------|-----|------|---------------|-----|--------------|----------------|
24-
| [LLaMA](./config/llama) ||||||||
25-
| [Qwen](./config/qwen) |||||| 🚧 ||
26-
| [Mixtral](./config/mixtral) ||||| 🚧 | 🚧 | 🚧 |
27-
| [Baichuan/Baichuan2](./config/llama) ||||||||
28-
| [ChatGLM-6B](./config/chatglm) ||||| 🚧 |||
29-
| [ChatGLM2/ChatGLM3](./config/chatglm2) ||||| 🚧 |||
30-
| [Bloom](./config/bloom) ||||| 🚧 |||
31-
| [GPT-3](./config/gpt-3) ||| 🚧 | 🚧 | 🚧 | 🚧 ||
32-
| [OPT](./config/opt) | 🚧 ||| 🚧 | 🚧 | 🚧 ||
21+
| Model | Pretrain | SFT | LoRA | Prefix Tuning | DPO | RLHF | Quantization | Torch convert |
22+
|----------------------------------------|----------|-----|------|---------------|-----|--------------|----------------|----------------|
23+
| [LLaMA](./config/llama) |||||| |||
24+
| [Qwen](./config/qwen) |||||| 🚧 | 🚧 ||
25+
| [Mixtral](./config/mixtral) ||||| 🚧 | 🚧 | 🚧 | 🚧 |
26+
| [Baichuan/Baichuan2](./config/llama) |||||| 🚧 |||
27+
| [ChatGLM-6B](./config/chatglm) ||||| 🚧 | 🚧 |||
28+
| [ChatGLM2/ChatGLM3](./config/chatglm2) ||||| 🚧 | 🚧 |||
29+
| [Bloom](./config/bloom) ||||| 🚧 | 🚧 | ||
30+
| [GPT-3](./config/gpt-3) ||| 🚧 | 🚧 | 🚧 | 🚧 | 🚧 ||
31+
| [OPT](./config/opt) | 🚧 ||| 🚧 | 🚧 | 🚧 | 🚧 ||
3332

3433
* ✅: Supported
3534
* 🚧: In Progress
@@ -39,7 +38,7 @@
3938
## 🚀 快速开始 🚀
4039

4140
### 1. 预训练
42-
PaddleNLP将飞桨4D并行策略加入到Trainer API中, 用户只需修改Trainer配置即可使用不同的分布式策略。目前工具链提供[LLaMA/LLaMA2](./config/llama)[GPT-3](./config/gpt-3)[Qwen](./config/qwen)[Baichuan/Baichuan2](./config/baichuan)[Mixtral](./config/mixtral) 等模型预训练功能,更多模型支持持续更新中。
41+
PaddleNLP将飞桨4D并行策略加入到Trainer API中, 用户只需修改Trainer配置即可使用不同的分布式策略。目前工具链提供[LLaMA/LLaMA2/LLaMA3](./config/llama)[GPT-3](./config/gpt-3)[Qwen](./config/qwen)[Baichuan/Baichuan2](./config/baichuan)[Mixtral](./config/mixtral) 等模型预训练功能,更多模型支持持续更新中。
4342

4443
<div align="center">
4544
<img width="500" alt="llm" src="https://github.com/PaddlePaddle/PaddleNLP/assets/37530985/a2f0261d-7f76-4faf-ae01-cc9d37d5fcc0">
@@ -152,8 +151,8 @@ python run_finetune.py ./config/llama/pt_argument.json
152151
更多大模型精调分布式使用文档、训练细节和效果请参见[大模型精调教程](./docs/finetune.md)
153152

154153
### 3. 对齐
155-
我们支持DPO等偏好对齐策略。DPO策略采用zero_padding策略,结合FlashMask策略,有效提升模型训练效率。
156-
154+
我们支持DPO、RLHF等偏好对齐策略。DPO策略采用zero_padding策略,结合FlashMask策略,有效提升模型训练效率。
155+
#### 3.1 DPO
157156
**数据准备**
158157

159158
我们支持的精调数据格式是每行包含一个字典的json文件,每个字典包含以下字段:
@@ -190,10 +189,12 @@ tar -zxvf ultrafeedback_binarized.tar.gz
190189
# DPO启动命令参考
191190
python -u -m paddle.distributed.launch --gpus "0,1,2,3,4,5,6,7" ./dpo/run_dpo.py ./config/llama/dpo_argument.json
192191
```
192+
#### 3.2 RLHF
193+
飞桨大模型套件提供了提供了基于强化学习 PPO 算法对 LLM 进行人类偏好对齐的代码及完整使用示例,支持**3D 分布式并行训练以及 rollout 阶段使用预测优化进行生成加速**。详细使用教程详见[RLHF文档](./docs/rlhf.md)
193194

194195
### 4. 量化
195196
大模型量化将16位、32位浮点数的模型参数或激活量化为4位或8位整数能够有效降低模型存储空间和计算资源需求,同时加速推理速度。工具链量化算法包含:
196-
- **PTQ**。PaddleSlim 团队自研的自适应Shift-SmoothQuant量化算法,在[SmoothQuant](https://arxiv.org/abs/2211.10438)[Outlier Suppression+](https://arxiv.org/abs/2304.09145)基础上
197+
- **PTQ**。PaddleSlim 团队自研的自适应LLM.PTQ量化算法,在[SmoothQuant](https://arxiv.org/abs/2211.10438)[Outlier Suppression+](https://arxiv.org/abs/2304.09145)基础上
197198
新增PieceWiseSearch参数搜索算法,对模型权重和激活分布进行调整,减少后续A8W8 PTQ量化损失。
198199

199200

llm/alignment/README.md renamed to llm/docs/rlhf.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Alignment
1+
# RLHF
22

33
提供了基于强化学习 PPO 算法对 LLM 进行人类偏好对齐的代码及完整使用示例,支持**3D 分布式并行训练以及 rollout 阶段使用预测优化进行生成加速**。其中 PPO 代码实现细节参考了 [PKU-Alignment/safe-rlhf](https://github.com/PKU-Alignment/safe-rlhf)(PKU Beaver) 中的 PPO 实现,支持reward normalization、pretraining loss等常用的 PPO 稳定训练策略;示例使用 PKU-Alignment/safe-rlhf 提供的部分数据集和模型。后续将持续完善扩展,支持更好效果、更低成本、更高性能、更大规模的 RLHF 能力。
44

@@ -7,7 +7,7 @@
77
项目整体组织结构如下:
88

99
```
10-
.
10+
./alignment
1111
├── ppo # PPO 训练相关目录
1212
│ ├── comm_utils.py # 通信相关工具py文件
1313
│ ├── data # 数据集相关目录
@@ -54,7 +54,7 @@
5454
PPO 训练包括 Supervised Fine-Tuning、Reward Model Fine-Tuning、RLHF 三个阶段(可见下文训练部分),会涉及到多个数据集,下面分别介绍并给出自定义数据的方法。
5555

5656
#### Supervised Fine-Tuning 数据
57-
[LLM 精调](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/llm#2-%E7%B2%BE%E8%B0%83),可以直接参考对应内容进行数据准备。
57+
[LLM 精调](finetune.md),可以直接参考对应内容进行数据准备。
5858

5959
#### Reward Model Fine-Tuning 数据
6060
Reward Model Fine-Tuning 阶段需要使用人类偏好数据。示例使用 PKU-Alignment/safe-rlhf 提供的 [PKU-Alignment/PKU-SafeRLHF-30K](https://huggingface.co/datasets/PKU-Alignment/PKU-SafeRLHF-30K) 数据集,下面是其中一条样本,这里使用其中的`prompt、response_0、response_1、better_response_id`字段来组织偏好数据(safe字段,该数据集将helpful 和 harmless 分开标注,示例这里使用其 helpful 标注)。
@@ -175,7 +175,7 @@ PPO 完整的训练过程包括以下 3 个阶段,如下图所示(来自[Dee
175175

176176
1. Supervised Fine-Tuning (SFT)
177177

178-
[LLM 精调](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/llm#2-%E7%B2%BE%E8%B0%83),可以直接参考对应内容进行训练并使用其产出模型。
178+
[LLM 精调](finetune.md),可以直接参考对应内容进行训练并使用其产出模型。
179179

180180
2. Reward Model Fine-Tuning
181181

@@ -186,7 +186,7 @@ cd rm
186186
python -u -m paddle.distributed.launch run_reward.py ../../config/llama/rm_argument.json
187187
```
188188

189-
`rm_argument.json` 中的绝大部分参数释义同[LLM 精调](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/llm#2-%E7%B2%BE%E8%B0%83),不再赘述;稍有区别的是 `train_datasets`/`eval_datasets` 分别使用数据集定义注册时的`NAME`属性给出训练和验证集。另外对于奖励模型训练有以下特殊参数配置及释义(使用 PKU-Alignment/PKU-SafeRLHF 中的默认值):
189+
`rm_argument.json` 中的绝大部分参数释义同[LLM 精调](finetune.md),不再赘述;稍有区别的是 `train_datasets`/`eval_datasets` 分别使用数据集定义注册时的`NAME`属性给出训练和验证集。另外对于奖励模型训练有以下特殊参数配置及释义(使用 PKU-Alignment/PKU-SafeRLHF 中的默认值):
190190

191191
- `normalize_score_during_training`:是否在训练过程中对奖励进行 normalize,默认为 `False`
192192
- `normalizer_type`:使用 normalizer 时计算 mean、var 的方式,可选`"RunningMeanStd", "ExponentialMovingAverage"`
@@ -204,7 +204,7 @@ cd ppo
204204
PYTHONPATH=../../ GLOG_minloglevel=2 python -u -m paddle.distributed.launch run_ppo.py ../../config/llama/ppo_argument.json
205205
```
206206

207-
`ppo_argument.json` 中的绝大部分参数释义同[LLM 精调](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/llm#2-%E7%B2%BE%E8%B0%83),不再赘述,重点给出以下参数配置及释义(使用 PKU-Alignment/PKU-SafeRLHF 中的默认值):
207+
`ppo_argument.json` 中的绝大部分参数释义同[LLM 精调](finetune.md),不再赘述,重点给出以下参数配置及释义(使用 PKU-Alignment/PKU-SafeRLHF 中的默认值):
208208

209209
- `train_datasets`:使用数据集定义注册时的`NAME`属性给出训练集。
210210
- `eval_datasets`:使用数据集定义注册时的`NAME`属性给出验证集。
@@ -225,7 +225,7 @@ PYTHONPATH=../../ GLOG_minloglevel=2 python -u -m paddle.distributed.launch run_
225225
- `clip_range_ratio`:将当前sequence的新概率与Experience Buffer中旧概率比值裁剪到`(1-clip_range_ratio, 1+clip_range_ratio)`范围(PPO-Clip)。
226226
- `ptx_coeff`: 预训练损失项 ptx-loss 的系数。
227227

228-
另外所有 [`TrainingArguments` 支持参数配置](https://paddlenlp.readthedocs.io/zh/latest/trainer.html#trainingarguments)将为 actor-model 和 critic-model 的训练复用(如`sharding_stage`),除单独提供了 `critic_learning_rate/critic_weight_decay/critic_lr_scheduler_type/critic_warmup_ratio/critic_recompute` 这些参数支持为 critic-model 训练单独指定相应配置。actor-model 和 critic-model 的 checkpoints 将分别保存在 `outpt_dir` 所指定目录的 policy 和 value 文件夹下。
228+
另外所有 [`TrainingArguments` 支持参数配置](https://paddlenlp.readthedocs.io/zh/latest/trainer.html#trainingarguments)将为 actor-model 和 critic-model 的训练复用(如`sharding_stage`),除单独提供了 `critic_learning_rate/critic_weight_decay/critic_lr_scheduler_type/critic_warmup_ratio/critic_recompute` 这些参数支持为 critic-model 训练单独指定相应配置。actor-model 和 critic-model 的 checkpoints 将分别保存在 `output_dir` 所指定目录的 policy 和 value 文件夹下。
229229

230230
此外为了支持更高性、更大规模的 RLHF 训练提供了以下特殊参数配置,可以按需使用:
231231
- `use_fusemt`:安装 paddlenlp_ops 后将在 rollout 生成时开启生成加速(开启流水线并行时不支持生成加速),通过此设置可以禁用生成加速。
@@ -239,7 +239,7 @@ PYTHONPATH=../../ GLOG_minloglevel=2 python -u -m paddle.distributed.launch run_
239239

240240
### 推理
241241

242-
训练完成后可以直接使用 `outpt_dir` 所指定目录中 policy 文件夹下的 checkpoints 按照[LLM 推理](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/llm#4-%E6%8E%A8%E7%90%86)部分的介绍来进行推理,请参考相应部分内容。
242+
训练完成后可以直接使用 `output_dir` 所指定目录中 policy 文件夹下的 checkpoints 按照[LLM 推理](inference.md)部分的介绍来进行推理,请参考相应部分内容。
243243

244244
## Acknowledge
245245

0 commit comments

Comments
 (0)