|
1 | 1 | ## 🚣♂️ 飞桨大模型套件介绍 🚣
|
2 |
| -飞桨大模型套件秉承了一站式体验、性能极致、生态兼容的设计理念,旨在提供业界主流大模型预训练、精调(含SFT、PEFT)、量化、推理等统一流程, 帮助开发者低成本、低门槛、快速实现大语言模型定制化。 |
| 2 | +飞桨大模型套件以一站式体验、极致性能和生态兼容性为设计理念,致力于为开发者提供业界主流的大模型预训练、精调(包含SFT、PEFT技术)、对齐、量化和推理等全方位服务。开发者能够以便捷、低成本的方式快速实现大语言模型的定制化需求。 |
3 | 3 |
|
4 | 4 | <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"> |
6 | 6 | </div>
|
7 | 7 |
|
8 | 8 |
|
9 | 9 | ## 💪🏼 大模型套件特色 💪🏼
|
10 | 10 |
|
11 |
| -- **飞桨4D并行分布式策略**。 PaddleNLP Trainer 封装支持飞桨4D并行配置(数据并行、张量并行、流水线并行、 分组参数切分并行),屏蔽多硬件编程复杂性,用户可以修改Trainer配置组合多种预训练或精调过程的分布式策略,充分组合大模型4D并行训练能力,能有效提升在多模型、多硬件下的训练性能。 |
| 11 | +- **飞桨4D并行分布式策略**。 PaddleNLP Trainer通过封装支持飞桨的4D并行配置,即数据并行、张量并行、流水线并行以及分组参数切分并行,从而简化了多硬件编程的复杂性。用户仅需通过修改Trainer的配置,就能灵活组合各种预训练或精调过程中的分布式策略,充分发挥大模型的4D并行训练能力,进而在多模型、多硬件环境下显著提升训练性能。 |
12 | 12 |
|
13 |
| -- **高效精调策略**。飞桨大模型套件提供SFT、PEFT等多种精调策略,搭载自研Zero Padding零填充优化策略有效减少训练数据中pad token的占比,提高模型训练效率。独创PEFT结合低比特和分布式并行策略,大幅降低大模型精调硬件门槛。 |
| 13 | +- **高效精调对齐策略**。飞桨大模型套件提供了包括SFT、DPO、RLHF在内的多种精调对齐方法。套件中自研的Zero Padding零填充优化技术,有效降低了训练数据中无效填充标记(pad token)的比例,进一步增强了模型训练的效率。同时,独创的PEFT技术结合低比特和分布式并行方法,显著降低了进行大模型精调对齐的硬件要求。 |
14 | 14 |
|
15 |
| -- **大模型无损量化**。大模型套件内置了PaddleSlim团队自研的自适应Shift-SmoothQuant的A8W8量化算法和业界主流GPTQ的W4量化算法,实现了主流大模型的无损量化,有效加速模型推理。 |
16 |
| - |
17 |
| -- **高性能推理**。大模型套件高性能推理模块内置动态插入和全环节算子融合策略,极大加快并行推理的速度。同时隐藏了底层实现的细节,实现了开箱即用高性能并行推理能力。 |
| 15 | +- **大模型无损量化**。大模型套件预先集成了PaddleSlim LLM.PTQ量化算法,以及业界广泛采用的GPTQ和AWQ的W4量化方法,成功实现了对主流大模型的无损量化处理,显著加速了模型的推理速度。 |
18 | 16 |
|
| 17 | +- **高性能推理**。大模型套件的高性能推理模块内置了动态插入和全环节算子融合的高级策略,这极大地提升了并行推理的速度。同时,该模块隐藏了底层技术细节,为用户提供了开箱即用的高性能并行推理功能。 |
19 | 18 |
|
20 | 19 | ## 🛠️ 支持模型列表 🛠️
|
21 | 20 |
|
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) | 🚧 | ✅ | ✅ | 🚧 | 🚧 | 🚧 | 🚧 | ✅ | |
33 | 32 |
|
34 | 33 | * ✅: Supported
|
35 | 34 | * 🚧: In Progress
|
|
39 | 38 | ## 🚀 快速开始 🚀
|
40 | 39 |
|
41 | 40 | ### 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) 等模型预训练功能,更多模型支持持续更新中。 |
43 | 42 |
|
44 | 43 | <div align="center">
|
45 | 44 | <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
|
152 | 151 | 更多大模型精调分布式使用文档、训练细节和效果请参见[大模型精调教程](./docs/finetune.md)。
|
153 | 152 |
|
154 | 153 | ### 3. 对齐
|
155 |
| -我们支持DPO等偏好对齐策略。DPO策略采用zero_padding策略,结合FlashMask策略,有效提升模型训练效率。 |
156 |
| - |
| 154 | +我们支持DPO、RLHF等偏好对齐策略。DPO策略采用zero_padding策略,结合FlashMask策略,有效提升模型训练效率。 |
| 155 | +#### 3.1 DPO |
157 | 156 | **数据准备**:
|
158 | 157 |
|
159 | 158 | 我们支持的精调数据格式是每行包含一个字典的json文件,每个字典包含以下字段:
|
@@ -190,10 +189,12 @@ tar -zxvf ultrafeedback_binarized.tar.gz
|
190 | 189 | # DPO启动命令参考
|
191 | 190 | python -u -m paddle.distributed.launch --gpus "0,1,2,3,4,5,6,7" ./dpo/run_dpo.py ./config/llama/dpo_argument.json
|
192 | 191 | ```
|
| 192 | +#### 3.2 RLHF |
| 193 | +飞桨大模型套件提供了提供了基于强化学习 PPO 算法对 LLM 进行人类偏好对齐的代码及完整使用示例,支持**3D 分布式并行训练以及 rollout 阶段使用预测优化进行生成加速**。详细使用教程详见[RLHF文档](./docs/rlhf.md)。 |
193 | 194 |
|
194 | 195 | ### 4. 量化
|
195 | 196 | 大模型量化将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)基础上 |
197 | 198 | 新增PieceWiseSearch参数搜索算法,对模型权重和激活分布进行调整,减少后续A8W8 PTQ量化损失。
|
198 | 199 |
|
199 | 200 |
|
|
0 commit comments