diff --git a/README.md b/README.md index 550cb50fd350..82d115d06cb6 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ * **2024.01.04 [PaddleNLP v2.7](https://github.com/PaddlePaddle/PaddleNLP/releases/tag/v2.7.1)**: 大模型体验全面升级,统一工具链大模型入口。统一预训练、精调、压缩、推理以及部署等环节的实现代码,到 `PaddleNLP/llm`目录。全新[大模型工具链文档](https://paddlenlp.readthedocs.io/zh/latest/llm/finetune.html),一站式指引用户从大模型入门到业务部署上线。全断点存储机制 Unified Checkpoint,大大提高大模型存储的通用性。高效微调升级,支持了高效微调+LoRA同时使用,支持了QLoRA等算法。 -* **2023.08.15 [PaddleNLP v2.6](https://github.com/PaddlePaddle/PaddleNLP/releases/tag/v2.6.0)**: 发布[全流程大模型工具链](./llm),涵盖预训练,精调,压缩,推理以及部署等各个环节,为用户提供端到端的大模型方案和一站式的开发体验;内置[4D并行分布式Trainer](./docs/trainer.md),[高效微调算法LoRA/Prefix Tuning](./llm#33-lora), [自研INT8/INT4量化算法](./llm#6-量化)等等;全面支持[LLaMA 1/2](./llm/llama), [BLOOM](.llm/bloom), [ChatGLM 1/2](./llm/chatglm), [GLM](./llm/glm), [OPT](./llm/opt)等主流大模型 +* **2023.08.15 [PaddleNLP v2.6](https://github.com/PaddlePaddle/PaddleNLP/releases/tag/v2.6.0)**: 发布[全流程大模型工具链](./llm),涵盖预训练,精调,压缩,推理以及部署等各个环节,为用户提供端到端的大模型方案和一站式的开发体验;内置[4D并行分布式Trainer](./docs/trainer.md),[高效微调算法LoRA/Prefix Tuning](./llm#33-lora), [自研INT8/INT4量化算法](./llm#6-量化)等等;全面支持[LLaMA 1/2](./llm/config/llama), [BLOOM](./llm/config/bloom), [ChatGLM 1/2](./llm/config/chatglm), [OPT](./llm/config/opt)等主流大模型 ## 安装 @@ -103,8 +103,8 @@ PaddleNLP提供[一键预测功能](./docs/model_zoo/taskflow.md),无需训练 更多PaddleNLP内容可参考: - [大模型全流程工具链](./llm),包含主流中文大模型的全流程方案。 -- [精选模型库](./model_zoo),包含优质预训练模型的端到端全流程使用。 -- [多场景示例](./examples),了解如何使用PaddleNLP解决NLP多种技术问题,包含基础技术、系统应用与拓展应用。 +- [精选模型库](./legacy/model_zoo),包含优质预训练模型的端到端全流程使用。 +- [多场景示例](./legacy/examples),了解如何使用PaddleNLP解决NLP多种技术问题,包含基础技术、系统应用与拓展应用。 - [交互式教程](https://aistudio.baidu.com/aistudio/personalcenter/thirdview/574995),在🆓免费算力平台AI Studio上快速学习PaddleNLP。 @@ -180,12 +180,12 @@ model = AutoModelForQuestionAnswering.from_pretrained('ernie-3.0-medium-zh') 覆盖从学术到产业的NLP应用示例,涵盖NLP基础技术、NLP系统应用以及拓展应用。全面基于飞桨核心框架2.0全新API体系开发,为开发者提供飞桨文本领域的最佳实践。 -精选预训练模型示例可参考[Model Zoo](./model_zoo),更多场景示例文档可参考[examples目录](./examples)。更有免费算力支持的[AI Studio](https://aistudio.baidu.com)平台的[Notbook交互式教程](https://aistudio.baidu.com/aistudio/personalcenter/thirdview/574995)提供实践。 +精选预训练模型示例可参考[Model Zoo](./legacy/model_zoo),更多场景示例文档可参考[examples目录](./legacy/examples)。更有免费算力支持的[AI Studio](https://aistudio.baidu.com)平台的[Notbook交互式教程](https://aistudio.baidu.com/aistudio/personalcenter/thirdview/574995)提供实践。
PaddleNLP预训练模型适用任务汇总(点击展开详情
| Model | Sequence Classification | Token Classification | Question Answering | Text Generation | Multiple Choice | -| :----------------- | ----------------------- | -------------------- | ------------------ | --------------- | --------------- | +|:-------------------|-------------------------|----------------------|--------------------|-----------------|-----------------| | ALBERT | ✅ | ✅ | ✅ | ❌ | ✅ | | BART | ✅ | ✅ | ✅ | ✅ | ❌ | | BERT | ✅ | ✅ | ✅ | ❌ | ✅ | @@ -233,7 +233,7 @@ model = AutoModelForQuestionAnswering.from_pretrained('ernie-3.0-medium-zh') ### 产业级端到端系统范例 -PaddleNLP针对信息抽取、语义检索、智能问答、情感分析等高频NLP场景,提供了端到端系统范例,打通*数据标注*-*模型训练*-*模型调优*-*预测部署*全流程,持续降低NLP技术产业落地门槛。更多详细的系统级产业范例使用说明请参考[Applications](./applications)。 +PaddleNLP针对信息抽取、语义检索、智能问答、情感分析等高频NLP场景,提供了端到端系统范例,打通*数据标注*-*模型训练*-*模型调优*-*预测部署*全流程,持续降低NLP技术产业落地门槛。更多详细的系统级产业范例使用说明请参考[Applications](./legacy/applications)。 #### 🔍 语义检索系统 @@ -244,7 +244,7 @@ PaddleNLP针对信息抽取、语义检索、智能问答、情感分析等高
-更多使用说明请参考[语义检索系统](./applications/neural_search)。 +更多使用说明请参考[语义检索系统](./legacy/applications/neural_search)。 #### ❓ 智能问答系统 @@ -255,7 +255,7 @@ PaddleNLP针对信息抽取、语义检索、智能问答、情感分析等高 -更多使用说明请参考[智能问答系统](./applications/question_answering)与[文档智能问答](./applications/document_intelligence/doc_vqa) +更多使用说明请参考[智能问答系统](./legacy/applications/question_answering)与[文档智能问答](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/applications/document_intelligence/doc_vqa) #### 💌 评论观点抽取与情感分析 @@ -265,36 +265,20 @@ PaddleNLP针对信息抽取、语义检索、智能问答、情感分析等高 -更多使用说明请参考[情感分析](./applications/sentiment_analysis)。 +更多使用说明请参考[情感分析](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/applications/sentiment_analysis)。 #### 🎙️ 智能语音指令解析 -集成了[PaddleSpeech](https://github.com/PaddlePaddle/PaddleSpeech)和[百度开放平台](https://ai.baidu.com/)的语音识别和[UIE](./model_zoo/uie)通用信息抽取等技术,打造智能一体化的语音指令解析系统范例,该方案可应用于智能语音填单、智能语音交互、智能语音检索等场景,提高人机交互效率。 +集成了[PaddleSpeech](https://github.com/PaddlePaddle/PaddleSpeech)和[百度开放平台](https://ai.baidu.com/)的语音识别和[UIE](./legacy/model_zoo/uie)通用信息抽取等技术,打造智能一体化的语音指令解析系统范例,该方案可应用于智能语音填单、智能语音交互、智能语音检索等场景,提高人机交互效率。
-更多使用说明请参考[智能语音指令解析](./applications/speech_cmd_analysis)。 +更多使用说明请参考[智能语音指令解析](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/applications/speech_cmd_analysis)。 ### 高性能分布式训练与推理 -#### ⚡️ FastGeneration:高性能生成加速库 - -
- -
- -```python -model = GPTLMHeadModel.from_pretrained('gpt-cpm-large-cn') -... -outputs, _ = model.generate( - input_ids=inputs_ids, max_length=10, decode_strategy='greedy_search', - use_fast=True) -``` - -简单地在`generate()`API上打开`use_fast=True`选项,轻松在Transformer、GPT、BART、PLATO、UniLM等生成式预训练模型上获得5倍以上GPU加速,更多使用说明可参考[FastGeneration文档](./fast_generation)。 - #### 🚀 Fleet:飞桨4D混合并行分布式训练技术
@@ -302,7 +286,7 @@ outputs, _ = model.generate(
-更多关于千亿级AI模型的分布式训练使用说明可参考[GPT-3](./examples/language_model/gpt-3)。 +更多关于千亿级AI模型的分布式训练使用说明可参考[GPT-3](./legacy/model_zoo/gpt-3)。 ## 社区交流 diff --git a/README_en.md b/README_en.md index 4801677d17be..de33396f3dea 100644 --- a/README_en.md +++ b/README_en.md @@ -25,8 +25,7 @@ * **2024.01.04 [PaddleNLP v2.7](https://github.com/PaddlePaddle/PaddleNLP/releases/tag/v2.7.0)**: The LLM experience is fully upgraded, and the tool chain LLM entrance is unified. Unify the implementation code of pre-training, fine-tuning, compression, inference and deployment to the `PaddleNLP/llm` directory. The new [LLM Toolchain Documentation](https://paddlenlp.readthedocs.io/zh/latest/llm/finetune.html) provides one-stop guidance for users from getting started with LLM to business deployment and launch. The full breakpoint storage mechanism Unified Checkpoint greatly improves the versatility of LLM storage. Efficient fine-tuning upgrade supports the simultaneous use of efficient fine-tuning + LoRA, and supports QLoRA and other algorithms. -* **2023.08.15 [PaddleNLP v2.6](https://github.com/PaddlePaddle/PaddleNLP/releases/tag/v2.6.0)**: Release [Full-process LLM toolchain](./llm) , covering all aspects of pre-training, fine-tuning, compression, inference and deployment, providing users with end-to-end LLM solutions and one-stop development experience; built-in [4D parallel distributed Trainer](./docs/trainer.md ), [Efficient fine-tuning algorithm LoRA/Prefix Tuning](./llm#33-lora), [Self-developed INT8/INT4 quantization algorithm](./llm#6-quantization), etc.; fully supports [LLaMA 1/2](./llm/llama), [BLOOM](.llm/bloom), [ChatGLM 1/2](./llm/chatglm), [GLM](./llm/glm), [OPT](./llm/opt) and other mainstream LLMs. - +* **2023.08.15 [PaddleNLP v2.6](https://github.com/PaddlePaddle/PaddleNLP/releases/tag/v2.6.0)**: Release [Full-process LLM toolchain](./llm) , covering all aspects of pre-training, fine-tuning, compression, inference and deployment, providing users with end-to-end LLM solutions and one-stop development experience; built-in [4D parallel distributed Trainer](./docs/trainer.md ), [Efficient fine-tuning algorithm LoRA/Prefix Tuning](./llm/README.md#2-%E7%B2%BE%E8%B0%83), [Self-developed INT8/INT4 quantization algorithm](./llm/README.md#4-%E9%87%8F%E5%8C%96), etc.; fully supports [LLaMA 1/2](./llm/config/llama), [BLOOM](./llm/config/bloom), [ChatGLM 1/2](./llm/config/chatglm), [OPT](./llm/config/opt) and other mainstream LLMs. ## Installation @@ -119,7 +118,7 @@ model = AutoModelForQuestionAnswering.from_pretrained('ernie-3.0-medium-zh') #### Wide-range NLP Task Support -PaddleNLP provides rich examples covering mainstream NLP task to help developers accelerate problem solving. You can find our powerful transformer [Model Zoo](./model_zoo), and wide-range NLP application [examples](./examples) with detailed instructions. +PaddleNLP provides rich examples covering mainstream NLP task to help developers accelerate problem solving. You can find our powerful transformer [Model Zoo](./legacy/model_zoo), and wide-range NLP application [examples](./legacy/examples) with detailed instructions. Also you can run our interactive [Notebook tutorial](https://aistudio.baidu.com/aistudio/personalcenter/thirdview/574995) on AI Studio, a powerful platform with **FREE** computing resource. @@ -176,7 +175,7 @@ For more pretrained model usage, please refer to [Transformer API Docs](./docs/m We provide high value scenarios including information extraction, semantic retrieval, question answering high-value. -For more details industrial cases please refer to [Applications](./applications). +For more details industrial cases please refer to [Applications](./legacy/applications). #### 🔍 Neural Search System @@ -186,7 +185,7 @@ For more details industrial cases please refer to [Applications](./applications) -For more details please refer to [Neural Search](./applications/neural_search). +For more details please refer to [Neural Search](./legacy/applications/neural_search). #### ❓ Question Answering System @@ -197,7 +196,7 @@ We provide question answering pipeline which can support FAQ system, Document-le -For more details please refer to [Question Answering](./applications/question_answering) and [Document VQA](./applications/document_intelligence/doc_vqa). +For more details please refer to [Question Answering](./legacy/applications/question_answering) and [Document VQA](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/applications/document_intelligence/doc_vqa). #### 💌 Opinion Extraction and Sentiment Analysis @@ -209,7 +208,7 @@ We build an opinion extraction system for product review and fine-grained sentim -For more details please refer to [Sentiment Analysis](./applications/sentiment_analysis). +For more details please refer to [Sentiment Analysis](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/applications/sentiment_analysis). #### 🎙️ Speech Command Analysis @@ -220,26 +219,10 @@ Integrated ASR Model, Information Extraction, we provide a speech command analys -For more details please refer to [Speech Command Analysis](./applications/speech_cmd_analysis). +For more details please refer to [Speech Command Analysis](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/applications/speech_cmd_analysis). ### High Performance Distributed Training and Inference -#### ⚡ FastGeneration: High Performance Generation Library - -
- -
- -```python -model = GPTLMHeadModel.from_pretrained('gpt-cpm-large-cn') -... -outputs, _ = model.generate( - input_ids=inputs_ids, max_length=10, decode_strategy='greedy_search', - use_fast=True) -``` - -Set `use_fast=True` to achieve 5x speedup for Transformer, GPT, BART, PLATO, UniLM text generation. For more usage please refer to [FastGeneration](./fast_generation). - #### 🚀 Fleet: 4D Hybrid Distributed Training
@@ -247,7 +230,7 @@ Set `use_fast=True` to achieve 5x speedup for Transformer, GPT, BART, PLATO, Uni
-For more super large-scale model pre-training details please refer to [GPT-3](./examples/language_model/gpt-3). +For more super large-scale model pre-training details please refer to [GPT-3](./legacy/model_zoo/gpt-3). ## Quick Start diff --git a/docs/FAQ.md b/docs/FAQ.md index db2b4ac52fc6..8b4dd5f0efa9 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -132,7 +132,7 @@ emb.set_state_dict(load_layer_state_dict) # 加载模型参数 ##### Q1.4 当训练样本较少时,有什么推荐的方法能提升模型效果吗? -**A:** 增加训练样本带来的效果是最直接的。此外,可以基于我们开源的[预训练模型](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/paddlenlp/transformers)进行热启,再用少量数据集fine-tune模型。此外,针对分类、匹配等场景,[小样本学习](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/few_shot)也能够带来不错的效果。 +**A:** 增加训练样本带来的效果是最直接的。此外,可以基于我们开源的[预训练模型](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/paddlenlp/transformers)进行热启,再用少量数据集fine-tune模型。此外,针对分类、匹配等场景,[小样本学习](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/examples/few_shot)也能够带来不错的效果。 @@ -140,7 +140,7 @@ emb.set_state_dict(load_layer_state_dict) # 加载模型参数 **A:** 从工程角度,对于服务器端部署可以使用[Paddle Inference](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/05_inference_deployment/inference/inference_cn.html)高性能预测引擎进行预测部署。对于Transformer类模型的GPU预测还可以使用PaddleNLP中提供的[FastGeneration](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/paddlenlp/ops)功能来进行快速预测,其集成了[NV FasterTransformer](https://github.com/NVIDIA/FasterTransformer)并进行了功能增强。 -从模型策略角度,可以使用一些模型小型化技术来进行模型压缩,如模型蒸馏和裁剪,通过小模型来实现加速。PaddleNLP中集成了ERNIE-Tiny这样一些通用小模型供下游任务微调使用。另外PaddleNLP提供了[模型压缩示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/model_compression),实现了DynaBERT、TinyBERT、MiniLM等方法策略,可以参考对自己的模型进行蒸馏压缩。 +从模型策略角度,可以使用一些模型小型化技术来进行模型压缩,如模型蒸馏和裁剪,通过小模型来实现加速。PaddleNLP中集成了ERNIE-Tiny这样一些通用小模型供下游任务微调使用。另外PaddleNLP提供了[模型压缩示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/examples/model_compression),实现了DynaBERT、TinyBERT、MiniLM等方法策略,可以参考对自己的模型进行蒸馏压缩。 @@ -181,7 +181,7 @@ emb.set_state_dict(load_layer_state_dict) # 加载模型参数 **A:** 预训练模型通常会有配套的tokenzier和词典,对于大多数中文预训练模型,如ERNIE-3.0,使用的都是字粒度的输入,tokenzier会将句子转换为字粒度的形式,模型无法收到词粒度的输入。如果希望引入额外的词典,需要修改预训练模型的tokenizer和词典,可以参考这里[blog](https://kexue.fm/archives/7758/comment-page-1#Tokenizer ),另外注意embedding矩阵也要加上这些新增词的embedding表示。 -另外还有一种方式可以使用这些字典信息,可以将数据中在词典信息中的词进行整体mask进行一个mask language model的二次预训练,这样经过二次训练的模型就包含了对额外字典的表征。可参考 [PaddleNLP 预训练数据流程](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/ernie-1.0/)。 +另外还有一种方式可以使用这些字典信息,可以将数据中在词典信息中的词进行整体mask进行一个mask language model的二次预训练,这样经过二次训练的模型就包含了对额外字典的表征。可参考 [PaddleNLP 预训练数据流程](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/model_zoo/ernie-1.0/)。 此外还有些词粒度及字词混合粒度的预训练模型,在这些词粒度的模型下引入额外的词表也会容易些,我们也将持续丰富PaddleNLP中的预训练模型。 @@ -321,7 +321,7 @@ model.set_state_dict(paddle.load("xxx_para")) (2)对于第二种方法: -- 我们在PaddleNLP的examples目录下提供了常见任务的训练与预测脚本:如[GLUE](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/benchmark/glue) 和 [SQuAD](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/machine_reading_comprehension/SQuAD)等 +- 我们在PaddleNLP的examples目录下提供了常见任务的训练与预测脚本:如[GLUE](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/examples/benchmark/glue) 和 [SQuAD](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/examples/machine_reading_comprehension/SQuAD)等 - 开发者可以参考上述脚本进行自定义训练与预测脚本的开发。 @@ -343,7 +343,7 @@ model.set_state_dict(paddle.load("xxx_para")) (2)如果是下游任务模型,查看是否所有模型参数都被导入了,直接使用bert-base这种预训练模型是不包含任务相关参数的,要确认导入的是微调后的模型,否则任务相关参数会随机初始化导致出现随机性。 -(3)部分算子使用CUDNN后端产生的不一致性可以通过环境变量的设置来避免。如果模型中使用了CNN相关算子,可以设置`FLAGS_cudnn_deterministic=True`。如果模型中使用了RNN相关算子,可以设置`CUBLAS_WORKSPACE_CONFIG=:16:8`或`CUBLAS_WORKSPACE_CONFIG=:4096:2`(CUDNN 10.2以上版本可用,参考[CUDNN 8 release note](https://docs.nvidia.com/deeplearning/sdk/cudnn-release-notes/rel_8.html))。 +(3)部分算子使用CUDNN后端产生的不一致性可以通过环境变量的设置来避免。如果模型中使用了CNN相关算子,可以设置`FLAGS_cudnn_deterministic=True`。如果模型中使用了RNN相关算子,可以设置`CUBLAS_WORKSPACE_CONFIG=:16:8`或`CUBLAS_WORKSPACE_CONFIG=:4096:2`(CUDNN 10.2以上版本可用,参考[CUDNN 8 release note](https://docs.nvidia.com/deeplearning/cudnn/archives/cudnn-894/release-notes/index.html))。 @@ -408,7 +408,7 @@ model.set_state_dict(paddle.load("xxx_para")) ##### Q4.4 【语义匹配】语义索引和语义匹配有什么区别? -**A:** 语义索引要解决的核心问题是如何从海量 Doc 中通过 ANN 索引的方式快速、准确地找出与 query 相关的文档,语义匹配要解决的核心问题是对 query和文档更精细的语义匹配信息建模。换个角度理解, [语义索引](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/semantic_indexing)是要解决搜索、推荐场景下的召回问题,而[语义匹配](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/text_matching)是要解决排序问题,两者要解决的问题不同,所采用的方案也会有很大不同,但两者间存在一些共通的技术点,可以互相借鉴。 +**A:** 语义索引要解决的核心问题是如何从海量 Doc 中通过 ANN 索引的方式快速、准确地找出与 query 相关的文档,语义匹配要解决的核心问题是对 query和文档更精细的语义匹配信息建模。换个角度理解, [语义索引](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/examples/semantic_indexing)是要解决搜索、推荐场景下的召回问题,而[语义匹配](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/examples/text_matching)是要解决排序问题,两者要解决的问题不同,所采用的方案也会有很大不同,但两者间存在一些共通的技术点,可以互相借鉴。 diff --git a/docs/advanced_guide/fastgeneration/fastgeneration.rst b/docs/advanced_guide/fastgeneration/fastgeneration.rst deleted file mode 100644 index 95fff8849aef..000000000000 --- a/docs/advanced_guide/fastgeneration/fastgeneration.rst +++ /dev/null @@ -1,189 +0,0 @@ -======== -FastGeneration加速生成API -======== - -FastGeneration是PaddleNLP v2.2版本加入的一个高性能推理功能,可实现基于CUDA的序列解码。该功能可以用于多种生成类的预训练NLP模型,例如GPT、BART、UnifiedTransformer等,并且支持多种解码策略。因此该功能主要适用于机器翻译,文本续写,文本摘要,对话生成等任务。 - -功能底层依托于 `FasterTransformer `_ ,该库专门针对Transformer系列模型及各种解码策略进行了优化。功能顶层封装于 `model.generate` 函数。功能的开启和关闭通过传入 `use_fast` 参数进行控制(默认为开启状态)。该功能具有如下特性: - -- 全面支持生成式预训练模型。包括GPT、BART、mBART、UnifiedTransformer和UNIMO-text。 -- 支持大多数主流解码策略。包括Beam Search、Sampling、Greedy Search。以及Diverse Sibling Search、Length Penalty等子策略。 -- 解码速度快。最高可达非加速版generate函数的 **17倍**。HuggingFace generate函数的 **8倍**。**并支持FP16混合精度计算**。 详细性能试验数据请参见 `FastGeneration Performence `_ 。 -- 易用性强。功能的入口为 `model.generate` ,与非加速版生成api的使用方法相同,当满足加速条件时使用jit即时编译高性能算子并用于生成,不满足则自动切换回非加速版生成api。下图展示了FastGeneration的启动流程: - -.. image:: ../../imgs/fast_generation.png - -快速开始 ------------ - -为体现FastGeneration的易用性,我们在 `samples `_ 文件夹中内置了几个典型任务示例,下面以基于GPT模型的中文文本续写任务为例: - -.. code-block:: - - python samples/gpt_sample.py - - -如果是第一次执行,PaddleNLP会启动即时编译( `JIT Compile `_ )自动编译高性能解码算子。 - -.. code-block:: - - ... - 2021-11-17 13:42:56,771 - INFO - execute command: cd /10.2/hub/PaddleNLP/paddlenlp/ops/extenstions && /usr/local/bin/python FasterTransformer_setup.py build - INFO:utils.cpp_extension:execute command: cd /10.2/hub/PaddleNLP/paddlenlp/ops/extenstions && /usr/local/bin/python FasterTransformer_setup.py build - grep: warning: GREP_OPTIONS is deprecated; please use an alias or script - running build - running build_ext - -- The C compiler identification is GNU 8.2.0 - -- The CXX compiler identification is GNU 8.2.0 - -- The CUDA compiler identification is NVIDIA 10.2.89 - -- Check for working C compiler: /usr/bin/cc - -- Check for working C compiler: /usr/bin/cc -- works - -- Detecting C compiler ABI info - -- Detecting C compiler ABI info - done - -- Detecting C compile features - -- Detecting C compile features - done - -- Check for working CXX compiler: /usr - ... - - -编译过程通常会花费几分钟的时间但是只会进行一次,之后再次使用高性能解码不需要重新编译了。编译完成后会继续运行,可以看到生成的结果如下: - -.. code-block:: - - Model input: 花间一壶酒,独酌无相亲。举杯邀明月, - Result: 对影成三人。 - -打开示例代码 `samples/gpt_sample.py` ,我们可以看到如下代码: - -.. code-block:: - - ... - model = GPTLMHeadModel.from_pretrained(model_name) - ... - outputs, _ = model.generate( - input_ids=inputs_ids, max_length=10, decode_strategy='greedy_search') - ... - -可以看到,FastGeneration的使用方法与 `model.generate()` 相同,只需传入输入tensor和解码相关参数即可,使用非常简便。如果要使用非加速版的 `model.generate()` 方法,只需传入 `use_fast=False` 即可,示例如下: - -.. code-block:: - - ... - outputs, _ = model.generate( - input_ids=inputs_ids, max_length=10, decode_strategy='greedy_search', use_fast=False) - ... - -.. note:: - - 需要注意的是,如果传入 `model.generate()` 的参数不满足高性能版本的要求。程序会做出提示并自动切换为非加速版本,例如我们传入 `min_length=1` ,会得到如下提示: - - .. code-block:: - - [2021-11-17 14:21:06,132] [ WARNING] - 'min_length != 0' is not supported yet in the fast version - [2021-11-17 14:21:06,132] [ WARNING] - FastGeneration is not available, and the original version would be used instead. - - -关于该方法的更多参数可以参考API文档 `generate `_ 。 - -`samples `_ 文件夹中的其他示例的使用方法相同。 - -其他示例 ------------ - -除了以上简单示例之外,PaddleNLP的examples中所有使用了 `model.generate()` 的示例都可以通过调整到合适的参数使用高性能推理。具体如下: - -- `examples/dialogue/unified_transformer `_ -- `model_zoo/gpt/fast_gpt `_ -- `examples/text_generation/unimo-text `_ -- `examples/text_summarization/bart `_ - -根据提示修改对应参数即可使用FastGeneration加速生成。下面我们以基于 `Unified Transformer` 的任务型对话为例展示一下FastGeneration的加速效果: - -打开以上链接中Unified Transformer对应的example,找到README中对应预测的脚本。稍作修改如下: - -.. code-block:: - - export CUDA_VISIBLE_DEVICES=0 - python infer.py \ - --model_name_or_path=unified_transformer-12L-cn-luge \ - --output_path=./predict.txt \ - --logging_steps=10 \ - --seed=2021 \ - --max_seq_len=512 \ - --max_knowledge_len=256 \ - --batch_size=4 \ - --min_dec_len=1 \ - --max_dec_len=64 \ - --num_return_sequences=1 \ - --decode_strategy=sampling \ - --top_k=5 \ - --device=gpu - -由于这里只是展示性能,我们直接在 `model_name_or_path` 填入PaddleNLP预训练模型名称 `unified_transformer-12L-cn-luge` 。 - -可以看到,由于该任务为对话任务,我们为了防止模型生成过多安全回复(如:哈哈哈、不错等),保证生成结果具有更多的随机性,我们选择TopK-sampling作为解码策略,并让k=5。 - -打开 `infer.py` ,可以看到我们传入的脚本参数大多都提供给了 `model.generate()` 方法: - -.. code-block:: - - output = model.generate( - input_ids=input_ids, - token_type_ids=token_type_ids, - position_ids=position_ids, - attention_mask=attention_mask, - seq_len=seq_len, - max_length=args.max_dec_len, - min_length=args.min_dec_len, - decode_strategy=args.decode_strategy, - temperature=args.temperature, - top_k=args.top_k, - top_p=args.top_p, - num_beams=args.num_beams, - length_penalty=args.length_penalty, - early_stopping=args.early_stopping, - num_return_sequences=args.num_return_sequences, - use_fp16_decoding=args.use_fp16_decoding, - use_fast=args.faster) - -运行脚本,输出结果如下: - -.. code-block:: - - step 10 - 1.695s/step - step 20 - 1.432s/step - step 30 - 1.435s/step - -可以看到,非加速版 `generate()` 方法的预测速度为每个step耗时1.5秒左右。 - -下面我们在启动脚本中传入 `--faster` 参数,这会让 `generate()` 方法传入 `use_fast=True` ,启动加速模式。同时我们需要设置 `--min_dec_len=0` ,因为FastGeneration当前还不支持该参数。新的脚本启动参数如下: - -.. code-block:: - - export CUDA_VISIBLE_DEVICES=0 - python infer.py \ - --model_name_or_path=unified_transformer-12L-cn-luge \ - --output_path=./predict.txt \ - --logging_steps=10 \ - --seed=2021 \ - --max_seq_len=512 \ - --max_knowledge_len=256 \ - --batch_size=4 \ - --min_dec_len=0 \ - --max_dec_len=64 \ - --num_return_sequences=1 \ - --decode_strategy=sampling \ - --top_k=5 \ - --device=gpu \ - --faster - -再次运行脚本,输出结果如下(由于我们已经编译过高性能算子,所以这里不会重新编译): - -.. code-block:: - - [2021-11-23 13:38:09,200] [ DEBUG] - skipping 'FastTransformer' extension (up-to-date) build - step 10 - 0.511s/step - step 20 - 0.343s/step - step 30 - 0.419s/step - -可以看到,FastGeneration的预测速度为每个step耗时0.4秒左右,提速超过三倍。如果减少 `num_return_sequences` ,可以得到更高的加速比。 diff --git a/docs/advanced_guide/fastgeneration/fasttransformer.rst b/docs/advanced_guide/fastgeneration/fasttransformer.rst deleted file mode 100644 index 28d767560676..000000000000 --- a/docs/advanced_guide/fastgeneration/fasttransformer.rst +++ /dev/null @@ -1,241 +0,0 @@ -============ -Transformer高性能加速 -============ - - -使用环境说明 ------------- - -* 本项目依赖于 PaddlePaddle 2.1.0 及以上版本或适当的 develop 版本 -* CMake >= 3.10 -* CUDA 10.1 或 10.2(需要 PaddlePaddle 框架一致) -* gcc 版本需要与编译 PaddlePaddle 版本一致,比如使用 gcc8.2 -* 推荐使用 Python3 -* `FasterTransformer `_ 使用必要的环境 -* 环境依赖 - - - attrdict - - pyyaml - - .. code-block:: - - pip install attrdict pyyaml - - -快速开始 ------------- - -我们实现了基于 FasterTransformer 的自定义 op 的接入,打造了 FastGeneration 的能力用于加速文本生成模型在 GPU 上的预测性能。接下来,我们将分别介绍基于 Python 动态图和预测库使用 FastGeneration 自定义 op 的方式,包括 op 的编译与使用。 - -Python 动态图使用自定义 op ------------- - -JIT 自动编译 -^^^^^^^^^^^^ - -目前当基于动态图使用 FastGeneration 预测加速自定义 op 时,PaddleNLP 提供了 Just In Time 的自动编译,在一些 API 上,用户无需关注编译流程,可以直接执行对应的 API,程序会自动编译需要的第三方库。 - -以 Transformer 为例,可以直接调用 `TransformerGenerator()` 这个 API,程序会自动编译。使用示例可以参考 `Transformer 预测加速使用示例-sample `_,`Transformer 预测加速使用示例-机器翻译 `_。 - -编译自定义OP -^^^^^^^^^^^^ - -除了自动编译外,如果需要自行编译,我们已经提供对应的 CMakeLists.txt,可以参考使用如下的方式完成编译。 - -PaddleNLP 准备 -"""""""""""" - -首先,如果需要从源码自行编译,可以直接使用 Python 的 package 下的 paddlenlp,或是可从 github 克隆一个 PaddleNLP,并重新编译: - -以下以从 github 上 clone 一个新版 PaddleNLP 为例: - -.. code-block:: - - git clone https://github.com/PaddlePaddle/PaddleNLP.git - -其次,配置环境变量,让我们可以使用当前 clone 的 paddlenlp,并进入到自定义 OP 的路径,准备后续的编译操作: - -.. code-block:: - - export PYTHONPATH=$PWD/PaddleNLP/:$PYTHONPATH - cd PaddleNLP/paddlenlp/ops/ - -编译 -"""""""""""" - -编译之前,请确保安装的 PaddlePaddle 的版本高于 2.1.0 或是基于最新的 develop 分支的代码编译,并且正常可用。 - -编译自定义 OP 可以参照一下步骤: - -.. code-block:: - - mkdir build - cd build/ - cmake .. -DCMAKE_BUILD_TYPE=Release -DPY_CMD=python3.x - make -j - cd ../ - -可以使用的编译选项包括: - -* `-DPY_CMD`: 指定当前装有 PaddlePaddle 版本的 python 环境,比如 `-DPY_CMD=python3.7`。若未指定 `-DPY_CMD` 将会默认使用系统命令 `python` 对应的 Python。 -* `-DSM`: 是指的所用 GPU 的 compute capability,建议不使用该选项设置,未设置时将自动检测。如要设置,需根据 [compute capability](https://developer.nvidia.com/zh-cn/cuda-gpus#compute) 进行设置,如 V100 时设置 `-DSM=70` 或 T4 时设置 `-DSM=75`。 -* `-DWITH_GPT`: 是否编译带有 GPT 相关的 lib。若使用 GPT-2 高性能推理,需要加上 `-DWITH_GPT=ON`。默认为 OFF。 -* `-DWITH_UNIFIED`: 是否编译带有 Unified Transformer 或是 UNIMOText 相关的 lib。若使用,需要加上 `-DWITH_UNIFIED=ON`。默认为 ON。 -* `-DWITH_BART`: 是否编译带有 BART 支持的相关 lib。若使用,需要加上 `-DWITH_BART=ON`。默认为 ON。 -* `-DWITH_DECODER`: 是否编译带有 decoder 优化的 lib。默认为 ON。 - -最终,编译会在 `./build/lib/` 路径下,产出 `libdecoding_op.so`,即需要的 FastGeneration decoding 执行的库。 - -使用 Transformer decoding 高性能推理 -^^^^^^^^^^^^ - -编写 python 脚本的时候,调用 `FasterTransformer API `_ 即可实现 Transformer 模型的高性能预测。 - -举例如下: - -.. code-block:: - - from paddlenlp.ops import FasterTransformer - - transformer = FasterTransformer( - src_vocab_size=args.src_vocab_size, - trg_vocab_size=args.trg_vocab_size, - max_length=args.max_length + 1, - n_layer=args.n_layer, - n_head=args.n_head, - d_model=args.d_model, - d_inner_hid=args.d_inner_hid, - dropout=args.dropout, - weight_sharing=args.weight_sharing, - bos_id=args.bos_idx, - eos_id=args.eos_idx, - decoding_strategy=args.decoding_strategy, - beam_size=args.beam_size, - topk=args.topk, - topp=args.topp, - max_out_len=args.max_out_len, - decoding_lib=args.decoding_lib, - use_fp16_decoding=args.use_fp16_decoding) - -若当前环境下没有需要的自定义 op 的动态库,将会使用 JIT 自动编译需要的动态库。如果需要自行编译自定义 op 所需的动态库,可以如前文所述进行编译。编译好后,使用 `FasterTransformer(decoding_lib="/path/to/lib", ...)` 可以完成导入。 - -更详细的例子可以参考 `Transformer 预测加速使用示例-sample `_,`Transformer 预测加速使用示例-机器翻译 `_,我们提供了更详细用例。 - -Transformer decoding 示例代码 -"""""""""""" - -使用 PaddlePaddle 仅执行 decoding 测试(float32): - -.. code-block:: - - export CUDA_VISIBLE_DEVICES=0 - export FLAGS_fraction_of_gpu_memory_to_use=0.1 - # 执行 decoding_gemm 目的是基于当前环境、配置,提前确定一个性能最佳的矩阵乘算法,不是必要的步骤 - ./build/third-party/build/fastertransformer/bin/decoding_gemm 32 4 8 64 30000 32 512 0 - python ./fast_transformer/sample/decoding_sample.py --config ./fast_transformer/sample/config/decoding.sample.yaml --decoding_lib ./build/lib/libdecoding_op.so - -使用 PaddlePaddle 仅执行 decoding 测试(float16): -执行 float16 的 decoding,需要在执行的时候,加上 `--use_fp16_decoding` 选项。 - -.. code-block:: - - export CUDA_VISIBLE_DEVICES=0 - export FLAGS_fraction_of_gpu_memory_to_use=0.1 - # 执行 decoding_gemm 目的是基于当前环境、配置,提前确定一个性能最佳的矩阵乘算法,不是必要的步骤 - ./build/third-party/build/fastertransformer/bin/decoding_gemm 32 4 8 64 30000 32 512 1 - python ./fast_transformer/sample/decoding_sample.py --config ./fast_transformer/sample/config/decoding.sample.yaml --decoding_lib ./build/lib/libdecoding_op.so --use_fp16_decoding - -其中,`decoding_gemm` 不同参数的意义可以参考 `FasterTransformer 文档 `_。这里提前执行 `decoding_gemm`,可以在当前路径下生成一个 config 文件,里面会包含针对当前 decoding 部分提供的配置下,性能最佳的矩阵乘的算法,并在执行的时候读入这个数据。 - -C++ 预测库使用自定义 op ------------- - -编译自定义OP -^^^^^^^^^^^^ - -在 C++ 预测库使用自定义 OP 需要将实现的 C++、CUDA 代码**以及 C++ 预测的 demo**编译成一个可执行文件。因预测库支持方式与 Python 不同,这个过程将不会产生自定义 op 的动态库,将直接得到可执行文件。我们已经提供对应的 CMakeLists.txt ,可以参考使用如下的方式完成编译。并获取执行 demo。 - -PaddleNLP 准备 -"""""""""""" - -首先,因为需要基于当前环境重新编译,当前的 paddlenlp 的 python 包里面并不包含 FastGeneration 相关 lib,需要从源码自行编译,可以直接使用 Python 的 package 下的 paddlenlp,或是可从 github 克隆一个 PaddleNLP,并重新编译: - -以下以从 github 上 clone 一个新版 PaddleNLP 为例: - -.. code-block:: - - git clone https://github.com/PaddlePaddle/PaddleNLP.git - -其次,让我们可以使用当前 clone 的 paddlenlp,并进入到自定义 OP 的路径,准备后续的编译操作: - -.. code-block:: - - cd PaddleNLP/paddlenlp/ops/ - -编译 -"""""""""""" - -编译之前,请确保安装的 PaddlePaddle 的版本高于 2.1.0 或是基于最新的 develop 分支的代码编译,并且正常可用。 - -编译自定义 OP 可以参照一下步骤: - -.. code-block:: - - mkdir build - cd build/ - cmake .. -DCMAKE_BUILD_TYPE=Release -DPADDLE_LIB=/path/to/paddle_inference_lib/ -DDEMO=./demo/transformer_e2e.cc -DON_INFER=ON -DWITH_MKL=ON - make -j - cd ../ - -可以使用的编译选项包括: - -* `-DPADDLE_LIB`: 需要指明使用的 PaddlePaddle 预测库的路径 `/path/to/paddle_inference_install_dir/`,需要使用的 PaddlePaddle 的 lib 可以选择自行编译或者直接从官网下载 `paddle_inference_linux_lib `_。需要注意的是,在该路径下,预测库的组织结构满足: - .. code-block:: - - . - ├── CMakeCache.txt - ├── paddle/ - ├── include/ - └── lib/ - ├── third_party/ - ├── cudaerror/ - ├── install/ - └── threadpool/ - └── version.txt - -* `-DDEMO`: 说明预测库使用 demo 的位置。比如指定 -DDEMO=./demo/transformer_e2e.cc 或是 -DDEMO=./demo/gpt.cc。最好使用绝对路径,若使用相对路径,需要是相对于 `PaddleNLP/paddlenlp/ops/fast_transformer/src/` 的相对路径。 -* `-DSM`: 是指的所用 GPU 的 compute capability,建议不使用该选项设置,未设置时将自动检测。如要设置,需根据 [compute capability](https://developer.nvidia.com/zh-cn/cuda-gpus#compute) 进行设置,如 V100 时设置 `-DSM=70` 或 T4 时设置 `-DSM=75`。 -* `-DWITH_GPT`: 是否编译带有 GPT 相关的 lib。若使用 GPT-2 高性能推理,需要加上 `-DWITH_GPT=ON`。默认为 OFF。 -* `-DWITH_UNIFIED`: 是否编译带有 Unified Transformer 或是 UNIMOText 相关的 lib。若使用,需要加上 `-DWITH_UNIFIED=ON`。默认为 ON。 -* `-DWITH_BART`: 是否编译带有 BART 支持的相关 lib。若使用,需要加上 `-DWITH_BART=ON`。默认为 ON。 -* `-DWITH_DECODER`: 是否编译带有 decoder 优化的 lib。默认为 ON。 -* `-DWITH_MKL`: 若当前是使用的 mkl 的 Paddle lib,那么需要打开 MKL 以引入 MKL 相关的依赖。 -* `-DON_INFER`: 是否编译 paddle inference 预测库。 -* **当使用预测库的自定义 op 的时候,请务必开启 `-DON_INFER=ON` 选项,否则,不会得到预测库的可执行文件。** - -执行 Transformer decoding on PaddlePaddle -"""""""""""" - -编译完成后,在 `build/bin/` 路径下将会看到 `transformer_e2e` 的一个可执行文件。通过设置对应的设置参数完成执行的过程。 - -.. code-block:: - - cd bin/ - ./transformer_e2e -batch_size -gpu_id -model_dir -vocab_file -data_file - -举例说明: - -.. code-block:: - - cd bin/ - # 执行 decoding_gemm 目的是基于当前环境、配置,提前确定一个性能最佳的矩阵乘算法,不是必要的步骤 - ../third-party/build/fastertransformer/bin/decoding_gemm 8 5 8 64 38512 256 512 0 - ./transformer_e2e -batch_size 8 -gpu_id 0 -model_dir ./infer_model/ -vocab_file DATA_HOME/WMT14ende/WMT14.en-de/wmt14_ende_data_bpe/vocab_all.bpe.33708 -data_file DATA_HOME/WMT14ende/WMT14.en-de/wmt14_ende_data_bpe/newstest2014.tok.bpe.33708.en - -其中: - -* `decoding_gemm` 不同参数的意义可以参考 `FasterTransformer 文档 `_。这里提前执行 `decoding_gemm`,可以在当前路径下生成一个 config 文件,里面会包含针对当前 decoding 部分提供的配置下,性能最佳的矩阵乘的算法,并在执行的时候读入这个数据。 -* `DATA_HOME` 则是 `paddlenlp.utils.env.DATA_HOME` 返回的路径。 - -预测所需要的模型文件,可以通过 `fast_transformer/README.md `_ 文档中所记述的方式导出。 - diff --git a/docs/advanced_guide/fastgeneration/index.rst b/docs/advanced_guide/fastgeneration/index.rst deleted file mode 100644 index f99b8666359d..000000000000 --- a/docs/advanced_guide/fastgeneration/index.rst +++ /dev/null @@ -1,8 +0,0 @@ -============ -文本生成高性能加速 -============ - -.. toctree:: - :maxdepth: 1 - - fasttransformer.rst diff --git a/docs/advanced_guide/prompt.md b/docs/advanced_guide/prompt.md index c8e5d5a98a82..160dab275bbf 100644 --- a/docs/advanced_guide/prompt.md +++ b/docs/advanced_guide/prompt.md @@ -561,11 +561,11 @@ if training_args.do_train: ### 文本分类示例 -- [多分类文本分类示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/multi_class/few-shot) +- [多分类文本分类示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/applications/text_classification/multi_class/few-shot) -- [多标签文本分类示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/multi_label/few-shot) +- [多标签文本分类示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/applications/text_classification/multi_label/few-shot) -- [多层次文本分类示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/hierarchical/few-shot) +- [多层次文本分类示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/applications/text_classification/hierarchical/few-shot) ## Reference diff --git a/docs/compression.md b/docs/compression.md index 35d8d6f8dc63..3d54158498e4 100644 --- a/docs/compression.md +++ b/docs/compression.md @@ -29,29 +29,29 @@ PaddleNLP 模型压缩 API 功能支持对 ERNIE 类下游任务上微调后的 如下表所示,ERNIE 3.0-Medium (6-layer, 384-hidden, 12-heads) 模型在三类任务(文本分类、序列标注、抽取式阅读理解)经过裁剪 + 量化后加速比均达到 3 倍左右,所有任务上平均精度损失可控制在 0.5 以内(0.46)。 | | TNEWS 性能 | TNEWS 精度 | MSRA_NER 性能 | MSRA_NER 精度 | CMRC2018 性能 | CMRC2018 精度 | -| -------------------------- | ------------- | ------------ | ------------- | ------------- | ------------- | ------------- | +|----------------------------|---------------|--------------|---------------|---------------|---------------|---------------| | ERNIE 3.0-Medium+FP32 | 1123.85(1.0x) | 57.45 | 366.75(1.0x) | 93.04 | 146.84(1.0x) | 66.95 | -| ERNIE 3.0-Medium+INT8 | 3226.26(2.9x) | 56.99(-0.46) | 889.33(2.4x) | 92.70(-0.34) | 348.84(2.4x) | 66.32(-0.63 | +| ERNIE 3.0-Medium+INT8 | 3226.26(2.9x) | 56.99(-0.46) | 889.33(2.4x) | 92.70(-0.34) | 348.84(2.4x) | 66.32(-0.63) | | ERNIE 3.0-Medium+裁剪+FP32 | 1424.01(1.3x) | 57.31(-0.14) | 454.27(1.2x) | 93.27(+0.23) | 183.77(1.3x) | 65.92(-1.03) | | ERNIE 3.0-Medium+裁剪+INT8 | 3635.48(3.2x) | 57.26(-0.19) | 1105.26(3.0x) | 93.20(+0.16) | 444.27(3.0x) | 66.17(-0.78) | -(以上数据来自 [ERNIE 3.0 性能测试文档](../model_zoo/ernie-3.0/#性能测试),文档包含测试环境介绍) +(以上数据来自 [ERNIE 3.0 性能测试文档](../legacy/model_zoo/ernie-3.0/README.md#性能测试),文档包含测试环境介绍) ##### UIE 压缩效果 以报销工单信息抽取任务为例,使用 `uie-base` 进行微调,先得到原始 FP32 模型,然后使用 QAT 策略进一步量化。量化后的模型比原始 FP32 模型的 F1 值高 2.19。 -| Models | F1 | -| ------------- |:------------:| -| uie-base+微调+FP32 | 91.93 | -| uie-base+微调+量化+INT8 | 94.12 | +| Models | F1 | +|-------------------------|:-----:| +| uie-base+微调+FP32 | 91.93 | +| uie-base+微调+量化+INT8 | 94.12 | ### 三大场景快速启动模型压缩示例 -本项目提供了压缩 API 在分类(包含文本分类、文本匹配、自然语言推理、代词消歧等任务)、序列标注、抽取式阅读理解三大场景下的使用样例,可以分别参考 [ERNIE 3.0](../model_zoo/ernie-3.0/) 目录下的 [compress_seq_cls.py](../model_zoo/ernie-3.0/compress_seq_cls.py) 、[compress_token_cls.py](../model_zoo/ernie-3.0/compress_token_cls.py)、[compress_qa.py](../model_zoo/ernie-3.0/compress_qa.py) 脚本,启动方式如下: +本项目提供了压缩 API 在分类(包含文本分类、文本匹配、自然语言推理、代词消歧等任务)、序列标注、抽取式阅读理解三大场景下的使用样例,可以分别参考 [ERNIE 3.0](../legacy/model_zoo/ernie-3.0) 目录下的 [compress_seq_cls.py](../legacy/model_zoo/ernie-3.0/compress_seq_cls.py) 、[compress_token_cls.py](../legacy/model_zoo/ernie-3.0/compress_token_cls.py)、[compress_qa.py](../legacy/model_zoo/ernie-3.0/compress_qa.py) 脚本,启动方式如下: ```shell # 分类任务 @@ -172,7 +172,7 @@ compression_args = parser.parse_args_into_dataclasses() #### Trainer 实例化参数介绍 - **--model** 待压缩的模型,目前支持 ERNIE、BERT、RoBERTa、ERNIE-M、ELECTRA、ERNIE-Gram、PP-MiniLM、TinyBERT 等结构相似的模型,是在下游任务中微调后的模型,当预训练模型选择 ERNIE 时,需要继承 `ErniePretrainedModel`。以分类任务为例,可通过`AutoModelForSequenceClassification.from_pretrained(model_name_or_path)` 等方式来获取,这种情况下,`model_name_or_path`目录下需要有 model_config.json, model_state.pdparams 文件; -- **--data_collator** 三类任务均可使用 PaddleNLP 预定义好的 [DataCollator 类](../paddlenlp/data/data_collator.py),`data_collator` 可对数据进行 `Pad` 等操作。使用方法参考 [示例代码](../model_zoo/ernie-3.0/compress_seq_cls.py) 即可; +- **--data_collator** 三类任务均可使用 PaddleNLP 预定义好的 [DataCollator 类](../paddlenlp/data/data_collator.py),`data_collator` 可对数据进行 `Pad` 等操作。使用方法参考 [示例代码](../legacy/model_zoo/ernie-3.0/compress_seq_cls.py) 即可; - **--train_dataset** 裁剪训练需要使用的训练集,是任务相关的数据。自定义数据集的加载可参考 [文档](https://huggingface.co/docs/datasets/loading)。不启动裁剪时,可以为 None; - **--eval_dataset** 裁剪训练使用的评估集,也是量化使用的校准数据,是任务相关的数据。自定义数据集的加载可参考 [文档](https://huggingface.co/docs/datasets/loading)。是 Trainer 的必选参数; - **--tokenizer** 模型 `model` 对应的 `tokenizer`,可使用 `AutoTokenizer.from_pretrained(model_name_or_path)` 来获取。 @@ -243,9 +243,9 @@ trainer.compress() 目前 DynaBERT 裁剪功能只支持 SequenceClassification 等三类 PaddleNLP 内置 class,并且内置评估器对应为 Accuracy、F1、Squad。 -| Model class name | SequenceClassification | TokenClassification | QuestionAnswering | -| ---------------- | ------------------------- | --------------------- | ----------------- | -| Metrics | Accuracy | F1 | Squad | +| Model class name | SequenceClassification | TokenClassification | QuestionAnswering | +|------------------|------------------------|---------------------|-------------------| +| Metrics | Accuracy | F1 | Squad | 需要注意以下三个条件: @@ -415,19 +415,19 @@ python compress.py \ 裁剪、量化后的模型不能再通过 `from_pretrained` 导入进行预测,而是需要使用 Paddle 部署工具才能完成预测。 -压缩后的模型部署可以参考 [部署文档](../model_zoo/ernie-3.0/deploy) 完成。 +压缩后的模型部署可以参考 [部署文档](../legacy/model_zoo/ernie-3.0/deploy) 完成。 ### Python 部署 -服务端部署可以从这里开始。可以参考 [seq_cls_infer.py](../model_zoo/ernie-3.0/deploy/python/seq_cls_infer.py) 或者 [token_cls_infer.py](../model_zoo/ernie-3.0/deploy/python/token_cls_infer.py) 来编写自己的预测脚本。并根据 [Python 部署指南](../model_zoo/ernie-3.0/deploy/python/README.md) 的介绍安装预测环境,对压缩后的模型进行精度评估、性能测试以及部署。 +服务端部署可以从这里开始。可以参考 [seq_cls_infer.py](../legacy/model_zoo/ernie-3.0/deploy/python/seq_cls_infer.py) 或者 [token_cls_infer.py](../legacy/model_zoo/ernie-3.0/deploy/python/token_cls_infer.py) 来编写自己的预测脚本。并根据 [Python 部署指南](../legacy/model_zoo/ernie-3.0/deploy/python/README.md) 的介绍安装预测环境,对压缩后的模型进行精度评估、性能测试以及部署。 ### 服务化部署 -- [FastDeploy ERNIE 3.0 模型 Serving 部署示例](../model_zoo/ernie-3.0/deploy/serving/README.md) -- [基于PaddleNLP SimpleServing 的服务化部署](../model_zoo/ernie-3.0/deploy/simple_serving/README.md) +- [FastDeploy ERNIE 3.0 模型 Serving 部署示例](../legacy/model_zoo/ernie-3.0/deploy/serving/README.md) +- [基于PaddleNLP SimpleServing 的服务化部署](../legacy/model_zoo/ernie-3.0/deploy/simple_serving/README.md) ### 移动端部署 diff --git a/docs/data_prepare/dataset_list.md b/docs/data_prepare/dataset_list.md index cd86cabae768..f981a6703f81 100644 --- a/docs/data_prepare/dataset_list.md +++ b/docs/data_prepare/dataset_list.md @@ -9,7 +9,7 @@ PaddleNLP提供了以下数据集的快速读取API,实际使用时请根据 | [SQuAD](https://rajpurkar.github.io/SQuAD-explorer/) | 斯坦福问答数据集,包括SQuAD1.1和SQuAD2.0|`paddlenlp.datasets.load_dataset('squad')` | | [DuReader-yesno](https://aistudio.baidu.com/aistudio/competition/detail/49) | 千言数据集:阅读理解,判断答案极性|`paddlenlp.datasets.load_dataset('dureader_yesno')` | | [DuReader-robust](https://aistudio.baidu.com/aistudio/competition/detail/49) | 千言数据集:阅读理解,答案原文抽取|`paddlenlp.datasets.load_dataset('dureader_robust')` | -| [CMRC2018](http://hfl-rc.com/cmrc2018/) | 第二届“讯飞杯”中文机器阅读理解评测数据集|`paddlenlp.datasets.load_dataset('cmrc2018')` | +| [CMRC2018](https://hfl-rc.github.io/cmrc2018/) | 第二届“讯飞杯”中文机器阅读理解评测数据集|`paddlenlp.datasets.load_dataset('cmrc2018')` | | [DRCD](https://github.com/DRCKnowledgeTeam/DRCD) | 台達閱讀理解資料集|`paddlenlp.datasets.load_dataset('drcd')` | | [TriviaQA](http://nlp.cs.washington.edu/triviaqa/) | Washington大学问答数据集|`paddlenlp.datasets.load_dataset('triviaqa')` | | [C3](https://dataset.org/c3/) | 阅读理解单选题 |`paddlenlp.datasets.load_dataset('c3')` | @@ -22,7 +22,7 @@ PaddleNLP提供了以下数据集的快速读取API,实际使用时请根据 | [CoLA](https://nyu-mll.github.io/CoLA/) | 单句分类任务,二分类,判断句子是否合法| `paddlenlp.datasets.load_dataset('glue','cola')`| | [SST-2](https://nlp.stanford.edu/sentiment/index.html) | 单句分类任务,二分类,判断句子情感极性| `paddlenlp.datasets.load_dataset('glue','sst-2')`| | [MRPC](https://microsoft.com/en-us/download/details.aspx?id=52398) | 句对匹配任务,二分类,判断句子对是否是相同意思| `paddlenlp.datasets.load_dataset('glue','mrpc')`| -| [STSB](http://ixa2.si.ehu.es/stswiki/index.php/STSbenchmark) | 计算句子对相似性,分数为1~5| `paddlenlp.datasets.load_dataset('glue','sts-b')`| +| [STSB](https://huggingface.co/datasets/mteb/stsbenchmark-sts) | 计算句子对相似性,分数为1~5| `paddlenlp.datasets.load_dataset('glue','sts-b')`| | [QQP](https://data.quora.com/First-Quora-Dataset-Release-Question-Pairs) | 判定句子对是否等效,等效、不等效两种情况,二分类任务| `paddlenlp.datasets.load_dataset('glue','qqp')`| | [MNLI](http://www.nyu.edu/projects/bowman/multinli/) | 句子对,一个前提,一个是假设。前提和假设的关系有三种情况:蕴含(entailment),矛盾(contradiction),中立(neutral)。句子对三分类问题| `paddlenlp.datasets.load_dataset('glue','mnli')`| | [QNLI](https://rajpurkar.github.io/SQuAD-explorer/) | 判断问题(question)和句子(sentence)是否蕴含,蕴含和不蕴含,二分类| `paddlenlp.datasets.load_dataset('glue','qnli')`| diff --git a/docs/datasets.md b/docs/datasets.md index 0d5d598a7da9..e1fa5ae0bf02 100644 --- a/docs/datasets.md +++ b/docs/datasets.md @@ -9,7 +9,7 @@ PaddleNLP提供了以下数据集的快速读取API,实际使用时请根据 | [SQuAD](https://rajpurkar.github.io/SQuAD-explorer/) | 斯坦福问答数据集,包括SQuAD1.1和SQuAD2.0|`paddlenlp.datasets.load_dataset('squad')` | | [DuReader-yesno](https://aistudio.baidu.com/aistudio/competition/detail/49) | 千言数据集:阅读理解,判断答案极性|`paddlenlp.datasets.load_dataset('dureader_yesno')` | | [DuReader-robust](https://aistudio.baidu.com/aistudio/competition/detail/49) | 千言数据集:阅读理解,答案原文抽取|`paddlenlp.datasets.load_dataset('dureader_robust')` | -| [CMRC2018](http://hfl-rc.com/cmrc2018/) | 第二届“讯飞杯”中文机器阅读理解评测数据集|`paddlenlp.datasets.load_dataset('cmrc2018')` | +| [CMRC2018](https://hfl-rc.github.io/cmrc2018/) | 第二届“讯飞杯”中文机器阅读理解评测数据集|`paddlenlp.datasets.load_dataset('cmrc2018')` | | [DRCD](https://github.com/DRCKnowledgeTeam/DRCD) | 台達閱讀理解資料集|`paddlenlp.datasets.load_dataset('drcd')` | ## 文本分类 @@ -19,7 +19,7 @@ PaddleNLP提供了以下数据集的快速读取API,实际使用时请根据 | [CoLA](https://nyu-mll.github.io/CoLA/) | 单句分类任务,二分类,判断句子是否合法| `paddlenlp.datasets.load_dataset('glue','cola')`| | [SST-2](https://nlp.stanford.edu/sentiment/index.html) | 单句分类任务,二分类,判断句子情感极性| `paddlenlp.datasets.load_dataset('glue','sst-2')`| | [MRPC](https://microsoft.com/en-us/download/details.aspx?id=52398) | 句对匹配任务,二分类,判断句子对是否是相同意思| `paddlenlp.datasets.load_dataset('glue','mrpc')`| -| [STSB](http://ixa2.si.ehu.es/stswiki/index.php/STSbenchmark) | 计算句子对相似性,分数为1~5| `paddlenlp.datasets.load_dataset('glue','sts-b')`| +| [STSB](https://huggingface.co/datasets/mteb/stsbenchmark-sts) | 计算句子对相似性,分数为1~5| `paddlenlp.datasets.load_dataset('glue','sts-b')`| | [QQP](https://data.quora.com/First-Quora-Dataset-Release-Question-Pairs) | 判定句子对是否等效,等效、不等效两种情况,二分类任务| `paddlenlp.datasets.load_dataset('glue','qqp')`| | [MNLI](http://www.nyu.edu/projects/bowman/multinli/) | 句子对,一个前提,一个是假设。前提和假设的关系有三种情况:蕴含(entailment),矛盾(contradiction),中立(neutral)。句子对三分类问题| `paddlenlp.datasets.load_dataset('glue','mnli')`| | [QNLI](https://rajpurkar.github.io/SQuAD-explorer/) | 判断问题(question)和句子(sentence)是否蕴含,蕴含和不蕴含,二分类| `paddlenlp.datasets.load_dataset('glue','qnli')`| diff --git a/docs/llm/chat_template.md b/docs/llm/chat_template.md deleted file mode 120000 index cbbe14d6cd06..000000000000 --- a/docs/llm/chat_template.md +++ /dev/null @@ -1 +0,0 @@ -../../llm/docs/chat_template.md \ No newline at end of file diff --git a/docs/llm/config/baichuan/README.md b/docs/llm/config/baichuan/README.md new file mode 120000 index 000000000000..0a8c5826cad0 --- /dev/null +++ b/docs/llm/config/baichuan/README.md @@ -0,0 +1 @@ +../../../../llm/config/baichuan/README.md \ No newline at end of file diff --git a/docs/llm/config/bloom/README.md b/docs/llm/config/bloom/README.md new file mode 120000 index 000000000000..845ef16669a5 --- /dev/null +++ b/docs/llm/config/bloom/README.md @@ -0,0 +1 @@ +../../../../llm/config/bloom/README.md \ No newline at end of file diff --git a/docs/llm/config/chatglm/README.md b/docs/llm/config/chatglm/README.md new file mode 120000 index 000000000000..56999304d2d5 --- /dev/null +++ b/docs/llm/config/chatglm/README.md @@ -0,0 +1 @@ +../../../../llm/config/chatglm/README.md \ No newline at end of file diff --git a/docs/llm/config/chatglm2/README.md b/docs/llm/config/chatglm2/README.md new file mode 120000 index 000000000000..7920c90b1e88 --- /dev/null +++ b/docs/llm/config/chatglm2/README.md @@ -0,0 +1 @@ +../../../../llm/config/chatglm2/README.md \ No newline at end of file diff --git a/docs/llm/config/gemma/README.md b/docs/llm/config/gemma/README.md new file mode 120000 index 000000000000..574111aefd6c --- /dev/null +++ b/docs/llm/config/gemma/README.md @@ -0,0 +1 @@ +../../../../llm/config/gemma/README.md \ No newline at end of file diff --git a/docs/llm/config/gpt-3/README.md b/docs/llm/config/gpt-3/README.md new file mode 120000 index 000000000000..a77f7a7c1c26 --- /dev/null +++ b/docs/llm/config/gpt-3/README.md @@ -0,0 +1 @@ +../../../../llm/config/gpt-3/README.md \ No newline at end of file diff --git a/docs/llm/config/llama/README.md b/docs/llm/config/llama/README.md new file mode 120000 index 000000000000..2fea9702a2db --- /dev/null +++ b/docs/llm/config/llama/README.md @@ -0,0 +1 @@ +../../../../llm/config/llama/README.md \ No newline at end of file diff --git a/docs/llm/config/opt/README.md b/docs/llm/config/opt/README.md new file mode 120000 index 000000000000..1135dcab4f29 --- /dev/null +++ b/docs/llm/config/opt/README.md @@ -0,0 +1 @@ +../../../../llm/config/opt/README.md \ No newline at end of file diff --git a/docs/llm/config/qwen/README.md b/docs/llm/config/qwen/README.md new file mode 120000 index 000000000000..50ce789f1fd5 --- /dev/null +++ b/docs/llm/config/qwen/README.md @@ -0,0 +1 @@ +../../../../llm/config/qwen/README.md \ No newline at end of file diff --git a/docs/llm/docs/chat_template.md b/docs/llm/docs/chat_template.md new file mode 100644 index 000000000000..8487c1601b43 --- /dev/null +++ b/docs/llm/docs/chat_template.md @@ -0,0 +1,85 @@ +# 多轮对话精调教程 + +当前开源Chat 类型模型越来越多,PaddleNLP 已经集成了 [Llama](../config/llama)、[Qwen](../config/qwen)、[ChatGLM](../config/chatglm) 等系列模型,也支持[多轮对话 Prompt Template 推理](https://paddlenlp.readthedocs.io/zh/latest/get_started/chat_template.html),只需要调用`apply_chat_template` 函数即可构造将对话历史和用户最新 query 按照模型指定规则拼接到一起,实现不同模型的定制化 Prompt 规则推理。 + +此外多轮对话训练精调的应用场景也是越来越多,不同模型的多轮对话模板构造规则都不一致,为了在训练侧标准化前处理上的区别,设计了`chat_template`来解决此问题。 + +### 如何构造 `chat_template` + +只需要添加一个 chat_template 的配置即可为该模型添加相应的多轮对话精调训练支持,以`qwen-14b-chat`配置文件 + +> 以下配置参考:https://huggingface.co/Qwen/Qwen-14B-Chat/blob/main/qwen_generation_utils.py#L119 + +```json +{ + "system": "You are a helpful assistant.", + "conversation": ["\n<|im_start|>user\n{{user}}<|im_end|>\n<|im_start|>assistant\n", "{{bot}}<|im_end|>"], + "query": "\n<|im_start|>user\n{{query}}<|im_end|>\n<|im_start|>assistant\n", +} +``` + +注意点: + +1. 配置文件名默认为:`chat_template.json`。 +1. 对于 `chat_template.json`配置文件 `query`和`conversation`字段为必选项,且内容非常类似,主要是为应对推理和训练两种场景设计使用:query 只用于推理,query 和 conversation 用于训练。 +1. 由于训练和推理过程中会在文本中添加 独特token 标记,其中包括 bos_token, eos_token 以及像上述的 <|im_start|> 自定义标记等,故基于 chat_template 的分词是不会添加 special_token,也就是说 tokenizer 中的 `add_special_tokens` 参数始终要设置为 `False`。 +1. `conversation`字段为数组,且必须为两个元素,分别对应着 User 和 Bot 的对话内容,前者在训练过程中不参与 loss 的计算,后者的参与 Loss 的计算。 +1. 在训练过程中,system 文本的长度不可大于 `max_length`,当对话轮次只有一轮时,基于 token 长度来截断,伪代码为:`(system_tokens + conversation_tokens)[:max_length]`;否则将基于对话轮次来截断,详细来说就是在计算训练 token 总长度时,会从后往前计算每一轮的对话长度,如果截止当前的对话(包含 User 和 Bot 的总 tokens 长度)token 长度大于 `max_length`,此时将当前对话轮次给截断,也不计算后续历史对话数据,直接构造训练数据。 +1. 在训练过程中,system 必须存在,不能被截断。 + +#### 如何使用 `chat_template` 进行训练 + +以`qwen-14b-chat`基座模型为例,首先需要调整的是训练数据部分,需要保证如下格式: + +```json +{"src": ["user-1", "user-2", ..., "user-n"], "tgt": ["bot-1", "bot-2", ..., "bot-n"]} +... +``` + +其次就是将构造好的`chat_template.json`文件传入到 `llm/run_finetune.py` 模块当中: + +* 使用模型自带chat-template + +> 并不是所有的模型支持chat-template,PaddleNLP 正在全力支持,可根据是否有下载 `chat_template.json` 文件来判断该模型是否支持 chat-template。 + +```shell +python run_finetune.py ... --model_name_or_path qwen/qwen-7b-chat --chat_template qwen/qwen-7b-chat +``` + +此时当 `chat_template` 参数和 `model_name_or_path` 参数一致时,此时将默认使用模型自带的chat_template.json` 文件。 + +* 使用自定义 chat-template + +```shell +python run_finetune.py ... --chat_template ./qwen_14b_chat_template.json +``` + +1. 当 `chat_template` 参数和 `model_name_or_path` 参数一致时,此时将默认使用模型自带的 `chat_template.json` 文件。 +1. 当 `chat_template` 参数为文件路径时,此时将使用该文件中的 `chat_template` 配置。 +1. 当 `chat_template` 参数为空时,此时不使用 `chat_template` 配置进行训练。 + +#### 如何自定义system prompt + +如果想要在训练或者推理的过程中动态调整 system prompt,需要进行以下调整: + +1. 则需要保证 `chat_template.json` 文件中的 system 配置是包含jinja2 中的变量占位符(比如:`<|im_start|>user\n{{user}}<|im_end|>` 中的 {{user}} 就是一个变量占位符),同时尽量让其保留默认参数,比如上述配置可调整成: + +> 需要开发者手动调整 `chat_template.json` 实现动态调整 system prompt。 + +```diff +{ +- "system": "You are a helpful assistant.", ++ "system": "{{system | 'You are a helpful assistant.'}}", + "conversation": ["\n<|im_start|>user\n{{user}}<|im_end|>\n<|im_start|>assistant\n", "{{bot}}<|im_end|>"], + "query": "\n<|im_start|>user\n{{query}}<|im_end|>\n<|im_start|>assistant\n", +} +``` + +2. 训练文本数据中需要配置 `context` 字段将 `system` 字段给传递进去,示例数据为: + +```json +{"src": ["user-1", "user-2", ..., "user-n"], "tgt": ["bot-1", "bot-2", ..., "bot-n"], "context": {"system": "你是一个擅长做任务的人工智能助手"}} +... +``` + +在渲染 chat_template 的时候将以上数据中的`context` 作为jinja2 的上下文数据,这样就可以在训练数据集中定制每个训练数据的 system prompt。 diff --git a/docs/llm/docs/finetune.md b/docs/llm/docs/finetune.md new file mode 100644 index 000000000000..0895265fe8d3 --- /dev/null +++ b/docs/llm/docs/finetune.md @@ -0,0 +1,225 @@ +# 飞桨大模型套件精调文档 + +## 1.精调特色介绍 + +- **Zero Padding策略** + +模型的输入是定长序列数据,每个文本的序列长度不一样,所以是变长的序列,一般的做法是使用pad token进行填充,通常会占训练token 50%或更多。Zero Padding策略提出在单条数据中拼接多个文本为长文本,使用attention_mask保证精度对齐。通常使用Zero Padding策略时会将batch size设为1,训练过程中没有pad token参与计算,有效提高模型训练效率。精调训练只需要添加一个`zero_padding`为`True`的配置,即可开启Zero Padding训练。 + + +
+ llm +
+
+ + Zero Padding策略图示意,能够有效减少无效Pad Token进行训练 + +
+ + + +- **PEFT结合低比特和分布式策略** + +PEFT(Parameter-Efficient Fine-Tuning)相比于全量参数大大降低了所需的显存资源,但对于百亿级别的模型对训练资源仍然要求很高。为了减少显存资源占用,PEFT中提供将16位浮点数的主干模型转化为4比特或8比特的量化模型,只有当权重参与计算时才将低比特的主干模型反量化为浮点数模型。PaddleNLP中提供量化为**INT4、INT8、NF4、FP4**等多种低比特数据类型。 + +对于千亿参数级别的模型,PEFT配合低比特策略并不能在单卡训练。PaddleNLP中支持上述所有PEFT策略包含低比特策略使用数据并行(data parallel)、张量并行(tensor parallel)、流水线并行(pipeline parallel)策略、分组参数切分并行 +(Sharding)。PEFT、低比特策略、分布式能力三者组合,PaddleNLP在有限计算资源下,可以将模型微调拓展到单机(80G * 8)**千亿参数级别**。 +
+ llm +
+ +- **统一对话模板** + +当前开源Chat 类型模型越来越多,PaddleNLP 已经集成了 [LLaMA/LLaMA2](../config/llama)、[Baichuan/Baichuan2](../config/baichuan)、[ChatGLM](../config/chatglm)、[ChatGLM2/ChatGLM3](../config/chatglm2)、[Qwen](../config/qwen)、[Bloom](../config/bloom)、[GPT-3](../config/gpt-3)等系列模型,也支持[多轮对话 Prompt Template 推理](https://paddlenlp.readthedocs.io/zh/latest/get_started/chat_template.html),只需要调用`apply_chat_template` 函数即可构造将对话历史和用户最新 query 按照模型指定规则拼接到一起,实现不同模型的定制化 Prompt 规则推理。 + +此外多轮对话训练精调的应用场景也是越来越多,不同模型的多轮对话模板构造规则都不一致,为了在训练侧标准化前处理上的区别,设计了`chat_template`来解决此问题。只需要添加一个`chat_template` 的配置即可为该模型添加相应的多轮对话精调训练支持,具体的配置可看[多轮对话文档](./chat_template.md)。 + +## 2. 快速开始 + +接下来我们将以**Llama 2**为例介绍如何使用统一脚本进行SFT、LoRA、Prefix Tuning。 +### 2.1 环境准备 + +- PaddlePaddle develop +- PaddleNLP develop +- PaddleSlim develop + +git clone 代码到本地,即可开始。 + +```bash + git clone https://github.com/PaddlePaddle/PaddleNLP.git + # pip install ./PaddleNLP 使用develop版本 + cd PaddleNLP/llm + # 到达运行目录 +``` + +### 2.2 精调数据准备 + +为了方便用户测试,我们也提供示例数据集[广告生成数据集](https://bj.bcebos.com/paddlenlp/datasets/examples/AdvertiseGen.tar.gz),用户也可以仿照数据集的格式制作自己的数据集进行精调。我们支持的数据格式是每行包含一个字典,每个字典包含以下字段: + +- `src` : `str, List(str)`, 模型的输入指令(instruction)、提示(prompt),模型应该执行的任务。 +- `tgt` : `str, List(str)`, 模型的输出。 + +样例数据: +``` +{"src": "类型#裙*颜色#蓝色*风格#清新*图案#蝴蝶结", "tgt": "裙身处采用立体蝴蝶结装饰辅以蓝色条带点缀,令衣身造型饱满富有层次的同时为其注入一丝甜美气息。将女孩清新娇俏的一面衬托而出。"} +... +``` + +### 2.3 SFT + +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)等多种分布式训练策略。 + +``` +python -u -m paddle.distributed.launch --gpus "0,1,2,3,4,5,6,7" run_finetune.py ./config/llama/sft_argument.json +``` + +1. `zero_padding`设为True有助于提高训练效率。建议将`per_device_train_batch_size`设为1,使用`gradient_accumulation_steps`控制batch size,适当调整`max_length`取值。 +2. 设置`use_flash_attention`为True使用FlashAttention。 +3. SFT API支持4D并行策略,可以通过控制`tensor_parallel_degree`、`pipeline_parallel_degree`、 `sharding`、`sharding_parallel_degree`调整 + +### 2.4 LoRA + +``` +# 单卡训练 +python run_finetune.py ./config/llama/lora_argument.json + +# 张量并行分布式训练 +python -u -m paddle.distributed.launch --gpus "0,1,2,3,4,5,6,7" run_finetune.py ./config/llama/lora_argument.json +``` + +**Note:** +1. `zero_padding`设为True有助于提高训练效率。建议将`per_device_train_batch_size`设为1,使用`gradient_accumulation_steps`控制batch size,适当调整`max_length`取值。 +2. LoRA策略默认应用在所有Linear层 +3. 可以通过设置`weight_quantize_algo`将主干模型量化低比特,例如'weight_only_int4','weight_only_int8','nf4'或'fp4'。具体参考精调参数介绍 +4. 设置`use_flash_attention`为True使用FlashAttention。 +5. LoRA API支持4D并行策略,可以通过控制`tensor_parallel_degree`、`pipeline_parallel_degree`、 `sharding`、`sharding_parallel_degree`调整并行训练策略,可拓展至**单机LoRA微调千亿模型**。 +6. LoRA策略默认应用在所有Linear层。 +7. 可以通过修改`lora_rank`改变LoRA算法中rank(秩)的值。 + +### 2.5 Prefix Tuning + +``` +# 单卡训练 +python run_finetune.py ./llama/pt_argument.json + +# 张量并行分布式训练 +python -u -m paddle.distributed.launch --gpus "0,1,2,3,4,5,6,7" run_finetune.py ./llama/pt_argument.json +``` + +**Note:** +1. `zero_padding`设为True有助于提高训练效率。建议将`per_device_train_batch_size`设为1,使用`gradient_accumulation_steps`控制batch size,适当调整`max_length`取值。 +2. 可以通过设置`weight_quantize_algo`将主干模型量化低比特,例如'weight_only_int4','weight_only_int8','nf4'或'fp4'。具体参考精调参数介绍 +3. 设置`use_flash_attention`为True使用FlashAttention。 +4. Prefix Tuning API支持4D并行策略,可以通过控制`tensor_parallel_degree`、`pipeline_parallel_degree`、 `sharding`、`sharding_parallel_degree`调整并行训练策略,可拓展至**单机LoRA微调千亿模型**。 +5. 可以通过`num_prefix_tokens`控制Prefix Tuning策略中Prefix Token数量。 + + +## 3.精调参数介绍 +  模型参数(ModelArgument)
+ +- `model_name_or_path`: 预训练模型名称或者本地的模型路径,用于热启模型和分词器,默认为None。每个模型**支持模型权重**详见各模型目录。 +- `use_flash_attention`: 模型是否使用FlashAttention,默认为False。 +- `lora`: 是否开启LoRA微调策略,默认为False。 +- `lora_path`: LoRA参数和配置路径,对LoRA参数进行初始化,默认为None。 +- `lora_rank`: LoRA算法中rank(秩)的值,默认为8。 +- `prefix_tuning`: 是否使用Prefix Tuning策略,默认为False。 +- `num_prefix_tokens`: Prefix Tuning策略中Prefix Token数量,默认为128。 +- `from_aistudio`: 模型权重是否从Aistudio下载,默认为False。 +- `save_to_aistudio`: 模型权重是否保存到Aistudio,默认为False。 +- `aistudio_repo_id`: 模型权重保存到Aistudio的repo id,默认为None。 +- `aistudio_repo_private`: 模型权重保存到Aistudio的repo是否为私有,默认为True。 +- `aistudio_repo_license`: 模型权重保存到Aistudio的repo license,默认为"Apache License 2.0"。 +- `aistudio_token`: 模型权重保存到Aistudio的token,默认为None。如果save_to_aistudio为True,且环境变量没有设置相应token,必须传入。 +- `neftune`: 是否使用[NEFT](https://arxiv.org/abs/2310.05914),进行微调。默认为False。 +- `neftune_noise_alpha`: NEFT alpha参数,默认为5.0。 + +
+ +  数据参数(DataArgument)
+ +- `dataset_name_or_path`: 本地数据集目录或内置数据集名称,默认为None。脚本已适配单文件和多文件,会自己寻找`dataset_name_or_path/train.json` 或者 `dataset_name_or_path/train/*.json`作为训练集文件, 以及`dataset_name_or_path/dev.json` 或者 `dataset_name_or_path/dev/*.json`作为验证集文件。 +- `task_name`: 用于选择内置数据集中的具体任务,默认为None。 +- `eval_with_do_generation`: 在模型效果评估的时候是否调用model.generate,默认为False。设置为True时,指标为ppl, accuracy;设置为False时,指标为BLEU4/Rouge,建议将`metric_for_best_model`设为bleu4。 +- `save_generation_output`: 当`eval_with_do_generation`设为True,是否将生成结果保存在`generated_output.json`文件中,默认为False。 +- `zero_padding`:是否使用Zero Padding数据流(减少Padding冗余计算,大幅提升有效Token计算效率),默认为False。当`eval_with_do_generation`设为True,评估过程不支持Zero Padding数据流。。 +- `src_length`: 模型输入上下文最大token长度,默认为1024。 +- `max_length`:模型输入(上下文+生成内容)的最大token长度, 默认为2048。当`zero_padding`设为True的时候,同时也为Zero Padding数据流模型训练输入最大长度,通常建议设为模型允许输入最大长度,同时`per_device_train_batch_size`设为1,使用`gradient_accumulation_steps`控制batch size。 +- `lazy`:设置为False则使用`MapDataset`,设置为True则使用`IterDataset`,默认为False。对于数据量较大的时候建议设为True,`IterDataset`可以避免一次性将所有数据读入内存,注意需要设置`max_steps`并且`evaluation_strategy`和`save_strategy`设为`steps` + +
+ + +  生成参数(GenerateArgument)
+ +注:以下参数仅在`eval_with_do_generation`为True,调用model.generate()时生效。 + +- `top_k`: “采样”策略中为 top-k 过滤保留的最高概率标记的数量。默认为1,等价于贪心策略。 +- `top_p`:“采样”策略中 top-p 过滤的累积概率。默认为1.0,表示不起作用。 +
+ +  训练参数(TrainingArguments)
+ +以下仅介绍TrainingArguments部分常用参数,详情请参见[TrainingArguments文档](https://paddlenlp.readthedocs.io/zh/latest/trainer.html)。 + +- `output_dir`: 用于保存相关的文件目录,主要包括模型相关文件、训练过程中的checkpoint、分词器相关文件、评估的结果文件,默认为None。 +- `per_device_train_batch_size`: 训练集训练过程批处理大小,对应 micro batch size,默认为8。该参数需要根据具体的数据集来设定,该参数越大,占用显存越高,训练代价越大;反之,占用显存越小,训练速度越快。 +- `gradient_accumulation_steps`:梯度累积步数,顾名思义,就是将多次计算得到的梯度值进行累加,然后一次性进行参数更新,默认为1。等效于将原有训练batch size*gradient_accumulation_steps。 +- `per_device_eval_batch_size`: 验证集批处理大小,对应 micro batch size,默认为8。该参数越大,占用显存越高;该参数越小,占用显存越低。 +- `eval_accumulation_steps`:在将结果移动到CPU之前,累积输出张量的预测步骤数。如果如果未设置,则在移动到CPU之前,整个预测都会在GPU上累积(速度更快需要更多的显存),默认为None。 +- `num_train_epochs`:模型训练的轮次,默认为3。 +- `learning_rate`:优化器的初始学习率,默认为 5e-05。 +- `warmup_steps`: warmup的步数,默认为0。当warmup_steps>0时,会覆盖warmup_ratio的设置。 +- `logging_steps`: 日志打印的频率,仅当logging_strategy=="step"生效,默认为 500。如果希望看到较快的日志反馈或者即时的训练的速度,可以减小logging_steps。 +- `evaluation_strategy`: 评估策略,默认为no。"no":训练期间不进行评估;"steps":在每eval_steps结束进行;"epoch":在每个 epoch 结束时进行。 +- `save_strategy`: 保存策略,默认为no。"no":训练期间不进行评估;"steps":在每eval_steps结束进行;"epoch":在每个 epoch 结束时进行。 +- `fp16`: 是否需要开启FP16训练,开启FP16训练可以加速训练,默认为False。 +- `bf16`: 是否需要开启BF16训练,开启BF16训练可以加速训练,默认为False。 +- `fp16_opt_level`: 可设置O1或者O2,在 O1 级别下,在白名单中的算子将使用 float16/bfloat16 计算,在黑名单中的算子将使用 float32 计算。在 O2 级别下,模型的参数被转换为 float16/bfloat16, 如果算子的浮点型输入全是 float16/bfloat16,算子才会采用 float16/bfloat16 计算,若任意浮点型输入是 float32 类型,算子将采用 float32 计算。默认为O1。 +- `do_train`: 是否打开训练,默认为False。 +- `do_eval`: 是否打开评估,默认为False。 +- `disable_tqdm`: 是否关掉tqdm的进度条,默认为False。如果需要预估整体的训练时长,可以打开该配置,实时观察训练进度。 +- `load_best_model_at_end`: 训练结束后是否加载最优模型,通常与`metric_for_best_model`配合使用,默认为False。 +- `metric_for_best_model`: 最优模型指标,如"accuarcy"等,用于比较模型好坏,默认为None。 +- `recompute`: 重计算,暂支持full策略。开启后可降低显存以达到增大batch size的目的,默认为False。 +- `save_total_limit`: 保留checkpoint的个数,老的checkpoint会被删除,默认为None。 +- `tensor_parallel_degree`: 此参数tensor_parallel_degree表示将一层transformer结构的份数,该方法对通信开销较大, 建议 tensor_parallel_degree<=8, 尽量使用机器内部通信。默认为-1,表示不启用张量并行。 +- `pipeline_parallel_degree`: 表示划分流水线的大小.(假设该参数为4, 模型12层, 则每一个pp stage 包含3层模型) 默认值-1, 表示不启用流水线并行。 + +
+ + +## 4.分布式策略参数合并 + +**如果开启unified_checkpoint则不需要合参**。我们使用张量并行(TP,Tensor Parallelism)和 流水线并行(PP,Pipeline Parallelism)训练过程中,为了节省TP参数合并时间通常在中间checkpoint将参数存储为多个TP和PP参数分片,可以使用提供的分片合并参数脚本进行参数合并。 + +``` +python merge_tp_and_pp_params.py \ + --model_name_or_path ./checkpoints/llama_sft_ckpts/checkpoint-100 \ + --pp 2 --tp 4 +``` + +  脚本参数介绍
+- `model_name_or_path`: 必须,本地的TP模型参数路径,默认为None。 +- `device`: 运行环境,默认为gpu。 +
+ +## 5.LoRA 参数合并 + +为了后续的**压缩**和**静态图推理**方便,我们提供LoRA参数合并脚本,可以将LoRA参数合并到主干模型并保存相应的权重。 +``` +python merge_lora_params.py \ + --model_name_or_path ./checkpoints/sft_ckpts \ + --lora_path ./checkpoints/lora_ckpts \ + --output_path ./checkpoints/lora_merge \ + --device "gpu" \ + --safe_serialization True +``` + +  脚本参数介绍
+ +- `lora_path`: LoRA参数和配置路径,对LoRA参数进行初始化,默认为None。 +- `model_name_or_path`: 必须,主干模型参数路径,默认为None。 +- `merge_model_path`: 必须,合并参数后保存路径,默认为None。 +- `device`: 运行环境,默认为gpu。 +- `safe_serialization`: 是否保存为safetensor格式,默认为True。 +
diff --git a/docs/llm/docs/inference.md b/docs/llm/docs/inference.md new file mode 100644 index 000000000000..c34f31e78101 --- /dev/null +++ b/docs/llm/docs/inference.md @@ -0,0 +1,248 @@ +# 大模型推理教程 + +PaddleNLP除了提供常用模型推理外,还提供了高性能推理,内置动态插入和全环节算子融合策略,极大加快并行推理的速度。 + +git clone 代码到本地,即可开始。 + +```bash + git clone https://github.com/PaddlePaddle/PaddleNLP.git + # pip install ./PaddleNLP 使用develop版本 + cd PaddleNLP/llm + # 到达运行目录 +``` + +## 1. 常用模型推理 +PaddleNLP 提供了动态图推理和静态图推理两种方式,方便用户快速验证模型推理效果(包含LoRA、PrefixTuning) + +### 1.1 动态图推理 +```shell +# 动态图模型推理命令参考 +python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --data_file ./data/dev.json --dtype float16 +``` +对于LoRA、PrefixTuning 模型只需额外传入相应的lora_path或prefix_path即可,如:`--lora_path ./checkpoints/llama_lora_ckpts`或`--prefix_path ./checkpoints/llama_prefix_ckpts`,详见推理参数减少。 + +### 1.2 静态图推理 + +```shell +# 静态图模型推理命令参考, LoRA需要先合并参数,Prefix Tuning暂不支持 +# step1 : 静态图导出 +python ./predict/export_model.py --model_name_or_path meta-llama/Llama-2-7b-chat --output_path ./inference --dtype float16 +# step2: 静态图推理 +python ./predict/predictor.py --model_name_or_path ./inference --data_file ./data/dev.json --dtype float16 --mode static +``` + +## 2. 高性能模型推理 + +高性能推理内置动态插入和全环节算子融合策略,隐藏了底层实现的细节,实现了开箱即用高性能并行推理能力。 +
+ llm +
+
+ + 飞桨高性能推理算子融合示意图 + +
+ +
+ llm +
+
+ + 动态插入图解 & 飞桨高性能模型推理性能图 + +
+ +PaddleNLP 中已经添加高性能推理模型相关实现,支持: + +| Model | Inference Model | PTuning | WINT8 | PTQ-A8W8 | +|----------------------------------|-----------------|---------|-------|----------| +| [LLaMA1/2](../config/llama) | ✅ | ✅ | ✅ | ✅ | +| [ChatGLM](../config/chatglm) | ✅ | ✅ | ✅ | ❌ | +| [ChatGLM2](../config/chatglm2) | ✅ | ❌ | ❌ | ❌ | +| [Bloom](../config/bloom) | ✅ | ✅ | ✅ | ❌ | +| [GPT-3](../config/gpt-3) | ✅ | ❌ | ❌ | ❌ | +| [Qwen](../config/qwen) | ✅ | ❌ | ❌ | ❌ | +| [BaiChuan-7B](../config/baichuan) | ✅ | ✅ | ✅ | 🚧 | +| [BaiChuan2-7B](../config/baichuan) | ✅ | ✅ | ✅ | 🚧 | +| [BaiChuan2-13B](../config/baichuan) | 🚧 | 🚧 | 🚧 | 🚧 | + +* ✅: Supported +* 🚧: In Progress +* ❌: Not Supported +* WINT8:指Weight-Only Quantization INT8,即对权重进行INT8量化的模型。 +* PTQ-A8W8:指使用PTQ对线性层的激活和权重都量化为INT8的模型。 + +为了进一步提升推理的吞吐,我们基于PageAttention的思想设计并实现了BlockAttention,在保持高性能推理和动态插入的基础上可以动态地为cachekv分配存储空间,极大地节省显存,从而在同一时刻处理更多的query以获得吞吐的提升。下面分别给出关闭BlockAttention和打开BlockAttention进行高性能推理的命令参考。 + +### 2.2 环境准备 + +- PaddleNLP develop +- PaddlePaddle develop + +PaddleNLP 针对于Transformer 系列编写了高性能自定义算子,提升模型在推理和解码过程中的性能,使用之前需要预先安装自定义算子库: + +```shell +git clone https://github.com/PaddlePaddle/PaddleNLP +#GPU设备安装自定义算子 +cd ./paddlenlp/csrc && python setup_cuda.py install +#XPU设备安装自定义算子 +cd ./paddlenlp/csrc/xpu/src && sh cmake_build.sh +``` + +### 2.3 关闭BlockAttention的高性能推理 + +#### 2.3.1 动态图推理 + +```shell +# 动态图模型推理命令参考 +python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --dtype float16 + +# PrefixTuning动态图推理参考 +python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --dtype float16 --export_precache true --prefix_path ./checkpoints/llama_prefix_ckpts + +# Weight Only Int8 动态图推理参考 +python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --dtype float16 --quant_type weight_only_int8 + +# PTQ-A8W8推理命令参考 +python ./predict/predictor.py --model_name_or_path checkpoints/llama_ptq_ckpts --inference_model --dtype float16 +``` +**Note**: +1. LoRA 模型在推理之前是需要合并参数,详细可见:[合并 LoRA 参数](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/tools/merge_lora_params.py)。 +2. PrefixTuning推理需要传入相应的pre_cache,需要额外设置`export_precache`为`true`,并且传入对应的PrefixTuning参数保存路径`prefix_path`。 +3. 使用Weight Only Int8 推理需要额外传入 `quant_type`。 + +#### 2.3.2 静态图推理 +**step1:动转静** +```shell +# 动转静命令参考 +python ./predict/export_model.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --output_path ./inference --dtype float16 + +# PrefixTuning动转静命令参考 +python ./predict/export_model.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --output_path ./inference --dtype float16 --export_precache true + +# Weight Only Int8 动转静命令参考 +python ./predict/export_model.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --output_path ./inference --dtype float16 --quant_type weight_only_int8 + +# PTQ-A8W8动转静命令参考 +python ./predict/export_model.py --model_name_or_path checkpoints/llama_ptq_ckpts --inference_model --output_path ./inference --dtype float16 +``` +**Note**: +1. LoRA 模型在推理之前是需要合并参数,详细可见:[合并 LoRA 参数](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/tools/merge_lora_params.py)。 +2. PrefixTuning推理需要传入相应的pre_cache,需要额外设置`export_precache`为`true`。 +3. 使用Weight Only Int8 推理需要额外传入 `quant_type`。 +4. A8W8推理传入的 `model_name_or_path` 为PTQ校准产出的量化模型。 + +**step2:静态图推理** +```shell +# 静态图推理命令参考 +python ./predict/predictor.py --model_name_or_path ./inference --inference_model --quant_type weight_only_int8 --dtype "float16" --mode "static" + +# PrefixTuning静态图推理命令参考 +python ./predict/predictor.py --model_name_or_path ./inference --inference_model --quant_type weight_only_int8 --dtype "float16" --mode "static" --export_precache true --prefix_path ./checkpoints/llama_prefix_ckpts + +# Weight Only Int8 静态图推理命令参考 +python ./predict/predictor.py --model_name_or_path ./inference --inference_model --quant_type weight_only_int8 --dtype "float16" --mode "static" --quant_type weight_only_int8 + +# PTQ-A8W8静态图推理命令参考 +# 以下环境变量用于开启int8矩阵乘的算法选择以获得更快的推理速度,打开之后第一次执行会执行算法选择从而导致速度较慢。 +export FLAGS_use_autotune=1 +export FLAGS_cublaslt_exhaustive_search_times=10 +export FLAGS_cache_inference_while_scope=1 + +python ./predict/predictor.py --model_name_or_path ./inference --inference_model --quant_type weight_only_int8 --dtype "float16" --mode "static" +``` +**Note**: +1. LoRA 模型在推理之前是需要合并参数,详细可见:[合并 LoRA 参数](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/tools/merge_lora_params.py)。 +2. PrefixTuning推理需要传入相应的pre_cache,需要额外设置`export_precache`为`true`,并且传入对应的PrefixTuning参数保存路径`prefix_path`。 +3. 使用Weight Only Int8 推理需要额外传入 `quant_type`。 +4. A8W8推理传入的 `model_name_or_path` 为PTQ校准产出的量化模型。 + + +### 2.4 打开BlockAttention的高性能推理 + +#### 2.4.1 动态图推理 + +```shell +# 动态图模型推理命令参考 +python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --dtype float16 --block_attn + +# XPU设备动态图模型推理命令参考 +python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --dtype float16 --block_attn --device xpu + +# Weight Only Int8 动态图推理参考 +python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --dtype float16 --quant_type weight_only_int8 --block_attn + +# PTQ-A8W8推理命令参考 +python ./predict/predictor.py --model_name_or_path checkpoints/llama_ptq_ckpts --inference_model --dtype float16 --block_attn + +# CacheKV 动态量化推理命令参考 +python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --dtype float16 --block_attn --cachekv_int8 +``` + +#### 2.4.2 静态图推理 +**step1:动转静** +```shell +# 动转静命令参考 +python ./predict/export_model.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --output_path ./inference --dtype float16 --block_attn + +# XPU设备动转静命令参考 +python ./predict/export_model.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --output_path ./inference --dtype float16 --block_attn --device xpu + +# Weight Only Int8 动转静命令参考 +python ./predict/export_model.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --output_path ./inference --dtype float16 --quant_type weight_only_int8 --block_attn + +# PTQ-A8W8动转静命令参考 +python ./predict/export_model.py --model_name_or_path checkpoints/llama_ptq_ckpts --inference_model --output_path ./inference --dtype float16 --block_attn + +# CacheKV 动态量化动转静命令参考 +python ./predict/export_model.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --output_path ./inference --dtype float16 --block_attn --cachekv_int8 +``` + +**step2:静态图推理** +```shell +# 静态图推理命令参考 +python ./predict/predictor.py --model_name_or_path ./inference --inference_model --dtype "float16" --mode "static" --block_attn + +# XPU设备静态图推理命令参考 +python ./predict/predictor.py --model_name_or_path ./inference --inference_model --dtype "float16" --mode "static" --block_attn --device xpu + +# Weight Only Int8 静态图推理命令参考 +python ./predict/predictor.py --model_name_or_path ./inference --inference_model --dtype "float16" --mode "static" --quant_type weight_only_int8 --block_attn + +# PTQ-A8W8静态图推理命令参考 +# 以下环境变量用于开启int8矩阵乘的算法选择以获得更快的推理速度,打开之后第一次执行会执行算法选择从而导致速度较慢。 +export FLAGS_use_autotune=1 +export FLAGS_cublaslt_exhaustive_search_times=10 +export FLAGS_cache_inference_while_scope=1 + +python ./predict/predictor.py --model_name_or_path ./inference --inference_model --dtype "float16" --mode "static" --block_attn + +# CacheKV 动态量化8静态图推理命令参考 +python ./predict/predictor.py --model_name_or_path ./inference --inference_model --dtype "float16" --mode "static" --cachekv_int8 --block_attn +``` +**Note**: +1. 使用Weight Only Int8 推理需要额外传入 `quant_type`。 +2. A8W8推理传入的 `model_name_or_path` 为PTQ校准产出的量化模型。 + + +## 3. 推理参数介绍 + +- `model_name_or_path`: 必须,预训练模型名称或者本地的模型路径,用于热启模型和分词器,默认为None。 +- `batch_size`: 批处理大小,默认为8。该参数越大,占用显存越高;该参数越小,占用显存越低。 +- `src_length`: 模型输入上下文最大token长度,默认为1024。 +- `max_length`:模型输入(上下文+生成内容)的最大token长度, 默认为2048。 +- `lora_path`: LoRA参数和配置路径,对LoRA参数进行初始化,默认为None。 +- `prefix_path`: Prefix Tuning参数和配置路径,对Prefix Tuning参数进行初始化,默认为None。 +- `top_k`: “采样”策略中为 top-k 过滤保留的最高概率标记的数量。默认为1,等价于贪心策略。 +- `top_p`:“采样”策略中 top-p 过滤的累积概率。默认为1.0,表示不起作用。 +- `temperature`:“采样”策略中会对输出logit除以temperature。默认为1.0,表示不起作用。 +- `data_file`:必须,待推理json文件,默认为None。 +- `output_file`:保存推理结果文件名,默认为output.json。 +- `device`: 运行环境,默认为gpu。 +- `dtype`: 模型参数dtype,默认为None。如果没有传入`lora_path`、`prefix_path`则必须传入 +- `model_type`: 初始化不同类型模型,gpt-3: GPTForCausalLM; ernie-3.5-se: Ernie35ForCausalLM; 默认为 None。 +- `mode`: 使用动态图或者静态图推理,值为:[dynamic, static],默认为 dynamic。 +- `inference_model`: 是否使用Inference Model 推理,默认值为 False。 +- `block_attn`: 是否使用Block Attention 推理, 默认值为False。 +- `block_size`: 如果使用Block Attention 推理,指定一个Block可以存储的token数量,默认值为64。 +- `cachekv_int8`: 是否使用cachekv int8量化用于节省显存,默认值为False。 diff --git a/docs/llm/peft.md b/docs/llm/docs/peft.md similarity index 99% rename from docs/llm/peft.md rename to docs/llm/docs/peft.md index f720138c6d23..de3b7a65c15b 100644 --- a/docs/llm/peft.md +++ b/docs/llm/docs/peft.md @@ -277,4 +277,4 @@ key function 该函数会遍历整个权重参数列表,对于每个权重参数weight,统计所有进行梯度更新的参数,最后将信息打印出来。 ``` -更详细的使用可以参考[finetuning 脚本](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/run_finetune.py)版本, 以及对应的启动脚本编写方式(写在 [README.md](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/causallm/README.md)文件中)。 +更详细的使用可以参考[finetuning 脚本](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/run_finetune.py)版本, 以及对应的启动脚本编写方式(写在 [README.md](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/README.md)文件中)。 diff --git a/docs/llm/docs/quantization.md b/docs/llm/docs/quantization.md new file mode 100644 index 000000000000..eadaa77397a2 --- /dev/null +++ b/docs/llm/docs/quantization.md @@ -0,0 +1,111 @@ +# 大模型量化教程 + +## 1.算法介绍 + +大模型量化将16位、32位浮点数的模型参数或激活量化为4位或8位整数能够有效降低模型存储空间和计算资源需求,同时加速推理速度。工具链量化算法包含: +- **PTQ**。PaddleSlim 团队自研的自适应PiecewiseSearchSmooth(PSS)量化算法,在[SmoothQuant](https://arxiv.org/abs/2211.10438)和[Outlier Suppression+](https://arxiv.org/abs/2304.09145)基础上 +新增PieceWiseSearch参数搜索算法并将算法扩展至**所有线性层**,对模型权重和激活分布进行调整,减少后续A8W8 PTQ量化损失。 + + +- **GPTQ**。[GPTQ](https://arxiv.org/abs/2210.17323)是业界主流的权重量化算法,可以将大模型权重进行4位整数无损量化,提高模型推理速度。 + +- **AWQ**。[GPTQ](https://arxiv.org/abs/2306.00978)是业界主流的权重量化算法,可以将大模型权重进行4位整数无损量化,提高模型推理速度。 + +
+ llm +
+
+ + 飞桨大模型量化算法 + +
+ +更多PaddleSlim实现细节详见[量化策略详细教程](https://github.com/PaddlePaddle/PaddleSlim/blob/develop/docs/zh_cn/tutorials/quant/advanced_quantization.md) + + + +## 2. 快速开始 + +### 2.1 环境准备 + +- PaddleSlim develop +- PaddlePaddle develop +- PaddleNLP develop + +git clone 代码到本地,即可开始。 + +```bash + git clone https://github.com/PaddlePaddle/PaddleNLP.git + # pip install ./PaddleNLP 使用develop版本 + cd PaddleNLP/llm + # 到达运行目录 +``` + +### 2.2 数据准备 + +量化中默认使用训练集作为校正(Calibartion)数据集,开发集作为评估数据集。为了方便用户测试,我们也提供示例数据集[广告生成数据集](https://bj.bcebos.com/paddlenlp/datasets/examples/AdvertiseGen.tar.gz)。如果希望使用其他数据作为校正数据集,则在数据目录下新增`quant.json`文件,用户也可以仿照数据集的格式制作自己的数据集进行精调。我们支持的数据格式是每行包含一个字典,每个字典包含以下字段: + +- `src` : `str, List(str)`, 模型的输入指令(instruction)、提示(prompt),模型应该执行的任务。 +- `tgt` : `str, List(str)`, 模型的输出。 + +样例数据: +``` +{"src": "类型#裙*颜色#蓝色*风格#清新*图案#蝴蝶结", "tgt": "裙身处采用立体蝴蝶结装饰辅以蓝色条带点缀,令衣身造型饱满富有层次的同时为其注入一丝甜美气息。将女孩清新娇俏的一面衬托而出。"} +... +``` + + +### 2.3 PTQ 量化 + +``` +python run_finetune.py ./config/llama/ptq_argument.json +``` + +### 2.4 GPTQ 量化 + +``` +python run_finetune.py ./config/llama/gptq_argument.json +``` + +### 2.5 AWQ 量化 + +``` +python run_finetune.py ./config/llama/awq_argument.json +``` + +### 2.6 量化参数介绍 + +  量化参数(QuantArgument)
+ +- `quant_type`: PTQ,QAT量化类型,默认为A8W8。支持A8W8,WINT4,WINT8:A8W8指对激活(输入)进行INT8量化,对模型权重进行INT8量化;WINT4指仅对模型权重进行INT4量化,后续使用WeightOnly进行推理;WINT8指仅对模型权重进行INT8量化,后续使用WeightOnly进行推理。 +- `do_ptq`: 是否进行PTQ量化,默认为False。 +- `weight_quant_method`: 权重量化方式,现可选groupwise或者abs_max_channel_wise。 +- `ptq_step`: PTQ量化步数,也即模型前向次数,默认为32。 +- `shift`: 是否在PTQ量化前进行[Shift策略](https://arxiv.org/abs/2304.09145),默认为False。使用Shift策略需要设`do_ptq`为True。 +- `shift_all_linear`: 是否对模型中所有Linear层应用Shift,如果为True,将会对非LayerNorm-Linear组合的Linear进行Shift,并且添加两个op,默认为False +- `shift_sampler`: Shift策略使用的sampler,默认为none。可选none,ema:none指直接利用MinMax计算Shift中的零点;ema指使用指数平均计算Shift中零点。 +- `shift_step`: Shift采样步数,也即模型前向次数,默认为32。 +- `smooth`: 是否在PTQ量化前进行[SmoothQuant策略](https://arxiv.org/abs/2211.10438),默认为False。使用Smooth策略需要设`do_ptq`为True。 +- `smooth_all_linears`: 是否对模型中所有Linear层应用Smooth,如果为True,将会对非LayerNorm-Linear组合的Linear进行Smooth,并且添加两个op,默认为False +- `smooth_sampler`: Smooth策略使用的sampler,默认为none,可选none,multi_step。multi_step会保存多轮前向结果进行计算,需要更大的显存。 +- `smooth_step`: Smooth采样步数,也即模型前向次数,默认为32。 +- `smooth_piecewise_search`: Smooth是否进行分段搜索,默认为False。分段搜索根据数值大小将激活分成K段,对于每一段进行alhpa和scale的搜索。 +- `smooth_k_piece`: 使用分段搜索功能时分段数量,默认为3。根据经验建议10B模型设置为3,100B模型设置为6。 +- `smooth_search_piece`: 使用分段搜索功能时,是否搜索分段数量,默认为False。设为True时,`smooth_k_piece`建议设为6,搜索分段数量耗时较长,如需加速Smooth过程建议关闭。 +- `do_gptq`: 是否进行GPTQ量化,GPTQ对模型进行WINT4量化,相比于普通PTQ量化精度更高,量化时间较长。默认为False。 +- `gptq_step`: GPTQ量化步数,也即模型前向次数,默认为8。 +- `do_awq`: 是否进行AWQ量化,AWQ对模型进行WINT4量化,相比于普通PTQ量化精度更高。默认为False。 +- `auto_clip`: AWQ时是否进行自动搜索截断值并对模型权重进行截断操作,截断操作有利于量化模型精度,但搜索速度较慢。默认为False。 +- `autoclip_step`: AutoClip步数,也即模型前向次数,采样时默认concat每轮数据用来搜索截断值,默认为8。 + + +
+ + +  其他参数
+ +- `per_device_train_batch_size`: 量化前向批大小,默认为8。量化过程只有模型前向,相比于普通训练需要显存较少。 + +更多参数详见[精调文档](./finetune.md)中精调参数介绍。 + +
diff --git a/docs/llm/docs/torch2paddle.md b/docs/llm/docs/torch2paddle.md new file mode 100644 index 000000000000..3ca97b65a3b8 --- /dev/null +++ b/docs/llm/docs/torch2paddle.md @@ -0,0 +1,55 @@ +# torch2paddle + +## 转化 Pytorch 权重 +PaddleNLP 提供了可自动将 PyTorch 相关的权重转化为 Paddle 权重的接口,代码如下: + +```python +from paddlenlp.transformers import AutoModelForCausalLM + +AutoModelForCausalLM.from_pretrained("/path/to/pytorch/model", convert_from_torch=True, dtype="float16") +``` + +> dtype 为转化权重的真实 dtype 数据类型,通常为:float16, bloat16 和 float32。 + +以上代码可自动加载 pytorch 权重并转化为对应 paddle 权重保存在 `/path/to/pytorch/model` 目录下。 + +## 合并 Pytorch 分片权重 + +当前 PaddleNLP 仅支持转化单个 Pytorch 权重:`pytorch_model.bin`文件。所以当Pytorch 权重为分片权重时,需要将其合并,合并脚本如下所示: + +```python +import torch, os +state_dict = {} + +files = [file for file in os.list("./path/to/pytorch/weight") if file.startswith("pytorch_model-")] + +for file in files: + state_dict.update(torch.load(file)) + +torch.save(state_dict, "pytorch_model.bin") +``` + +## 支持模型列表 + +以下为支持权重自动转化的系列模型列表: + +| 模型 | 是否支持 | +|------------|----------| +| AlBert | ✅ | +| Bart | ✅ | +| Bert | ✅ | +| Bloom | ✅ | +| Clip | ✅ | +| DistilBert | ✅ | +| Electra | ✅ | +| ErnieCode | ✅ | +| GLM | ✅ | +| Gpt | ✅ | +| Llama | ✅ | +| Mt5 | ✅ | +| Opt | ✅ | +| Qwen | ✅ | +| Roberta | ✅ | +| Roformer | ✅ | +| RW | ✅ | +| T5 | ✅ | diff --git a/docs/llm/docs/unified_checkpoint.md b/docs/llm/docs/unified_checkpoint.md new file mode 100644 index 000000000000..ac0d80f4205a --- /dev/null +++ b/docs/llm/docs/unified_checkpoint.md @@ -0,0 +1,155 @@ +# 飞桨大模型统一存储文档 + +## 1. 背景 + +在大模型背景下,通常我们需要进行多卡分布式的训练,在保存Checkpoint时所得到的模型权重通常是分片放置的,例如根据张量并行、流水线并行进行切分保存。这种根据分布式策略直接存储Checkpoint的方式非常直接明了,但也存在如下的问题: +* 对下游推理不够友好,当用户希望获取中间阶段保存的Checkpoint做下游推理时,需要手动对模型权重进行合并。 +* 不利于应对做恢复训练时,可能会面临的分布式策略改变、训练节点数发生变化的情况。用户往往需要手动对Checkpoint进行处理,增加了操作复杂度。 + +为了最大程度地解决上述的问题,降低用户操作难度,我们提出了大模型统一存储方案——Unified Checkpoint。Unified Checkpoint的核心思想是将模型权重、优化器权重等进行统一safetensors格式存储,在Checkpoint存储时不再对分布式策略进行区分,提高大模型存储的通用性。以下将首先介绍Unified Checkpoint具体存储格式以及如何使用,随后再简要介绍统一存储的实现原理。 + +## 2. 统一存储 Unified Checkpoint 使用介绍 + +### 2.1 使用命令与配置项说明 + +- **使用示例** +``` bash +python -u -m paddle.distributed.launch \ + --gpus "0,1,2,3,4,5,6,7" \ + run_pretrain.py \ + --unified_checkpoint 1 \ + --unified_checkpoint_config "enable_all_options" +``` + +- **总开关** +`unified_checkpoint`用于控制是否使用Unified Checkpoint存储格式。 +``` bash +unified_checkpoint: Optional[bool] = field( + default=False, + metadata={"help": "Whether to unify hybrid parallel checkpoint."}, +) +``` + +- **配置项说明** +``` bash +unified_checkpoint_config: Optional[str] = field( + default="", + metadata={ + "help": ( + "Configs to unify hybrid parallel checkpoint.\n" + "Following options are supports:\n" + "- skip_save_model_weight: do not save model weights when the masters weight exist\n" + "- master_weight_compatible: 1. if the master weights exist, only load when needed\n" + " 2. if master weights does not exist, convert model weights to master weights when needed\n" + "- enable_all_options: enable all optimization configurations\n" + ) + }, +) +``` +介绍如下: +1. skip_save_model_weight:当optimizer具有master weight时,跳过model weight保存,重启时将master weight作为model weight加载。在PaddleNLP中,仅fp16_opt_level=O1时,optimizer不存在master weight。 +2. master_weight_compatible:仅当optimizer需要master weight时,才加载master weight; 如果ckpt中不存在master weight,将model weight作为master weight加载。 +3. enable_all_options:上述参数均开启。 + +### 2.2 Unified Checkpoint存储格式介绍 + +这里以facebook/llama-7b的pretrain checkpoint保存为例进行说明。以TP=4,PP=2的分布式训练为例,原始的存储格式举例如下代码片段。无论是模型参数,异或是优化器参数,均按照TP、PP训练方式进行了分片存储。 +``` +-rw-r--r-- 1 root root 1015 Dec 21 11:27 config.json +-rw-r--r-- 1 root root 1.6G Dec 21 11:27 model_state.tp00_pp00.pdparams +-rw-r--r-- 1 root root 1.6G Dec 21 11:27 model_state.tp00_pp01.pdparams +-rw-r--r-- 1 root root 1.6G Dec 21 11:27 model_state.tp01_pp00.pdparams +-rw-r--r-- 1 root root 1.6G Dec 21 11:27 model_state.tp01_pp01.pdparams +-rw-r--r-- 1 root root 1.6G Dec 21 11:27 model_state.tp02_pp00.pdparams +-rw-r--r-- 1 root root 1.6G Dec 21 11:27 model_state.tp02_pp01.pdparams +-rw-r--r-- 1 root root 1.6G Dec 21 11:27 model_state.tp03_pp00.pdparams +-rw-r--r-- 1 root root 1.6G Dec 21 11:27 model_state.tp03_pp01.pdparams +-rw-r--r-- 1 root root 9.5G Dec 21 11:27 optimizer.tp00_pp00.pdopt +-rw-r--r-- 1 root root 9.5G Dec 21 11:27 optimizer.tp00_pp01.pdopt +-rw-r--r-- 1 root root 9.5G Dec 21 11:27 optimizer.tp01_pp00.pdopt +-rw-r--r-- 1 root root 9.5G Dec 21 11:27 optimizer.tp01_pp01.pdopt +-rw-r--r-- 1 root root 9.5G Dec 21 11:27 optimizer.tp02_pp00.pdopt +-rw-r--r-- 1 root root 9.5G Dec 21 11:27 optimizer.tp02_pp01.pdopt +-rw-r--r-- 1 root root 9.5G Dec 21 11:27 optimizer.tp03_pp00.pdopt +-rw-r--r-- 1 root root 9.5G Dec 21 11:27 optimizer.tp03_pp01.pdopt +-rw-r--r-- 1 root root 54K Dec 21 11:27 rng_state_8.pth +-rw-r--r-- 1 root root 317 Dec 21 11:27 scaler.pdparams +-rw-r--r-- 1 root root 50 Dec 21 11:27 scheduler.pdparams +-rw-r--r-- 1 root root 489K Dec 21 11:27 sentencepiece.bpe.model +-rw-r--r-- 1 root root 63 Dec 21 11:27 special_tokens_map.json +-rw-r--r-- 1 root root 207 Dec 21 11:27 tokenizer_config.json +-rw-r--r-- 1 root root 3.1K Dec 21 11:27 trainer_state.json +-rw-r--r-- 1 root root 2.3K Dec 21 11:27 training_args.bin +``` + +采用Unified Checkpoint进行统一存储后,新格式如下面代码片段。可以看到,无论是模型参数、优化器参数,我们均采用了safetensors格式进行存储,不再区分TP、PP策略;进一步地,我们将优化器参数区分为了optimizer与master_weights(如果有的话),而master_weights本身就是模型参数的FP32版本。其中,`model.safetensors.index.json`等json文件用于记录参数对应所在的文件部分。 +``` +-rw-r--r-- 1 root root 1015 Dec 21 11:24 config.json +-rw-r--r-- 1 root root 3.1G Dec 21 11:25 master_weights-00001-of-00008.safetensors +-rw-r--r-- 1 root root 3.2G Dec 21 11:25 master_weights-00002-of-00008.safetensors +-rw-r--r-- 1 root root 3.2G Dec 21 11:25 master_weights-00003-of-00008.safetensors +-rw-r--r-- 1 root root 3.2G Dec 21 11:25 master_weights-00004-of-00008.safetensors +-rw-r--r-- 1 root root 3.1G Dec 21 11:25 master_weights-00005-of-00008.safetensors +-rw-r--r-- 1 root root 3.2G Dec 21 11:25 master_weights-00006-of-00008.safetensors +-rw-r--r-- 1 root root 3.1G Dec 21 11:25 master_weights-00007-of-00008.safetensors +-rw-r--r-- 1 root root 3.3G Dec 21 11:25 master_weights-00008-of-00008.safetensors +-rw-r--r-- 1 root root 28K Dec 21 11:25 master_weights.safetensors.index.json +-rw-r--r-- 1 root root 1.6G Dec 21 11:24 model-00001-of-00008.safetensors +-rw-r--r-- 1 root root 1.6G Dec 21 11:24 model-00002-of-00008.safetensors +-rw-r--r-- 1 root root 1.6G Dec 21 11:24 model-00003-of-00008.safetensors +-rw-r--r-- 1 root root 1.6G Dec 21 11:24 model-00004-of-00008.safetensors +-rw-r--r-- 1 root root 1.6G Dec 21 11:24 model-00005-of-00008.safetensors +-rw-r--r-- 1 root root 1.6G Dec 21 11:24 model-00006-of-00008.safetensors +-rw-r--r-- 1 root root 1.6G Dec 21 11:24 model-00007-of-00008.safetensors +-rw-r--r-- 1 root root 1.7G Dec 21 11:24 model-00008-of-00008.safetensors +-rw-r--r-- 1 root root 25K Dec 21 11:24 model.safetensors.index.json +-rw-r--r-- 1 root root 6.2G Dec 21 11:25 optimizer-00001-of-00008.safetensors +-rw-r--r-- 1 root root 6.4G Dec 21 11:25 optimizer-00002-of-00008.safetensors +-rw-r--r-- 1 root root 6.2G Dec 21 11:25 optimizer-00003-of-00008.safetensors +-rw-r--r-- 1 root root 6.4G Dec 21 11:25 optimizer-00004-of-00008.safetensors +-rw-r--r-- 1 root root 6.3G Dec 21 11:25 optimizer-00005-of-00008.safetensors +-rw-r--r-- 1 root root 6.4G Dec 21 11:25 optimizer-00006-of-00008.safetensors +-rw-r--r-- 1 root root 6.3G Dec 21 11:25 optimizer-00007-of-00008.safetensors +-rw-r--r-- 1 root root 6.4G Dec 21 11:25 optimizer-00008-of-00008.safetensors +-rw-r--r-- 1 root root 118K Dec 21 11:25 optimizer.safetensors.index.json +-rw-r--r-- 1 root root 54K Dec 21 11:25 rng_state_8.pth +-rw-r--r-- 1 root root 317 Dec 21 11:25 scaler.pdparams +-rw-r--r-- 1 root root 50 Dec 21 11:25 scheduler.pdparams +-rw-r--r-- 1 root root 489K Dec 21 11:24 sentencepiece.bpe.model +-rw-r--r-- 1 root root 63 Dec 21 11:24 special_tokens_map.json +-rw-r--r-- 1 root root 207 Dec 21 11:24 tokenizer_config.json +-rw-r--r-- 1 root root 3.1K Dec 21 11:25 trainer_state.json +-rw-r--r-- 1 root root 2.3K Dec 21 11:24 training_args.bin +``` + +其中,[safetensors](https://github.com/huggingface/safetensors)是由huggingface开发的一种新序列化格式,旨在简化和精简大型复杂张量的存储和加载。使用Safetensors有很多好处,这里简要列举部分如下: +1. 速度快:Safetensors采用Zero-copy技术进行了速度优化,可以高效处理大型张量的序列化和反序列化。 +2. 大小优化:混合使用了有效的序列化和压缩算法,以减少大型张量的大小,相比于其他序列化格式(如pickle),性能更快、更高效。 +3. 懒惰加载:Safetensors在加载参数时只需要加载文件中需要的部分张量即可,效率更高。 +4. 安全性:为了防止序列化张量在存储或传输过程中出现损坏,Safetensors使用了校验和机制。这保证了额外的安全性,确保存储在Safetensors中的所有数据都准确可靠。 + +### 2.3 训练分布式策略发生变化时怎么办? + +在Unified checkpoint统一存储格式下,当训练分布式策略不变时,我们直接原地加载Checkpoint进行训练即可。那么,当分布式策略发生变化时,应当怎么做?以下区分两种情况进行讨论。 + +#### 2.3.1 机器不变 + +在训练机器不变的情况下,进行分布式策略的改变有多种情况,简单举例如下: +* 例如单机训练,希望TP=8转为TP=4、Sharding=2进行训练; +* 例如两机训练时,希望TP=8、Sharding=2转为PP=8、Sharding=2训练; +* 又或者是希望在相同机器的情况下减少参与训练的进程数(GPU卡数)。 +在这些情况下,我们都不需要对checkpoint进行处理,只需要进行重启操作即可,Unified checkpoint会自动加载文件并执行相应的Tensor切分、发送接收等操作。 + +#### 2.3.2 机器数量发生变化,例如1->多,多->1,多->多 + +尽管机器数量发生变化的情况很多,用户在处理Checkpoint时原则上只需要保证:新的训练机器上至少需要有一份完整的Checkpoint参数,这份完整参数可以放置在同一台机器上,也可以分散放置在多台机器上(如果为多机训练的话)。 +* 1->多:例如,原先我们在机器A上训练,Checkpoint存储在A上,接下来想用A、B两台机器同时训练,此时需要确保机器A、B上有一份完整Checkpoint参数即可。 +* 多->1:例如,原先我们在两台机器A、B训练,Checkpoint可能分了两台机器进行存储,接下来想只在机器A上进行训练,那么需要将Checkpoint文件完整放置在机器A上。 +* 多->多:例如,原先我们在机器A、B上训练,Checkpoint存储在A、B上,接下来想用四台机器(A、B、C、D)训练,此时需要确保参与训练的四台机器上具备一份完整Checkpoint参数即可。 +用户只需要确保参与训练的机器上具备一份完整的Checkpoint参数,即可进行重启训练。 + +#### 2.4 旧格式的Checkpoint如何兼容? + +在打开unified_checkpoint开关后,我们会对Checkpoint文件夹中的内容进行检查。 +1. 如果文件夹中具备旧格式的参数文件等,我们会按照旧格式的方式进行参数加载,在后续保存新的Checkpoint时会保存成Unified Checkpoint的格式。 +2. 如果文件夹中不含旧格式参数文件,则默认采用Unified Checkpoint格式进行加载。我们会检查参与训练的机器中的参数文件是否完整,如完整则直接加载训练,否则会进行报错。 diff --git a/docs/llm/finetune.md b/docs/llm/finetune.md deleted file mode 120000 index 487f6ab2e750..000000000000 --- a/docs/llm/finetune.md +++ /dev/null @@ -1 +0,0 @@ -../../llm/docs/finetune.md \ No newline at end of file diff --git a/docs/llm/inference.md b/docs/llm/inference.md deleted file mode 120000 index 888207011440..000000000000 --- a/docs/llm/inference.md +++ /dev/null @@ -1 +0,0 @@ -../../llm/docs/inference.md \ No newline at end of file diff --git a/docs/llm/pretraining/data/CLUECorpusSmall.md b/docs/llm/pretraining/data/CLUECorpusSmall.md index 6af9876968f0..473d1f6c4c8f 100644 --- a/docs/llm/pretraining/data/CLUECorpusSmall.md +++ b/docs/llm/pretraining/data/CLUECorpusSmall.md @@ -67,7 +67,7 @@ python -u create_pretraining_data.py \ --workers 48 ``` -- model_name 可以更换为[其他模型](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/llama/README.md)。 +- model_name 可以更换为[其他模型](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/README.md)。 - workers 表示转化的线程数目 数据共有文档`15702702`条左右,由于分词比较耗时,大概一小时左右可以完成。在当前目录下产出训练所需数据。 diff --git a/docs/llm/pretraining/data/OpenWebText2.md b/docs/llm/pretraining/data/OpenWebText2.md index 5e7c569c7eca..0264608a953d 100644 --- a/docs/llm/pretraining/data/OpenWebText2.md +++ b/docs/llm/pretraining/data/OpenWebText2.md @@ -19,7 +19,7 @@ tar -xvf openwebtext2.jsonl.zst.tar -C /path/to/openwebtext ## Llama训练数据制作 -然后使用[preprocess](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/ernie-1.0/preprocess) 工具下的`create_pretraining_data.py`脚本进行数据集制作: +然后使用[preprocess](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/llm/tools/preprocess) 工具下的`create_pretraining_data.py`脚本进行数据集制作: ``` python -u create_pretraining_data.py \ --model_name meta-llama/Llama-2-7b \ diff --git a/docs/llm/pretraining/dataset.md b/docs/llm/pretraining/dataset.md index 863009abe152..9984c49f2f75 100644 --- a/docs/llm/pretraining/dataset.md +++ b/docs/llm/pretraining/dataset.md @@ -176,10 +176,10 @@ arguments: ## 常用数据集制作 -[CLUECorpus2020 语料制作](docs/CLUECorpus2020.md) +[CLUECorpus2020 语料制作](./data/CLUECorpus2020.md) -[CLUECorpusSmall 语料制作](docs/CLUECorpusSmall.md) +[CLUECorpusSmall 语料制作](./data/CLUECorpusSmall.md) -[OpenWebText2 语料制作](docs/OpenWebText2.md) +[OpenWebText2 语料制作](./data/OpenWebText2.md) -[WuDaoCorpus2.0 Base 语料](docs/WuDaoCorpusBase.md) +[WuDaoCorpus2.0 Base 语料](./data/WuDaoCorpusBase.md) diff --git a/docs/llm/quantization.md b/docs/llm/quantization.md deleted file mode 120000 index 1fd2d59d0ca0..000000000000 --- a/docs/llm/quantization.md +++ /dev/null @@ -1 +0,0 @@ -../../llm/docs/quantization.md \ No newline at end of file diff --git a/docs/llm/torch2paddle.md b/docs/llm/torch2paddle.md deleted file mode 120000 index c5a358523e8b..000000000000 --- a/docs/llm/torch2paddle.md +++ /dev/null @@ -1 +0,0 @@ -../../llm/docs/torch2paddle.md \ No newline at end of file diff --git a/docs/llm/unified_checkpoint.md b/docs/llm/unified_checkpoint.md deleted file mode 120000 index e4dc95640f29..000000000000 --- a/docs/llm/unified_checkpoint.md +++ /dev/null @@ -1 +0,0 @@ -../../llm/docs/unified_checkpoint.md \ No newline at end of file diff --git a/docs/locale/en/LC_MESSAGES/advanced_guide/fastgeneration/fastgeneration.po b/docs/locale/en/LC_MESSAGES/advanced_guide/fastgeneration/fastgeneration.po deleted file mode 100644 index a927bd73636b..000000000000 --- a/docs/locale/en/LC_MESSAGES/advanced_guide/fastgeneration/fastgeneration.po +++ /dev/null @@ -1,211 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2021, PaddleNLP -# This file is distributed under the same license as the PaddleNLP package. -# FIRST AUTHOR , 2022. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PaddleNLP \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-05-19 14:17+0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.10.1\n" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:3 -msgid "FastGeneration加速生成API" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:5 -msgid "" -"FastGeneration是PaddleNLP " -"v2.2版本加入的一个高性能推理功能,可实现基于CUDA的序列解码。该功能可以用于多种生成类的预训练NLP模型,例如GPT、BART、UnifiedTransformer等,并且支持多种解码策略。因此该功能主要适用于机器翻译,文本续写,文本摘要,对话生成等任务。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:7 -msgid "" -"功能底层依托于 `FasterTransformer " -"`_ " -",该库专门针对Transformer系列模型及各种解码策略进行了优化。功能顶层封装于 `model.generate` " -"函数。功能的开启和关闭通过传入 `use_fast` 参数进行控制(默认为开启状态)。该功能具有如下特性:" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:9 -msgid "全面支持生成式预训练模型。包括GPT、BART、mBART、UnifiedTransformer和UNIMO-text。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:10 -msgid "" -"支持大多数主流解码策略。包括Beam Search、Sampling、Greedy Search。以及Diverse Sibling " -"Search、Length Penalty等子策略。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:11 -msgid "" -"解码速度快。最高可达非加速版generate函数的 **17倍**。HuggingFace generate函数的 " -"**8倍**。**并支持FP16混合精度计算**。 详细性能试验数据请参见 `FastGeneration Performence " -"`_" -" 。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:12 -msgid "" -"易用性强。功能的入口为 `model.generate` " -",与非加速版生成api的使用方法相同,当满足加速条件时使用jit即时编译高性能算子并用于生成,不满足则自动切换回非加速版生成api。下图展示了FastGeneration的启动流程:" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:17 -msgid "快速开始" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:19 -msgid "" -"为体现FastGeneration的易用性,我们在 `samples " -"`_" -" 文件夹中内置了几个典型任务示例,下面以基于GPT模型的中文文本续写任务为例:" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:26 -msgid "" -"如果是第一次执行,PaddleNLP会启动即时编译( `JIT Compile " -"`_ )自动编译高性能解码算子。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:49 -msgid "编译过程通常会花费几分钟的时间但是只会进行一次,之后再次使用高性能解码不需要重新编译了。编译完成后会继续运行,可以看到生成的结果如下:" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:56 -msgid "打开示例代码 `samples/gpt_sample.py` ,我们可以看到如下代码:" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:67 -msgid "" -"可以看到,FastGeneration的使用方法与 `model.generate()` " -"相同,只需传入输入tensor和解码相关参数即可,使用非常简便。如果要使用非加速版的 `model.generate()` 方法,只需传入 " -"`use_fast=False` 即可,示例如下:" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:78 -msgid "" -"需要注意的是,如果传入 `model.generate()` 的参数不满足高性能版本的要求。程序会做出提示并自动切换为非加速版本,例如我们传入 " -"`min_length=1` ,会得到如下提示:" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:86 -msgid "" -"关于该方法的更多参数可以参考API文档 `generate " -"`_" -" 。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:88 -msgid "" -"`samples " -"`_" -" 文件夹中的其他示例的使用方法相同。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:91 -msgid "其他示例" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:93 -msgid "" -"除了以上简单示例之外,PaddleNLP的examples中所有使用了 `model.generate()` " -"的示例都可以通过调整到合适的参数使用高性能推理。具体如下:" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:95 -msgid "" -"`examples/dialogue/unified_transformer " -"`_" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:96 -msgid "" -"`model_zoo/gpt/fast_gpt " -"`_" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:97 -msgid "" -"`examples/text_generation/unimo-text " -"`_" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:98 -msgid "" -"`examples/text_summarization/bart " -"`_" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:100 -msgid "" -"根据提示修改对应参数即可使用FastGeneration加速生成。下面我们以基于 `Unified Transformer` " -"的任务型对话为例展示一下FastGeneration的加速效果:" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:102 -msgid "打开以上链接中Unified Transformer对应的example,找到README中对应预测的脚本。稍作修改如下:" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:122 -msgid "" -"由于这里只是展示性能,我们直接在 `model_name_or_path` 填入PaddleNLP预训练模型名称 " -"`unified_transformer-12L-cn-luge` 。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:124 -msgid "" -"可以看到,由于该任务为对话任务,我们为了防止模型生成过多安全回复(如:哈哈哈、不错等),保证生成结果具有更多的随机性,我们选择TopK-" -"sampling作为解码策略,并让k=5。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:126 -msgid "打开 `infer.py` ,可以看到我们传入的脚本参数大多都提供给了 `model.generate()` 方法:" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:149 -msgid "运行脚本,输出结果如下:" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:157 -msgid "可以看到,非加速版 `generate()` 方法的预测速度为每个step耗时1.5秒左右。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:159 -msgid "" -"下面我们在启动脚本中传入 `--faster` 参数,这会让 `generate()` 方法传入 `use_fast=True` " -",启动加速模式。同时我们需要设置 `--min_dec_len=0` " -",因为FastGeneration当前还不支持该参数。新的脚本启动参数如下:" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:180 -msgid "再次运行脚本,输出结果如下(由于我们已经编译过高性能算子,所以这里不会重新编译):" -msgstr "" - -#: ../advanced_guide/fastgeneration/fastgeneration.rst:189 -msgid "" -"可以看到,FastGeneration的预测速度为每个step耗时0.4秒左右,提速超过三倍。如果减少 " -"`num_return_sequences` ,可以得到更高的加速比。" -msgstr "" - -#~ msgid "" -#~ "如果是第一次执行,PaddleNLP会启动即时编译( `JIT Compile " -#~ "`_ )自动编译高性能解码算子。" -#~ msgstr "" - -#~ msgid "" -#~ "`examples/language_model/gpt/fast_gpt " -#~ "`_" -#~ msgstr "" - diff --git a/docs/locale/en/LC_MESSAGES/advanced_guide/fastgeneration/fasttransformer.po b/docs/locale/en/LC_MESSAGES/advanced_guide/fastgeneration/fasttransformer.po deleted file mode 100644 index 4a7f27a8a45a..000000000000 --- a/docs/locale/en/LC_MESSAGES/advanced_guide/fastgeneration/fasttransformer.po +++ /dev/null @@ -1,331 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2021, PaddleNLP -# This file is distributed under the same license as the PaddleNLP package. -# FIRST AUTHOR , 2022. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PaddleNLP \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-18 21:31+0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.9.0\n" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:3 -msgid "Transformer高性能加速" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:7 -msgid "使用环境说明" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:9 -msgid "本项目依赖于 PaddlePaddle 2.1.0 及以上版本或适当的 develop 版本" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:10 -msgid "CMake >= 3.10" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:11 -msgid "CUDA 10.1 或 10.2(需要 PaddlePaddle 框架一致)" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:12 -msgid "gcc 版本需要与编译 PaddlePaddle 版本一致,比如使用 gcc8.2" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:13 -msgid "推荐使用 Python3" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:14 -msgid "" -"`FasterTransformer " -"`_ 使用必要的环境" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:15 -msgid "环境依赖" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:17 -msgid "attrdict" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:18 -msgid "pyyaml" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:26 -msgid "快速开始" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:28 -msgid "" -"我们实现了基于 FasterTransformer 的自定义 op 的接入,打造了 FastGeneration 的能力,用于加速文本生成模型在 GPU " -"上的预测性能。接下来,我们将分别介绍基于 Python 动态图和预测库使用 FastGeneration 自定义 op 的方式,包括 op " -"的编译与使用。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:31 -msgid "Python 动态图使用自定义 op" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:34 -msgid "JIT 自动编译" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:36 -msgid "" -"目前当基于动态图使用 FastGeneration 预测加速自定义 op 时,PaddleNLP 提供了 Just In Time " -"的自动编译,在一些 API 上,用户无需关注编译流程,可以直接执行对应的 API,程序会自动编译需要的第三方库。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:38 -msgid "" -"以 Transformer 为例,可以直接调用 `TransformerGenerator()` 这个 API,程序会自动编译。使用示例可以参考 " -"`Transformer 预测加速使用示例-sample " -"`_,`Transformer" -" 预测加速使用示例-机器翻译 " -"`_。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:41 -#: ../advanced_guide/fastgeneration/fasttransformer.rst:154 -msgid "编译自定义OP" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:43 -msgid "除了自动编译外,如果需要自行编译,我们已经提供对应的 CMakeLists.txt,可以参考使用如下的方式完成编译。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:46 -#: ../advanced_guide/fastgeneration/fasttransformer.rst:159 -msgid "PaddleNLP 准备" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:48 -msgid "" -"首先,如果需要从源码自行编译,可以直接使用 Python 的 package 下的 paddlenlp,或是可从 github 克隆一个 " -"PaddleNLP,并重新编译:" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:50 -#: ../advanced_guide/fastgeneration/fasttransformer.rst:163 -msgid "以下以从 github 上 clone 一个新版 PaddleNLP 为例:" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:56 -msgid "其次,配置环境变量,让我们可以使用当前 clone 的 paddlenlp,并进入到自定义 OP 的路径,准备后续的编译操作:" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:64 -#: ../advanced_guide/fastgeneration/fasttransformer.rst:176 -msgid "编译" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:66 -#: ../advanced_guide/fastgeneration/fasttransformer.rst:178 -msgid "编译之前,请确保安装的 PaddlePaddle 的版本高于 2.1.0 或是基于最新的 develop 分支的代码编译,并且正常可用。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:68 -#: ../advanced_guide/fastgeneration/fasttransformer.rst:180 -msgid "编译自定义 OP 可以参照一下步骤:" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:78 -#: ../advanced_guide/fastgeneration/fasttransformer.rst:190 -msgid "可以使用的编译选项包括:" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:80 -msgid "" -"`-DPY_CMD`: 指定当前装有 PaddlePaddle 版本的 python 环境,比如 " -"`-DPY_CMD=python3.7`。若未指定 `-DPY_CMD` 将会默认使用系统命令 `python` 对应的 Python。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:81 -#: ../advanced_guide/fastgeneration/fasttransformer.rst:207 -msgid "" -"`-DSM`: 是指的所用 GPU 的 compute capability,建议不使用该选项设置,未设置时将自动检测。如要设置,需根据 " -"[compute capability](https://developer.nvidia.com/zh-cn/cuda-" -"gpus#compute) 进行设置,如 V100 时设置 `-DSM=70` 或 T4 时设置 `-DSM=75`。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:82 -#: ../advanced_guide/fastgeneration/fasttransformer.rst:208 -msgid "" -"`-DWITH_GPT`: 是否编译带有 GPT 相关的 lib。若使用 GPT-2 高性能推理,需要加上 `-DWITH_GPT=ON`。默认为" -" OFF。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:83 -#: ../advanced_guide/fastgeneration/fasttransformer.rst:209 -msgid "" -"`-DWITH_UNIFIED`: 是否编译带有 Unified Transformer 或是 UNIMOText 相关的 " -"lib。若使用,需要加上 `-DWITH_UNIFIED=ON`。默认为 ON。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:84 -#: ../advanced_guide/fastgeneration/fasttransformer.rst:210 -msgid "`-DWITH_BART`: 是否编译带有 BART 支持的相关 lib。若使用,需要加上 `-DWITH_BART=ON`。默认为 ON。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:85 -#: ../advanced_guide/fastgeneration/fasttransformer.rst:211 -msgid "`-DWITH_DECODER`: 是否编译带有 decoder 优化的 lib。默认为 ON。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:87 -msgid "" -"最终,编译会在 `./build/lib/` 路径下,产出 `libdecoding_op.so`,即需要的 FastGeneration " -"decoding 执行的库。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:90 -msgid "使用 Transformer decoding 高性能推理" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:92 -msgid "" -"编写 python 脚本的时候,调用 `FasterTransformer API " -"`_" -" 即可实现 Transformer 模型的高性能预测。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:94 -msgid "举例如下:" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:120 -msgid "" -"若当前环境下没有需要的自定义 op 的动态库,将会使用 JIT 自动编译需要的动态库。如果需要自行编译自定义 op " -"所需的动态库,可以如前文所述进行编译。编译好后,使用 " -"`FasterTransformer(decoding_lib=\"/path/to/lib\", ...)` 可以完成导入。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:122 -msgid "" -"更详细的例子可以参考 `Transformer 预测加速使用示例-sample " -"`_,`Transformer" -" 预测加速使用示例-机器翻译 " -"`_,我们提供了更详细用例。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:125 -msgid "Transformer decoding 示例代码" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:127 -msgid "使用 PaddlePaddle 仅执行 decoding 测试(float32):" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:137 -msgid "" -"使用 PaddlePaddle 仅执行 decoding 测试(float16): 执行 float16 的 " -"decoding,需要在执行的时候,加上 `--use_fp16_decoding` 选项。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:148 -msgid "" -"其中,`decoding_gemm` 不同参数的意义可以参考 `FasterTransformer 文档 " -"`_。这里提前执行 `decoding_gemm`,可以在当前路径下生成一个 config " -"文件,里面会包含针对当前 decoding 部分提供的配置下,性能最佳的矩阵乘的算法,并在执行的时候读入这个数据。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:151 -msgid "C++ 预测库使用自定义 op" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:156 -msgid "" -"在 C++ 预测库使用自定义 OP 需要将实现的 C++、CUDA 代码**以及 C++ 预测的 " -"demo**编译成一个可执行文件。因预测库支持方式与 Python 不同,这个过程将不会产生自定义 op " -"的动态库,将直接得到可执行文件。我们已经提供对应的 CMakeLists.txt ,可以参考使用如下的方式完成编译。并获取执行 demo。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:161 -msgid "" -"首先,因为需要基于当前环境重新编译,当前的 paddlenlp 的 python 包里面并不包含 FastGeneration 相关 " -"lib,需要从源码自行编译,可以直接使用 Python 的 package 下的 paddlenlp,或是可从 github 克隆一个 " -"PaddleNLP,并重新编译:" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:169 -msgid "其次,让我们可以使用当前 clone 的 paddlenlp,并进入到自定义 OP 的路径,准备后续的编译操作:" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:192 -msgid "" -"`-DPADDLE_LIB`: 需要指明使用的 PaddlePaddle 预测库的路径 " -"`/path/to/paddle_inference_install_dir/`,需要使用的 PaddlePaddle 的 lib " -"可以选择自行编译或者直接从官网下载 `paddle_inference_linux_lib " -"`_。需要注意的是,在该路径下,预测库的组织结构满足:" -" .. code-block::" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:206 -msgid "" -"`-DDEMO`: 说明预测库使用 demo 的位置。比如指定 -DDEMO=./demo/transformer_e2e.cc 或是 " -"-DDEMO=./demo/gpt.cc。最好使用绝对路径,若使用相对路径,需要是相对于 " -"`PaddleNLP/paddlenlp/ops/fast_transformer/src/` 的相对路径。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:212 -msgid "`-DWITH_MKL`: 若当前是使用的 mkl 的 Paddle lib,那么需要打开 MKL 以引入 MKL 相关的依赖。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:213 -msgid "`-DON_INFER`: 是否编译 paddle inference 预测库。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:214 -msgid "**当使用预测库的自定义 op 的时候,请务必开启 `-DON_INFER=ON` 选项,否则,不会得到预测库的可执行文件。**" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:217 -msgid "执行 Transformer decoding on PaddlePaddle" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:219 -msgid "" -"编译完成后,在 `build/bin/` 路径下将会看到 `transformer_e2e` " -"的一个可执行文件。通过设置对应的设置参数完成执行的过程。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:226 -msgid "举例说明:" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:235 -msgid "其中:" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:237 -msgid "" -"`decoding_gemm` 不同参数的意义可以参考 `FasterTransformer 文档 " -"`_。这里提前执行 `decoding_gemm`,可以在当前路径下生成一个 config " -"文件,里面会包含针对当前 decoding 部分提供的配置下,性能最佳的矩阵乘的算法,并在执行的时候读入这个数据。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:238 -msgid "`DATA_HOME` 则是 `paddlenlp.utils.env.DATA_HOME` 返回的路径。" -msgstr "" - -#: ../advanced_guide/fastgeneration/fasttransformer.rst:240 -msgid "" -"预测所需要的模型文件,可以通过 `fast_transformer/README.md " -"`_" -" 文档中所记述的方式导出。" -msgstr "" - diff --git a/docs/locale/en/LC_MESSAGES/advanced_guide/fastgeneration/index.po b/docs/locale/en/LC_MESSAGES/advanced_guide/fastgeneration/index.po deleted file mode 100644 index d0c0a3168a8c..000000000000 --- a/docs/locale/en/LC_MESSAGES/advanced_guide/fastgeneration/index.po +++ /dev/null @@ -1,23 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2021, PaddleNLP -# This file is distributed under the same license as the PaddleNLP package. -# FIRST AUTHOR , 2022. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PaddleNLP \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-18 21:31+0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.9.0\n" - -#: ../advanced_guide/fastgeneration/index.rst:3 -msgid "文本生成高性能加速" -msgstr "" - diff --git a/docs/model_zoo/embeddings.md b/docs/model_zoo/embeddings.md index b24bb5ba18f5..d87fe669c83c 100644 --- a/docs/model_zoo/embeddings.md +++ b/docs/model_zoo/embeddings.md @@ -125,7 +125,7 @@ print(score) # 8.611071 ### 训练 -以下为`TokenEmbedding`简单的组网使用方法。有关更多`TokenEmbedding`训练流程相关的使用方法,请参考[Word Embedding with PaddleNLP](../../examples/word_embedding/README.md)。 +以下为`TokenEmbedding`简单的组网使用方法。有关更多`TokenEmbedding`训练流程相关的使用方法,请参考[Word Embedding with PaddleNLP](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/examples/word_embedding)。 ```python in_words = paddle.to_tensor([0, 2, 3]) diff --git a/docs/model_zoo/taskflow.md b/docs/model_zoo/taskflow.md index fde8f31b6bcc..08750fe62fb8 100644 --- a/docs/model_zoo/taskflow.md +++ b/docs/model_zoo/taskflow.md @@ -27,26 +27,26 @@ PaddleNLP提供**开箱即用**的产业级NLP预置任务能力,无需训练 - 极致的产业级效果:在多个中文场景上提供产业级的精度与预测性能; - 统一的应用范式:通过`paddlenlp.Taskflow`调用,简捷易用。 -| 任务名称 | 调用方式 | 一键预测 | 单条输入 | 多条输入 | 文档级输入 | 定制化训练 | 其它特性 | -| :--------------------------------- | -------------------------------- | -------- | -------- | -------- | ---------- | ---------- | ------------------------------------------------------ | -| [中文分词](#中文分词) | `Taskflow("word_segmentation")` | ✅ | ✅ | ✅ | ✅ | ✅ | 多种分词模式,满足快速切分和实体粒度精准切分 | -| [词性标注](#词性标注) | `Taskflow("pos_tagging")` | ✅ | ✅ | ✅ | ✅ | ✅ | 基于百度前沿词法分析工具LAC | -| [命名实体识别](#命名实体识别) | `Taskflow("ner")` | ✅ | ✅ | ✅ | ✅ | ✅ | 覆盖最全中文实体标签 | -| [依存句法分析](#依存句法分析) | `Taskflow("dependency_parsing")` | ✅ | ✅ | ✅ | | ✅ | 基于最大规模中文依存句法树库研发的DDParser | -| [信息抽取](#信息抽取) | `Taskflow("information_extraction")`| ✅ | ✅ | ✅ | ✅ | ✅ | 适配多场景的开放域通用信息抽取工具 | -| [『解语』-知识标注](#解语知识标注) | `Taskflow("knowledge_mining")` | ✅ | ✅ | ✅ | ✅ | ✅ | 覆盖所有中文词汇的知识标注工具 | -| [文本纠错](#文本纠错) | `Taskflow("text_correction")` | ✅ | ✅ | ✅ | ✅ | ✅ | 融合拼音特征的端到端文本纠错模型ERNIE-CSC | -| [文本相似度](#文本相似度) | `Taskflow("text_similarity")` | ✅ | ✅ | ✅ | | | 基于百万量级Dureader Retrieval数据集训练RocketQA并达到前沿文本相似效果| -| [情感分析](#情感分析) | `Taskflow("sentiment_analysis")` | ✅ | ✅ | ✅ | | ✅ | 集成BiLSTM、SKEP、UIE等模型,支持评论维度、观点抽取、情感极性分类等情感分析任务 | -| [生成式问答](#生成式问答) | `Taskflow("question_answering")` | ✅ | ✅ | ✅ | | | 使用最大中文开源CPM模型完成问答 | -| [智能写诗](#智能写诗) | `Taskflow("poetry_generation")` | ✅ | ✅ | ✅ | | | 使用最大中文开源CPM模型完成写诗 | -| [开放域对话](#开放域对话) | `Taskflow("dialogue")` | ✅ | ✅ | ✅ | | | 十亿级语料训练最强中文闲聊模型PLATO-Mini,支持多轮对话 | -| [代码生成](#代码生成) | `Taskflow("code_generation")` | ✅ | ✅ | ✅ | ✅ | | 代码生成大模型 | -| [文本摘要](#文本摘要) | `Taskflow("text_summarization")` | ✅ | ✅ | ✅ | ✅ | | 文本摘要大模型 | -| [文档智能](#文档智能) | `Taskflow("document_intelligence")` | ✅ | ✅ | ✅ | ✅ | | 以多语言跨模态布局增强文档预训练模型ERNIE-Layout为核心底座 | -| [问题生成](#问题生成) | `Taskflow("question_generation")` | ✅ | ✅ | ✅ | ✅ | | 问题生成大模型 | -| [零样本文本分类](#零样本文本分类) | `Taskflow("zero_shot_text_classification")` | ✅ | ✅ | ✅ | | ✅ | 集成多场景的通用文本分类工具 | -| [模型特征提取](#模型特征提取) | `Taskflow("feature_extraction")` | ✅ | ✅ | ✅ | ✅ | | 集成文本,图片的特征抽取工具 | +| 任务名称 | 调用方式 | 一键预测 | 单条输入 | 多条输入 | 文档级输入 | 定制化训练 | 其它特性 | +|:-----------------------------------|---------------------------------------------|----------|----------|----------|------------|------------|---------------------------------------------------------------------------------| +| [中文分词](#中文分词) | `Taskflow("word_segmentation")` | ✅ | ✅ | ✅ | ✅ | ✅ | 多种分词模式,满足快速切分和实体粒度精准切分 | +| [词性标注](#词性标注) | `Taskflow("pos_tagging")` | ✅ | ✅ | ✅ | ✅ | ✅ | 基于百度前沿词法分析工具LAC | +| [命名实体识别](#命名实体识别) | `Taskflow("ner")` | ✅ | ✅ | ✅ | ✅ | ✅ | 覆盖最全中文实体标签 | +| [依存句法分析](#依存句法分析) | `Taskflow("dependency_parsing")` | ✅ | ✅ | ✅ | | ✅ | 基于最大规模中文依存句法树库研发的DDParser | +| [信息抽取](#信息抽取) | `Taskflow("information_extraction")` | ✅ | ✅ | ✅ | ✅ | ✅ | 适配多场景的开放域通用信息抽取工具 | +| [『解语』-知识标注](#解语知识标注) | `Taskflow("knowledge_mining")` | ✅ | ✅ | ✅ | ✅ | ✅ | 覆盖所有中文词汇的知识标注工具 | +| [文本纠错](#文本纠错) | `Taskflow("text_correction")` | ✅ | ✅ | ✅ | ✅ | ✅ | 融合拼音特征的端到端文本纠错模型ERNIE-CSC | +| [文本相似度](#文本相似度) | `Taskflow("text_similarity")` | ✅ | ✅ | ✅ | | | 基于百万量级Dureader Retrieval数据集训练RocketQA并达到前沿文本相似效果 | +| [情感分析](#情感分析) | `Taskflow("sentiment_analysis")` | ✅ | ✅ | ✅ | | ✅ | 集成BiLSTM、SKEP、UIE等模型,支持评论维度、观点抽取、情感极性分类等情感分析任务 | +| [生成式问答](#生成式问答) | `Taskflow("question_answering")` | ✅ | ✅ | ✅ | | | 使用最大中文开源CPM模型完成问答 | +| [智能写诗](#智能写诗) | `Taskflow("poetry_generation")` | ✅ | ✅ | ✅ | | | 使用最大中文开源CPM模型完成写诗 | +| [开放域对话](#开放域对话) | `Taskflow("dialogue")` | ✅ | ✅ | ✅ | | | 十亿级语料训练最强中文闲聊模型PLATO-Mini,支持多轮对话 | +| [代码生成](#代码生成) | `Taskflow("code_generation")` | ✅ | ✅ | ✅ | ✅ | | 代码生成大模型 | +| [文本摘要](#文本摘要) | `Taskflow("text_summarization")` | ✅ | ✅ | ✅ | ✅ | | 文本摘要大模型 | +| [文档智能](#文档智能) | `Taskflow("document_intelligence")` | ✅ | ✅ | ✅ | ✅ | | 以多语言跨模态布局增强文档预训练模型ERNIE-Layout为核心底座 | +| [问题生成](#问题生成) | `Taskflow("question_generation")` | ✅ | ✅ | ✅ | ✅ | | 问题生成大模型 | +| [零样本文本分类](#零样本文本分类) | `Taskflow("zero_shot_text_classification")` | ✅ | ✅ | ✅ | | ✅ | 集成多场景的通用文本分类工具 | +| [模型特征提取](#模型特征提取) | `Taskflow("feature_extraction")` | ✅ | ✅ | ✅ | ✅ | | 集成文本,图片的特征抽取工具 | ## QuickStart @@ -164,7 +164,7 @@ from paddlenlp import Taskflow #### 标签集合 | 标签 | 含义 | 标签 | 含义 | 标签 | 含义 | 标签 | 含义 | -| ---- | -------- | ---- | -------- | ---- | -------- | ---- | -------- | +|------|----------|------|----------|------|----------|------|----------| | n | 普通名词 | f | 方位名词 | s | 处所名词 | t | 时间 | | nr | 人名 | ns | 地名 | nt | 机构名 | nw | 作品名 | | nz | 其他专名 | v | 普通动词 | vd | 动副词 | vn | 名动词 | @@ -368,7 +368,7 @@ from paddlenlp import Taskflow - 快速模式采用的标签集合 | 标签 | 含义 | 标签 | 含义 | 标签 | 含义 | 标签 | 含义 | -| ---- | -------- | ---- | -------- | ---- | -------- | ---- | -------- | +|------|----------|------|----------|------|----------|------|----------| | n | 普通名词 | f | 方位名词 | s | 处所名词 | t | 时间 | | nr | 人名 | ns | 地名 | nt | 机构名 | nw | 作品名 | | nz | 其他专名 | v | 普通动词 | vd | 动副词 | vn | 名动词 | @@ -484,7 +484,7 @@ from paddlenlp import Taskflow #### 依存句法分析标注关系集合 | Label | 关系类型 | 说明 | 示例 | -| :---: | :--------: | :----------------------- | :----------------------------- | +|:-----:|:----------:|:-------------------------|:-------------------------------| | SBV | 主谓关系 | 主语与谓词间的关系 | 他送了一本书(他<--送) | | VOB | 动宾关系 | 宾语与谓词间的关系 | 他送了一本书(送-->书) | | POB | 介宾关系 | 介词与宾语间的关系 | 我把书卖了(把-->书) | @@ -870,17 +870,17 @@ from paddlenlp import Taskflow - 多模型选择,满足精度、速度要求 - | 模型 | 结构 | 语言 | - | :---: | :--------: | :--------: | - | `uie-base` (默认)| 12-layers, 768-hidden, 12-heads | 中文 | - | `uie-base-en` | 12-layers, 768-hidden, 12-heads | 英文 | - | `uie-medical-base` | 12-layers, 768-hidden, 12-heads | 中文 | - | `uie-medium`| 6-layers, 768-hidden, 12-heads | 中文 | - | `uie-mini`| 6-layers, 384-hidden, 12-heads | 中文 | - | `uie-micro`| 4-layers, 384-hidden, 12-heads | 中文 | - | `uie-nano`| 4-layers, 312-hidden, 12-heads | 中文 | - | `uie-m-large`| 24-layers, 1024-hidden, 16-heads | 中、英文 | - | `uie-m-base`| 12-layers, 768-hidden, 12-heads | 中、英文 | + | 模型 | 结构 | 语言 | + |:------------------:|:--------------------------------:|:--------:| + | `uie-base` (默认) | 12-layers, 768-hidden, 12-heads | 中文 | + | `uie-base-en` | 12-layers, 768-hidden, 12-heads | 英文 | + | `uie-medical-base` | 12-layers, 768-hidden, 12-heads | 中文 | + | `uie-medium` | 6-layers, 768-hidden, 12-heads | 中文 | + | `uie-mini` | 6-layers, 384-hidden, 12-heads | 中文 | + | `uie-micro` | 4-layers, 384-hidden, 12-heads | 中文 | + | `uie-nano` | 4-layers, 312-hidden, 12-heads | 中文 | + | `uie-m-large` | 24-layers, 1024-hidden, 16-heads | 中、英文 | + | `uie-m-base` | 12-layers, 768-hidden, 12-heads | 中、英文 | - `uie-nano`调用示例: @@ -930,7 +930,7 @@ from paddlenlp import Taskflow #### 定制训练 -对于简单的抽取目标可以直接使用```paddlenlp.Taskflow```实现零样本(zero-shot)抽取,对于细分场景我们推荐使用[定制训练](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/uie)(标注少量数据进行模型微调)以进一步提升效果。 +对于简单的抽取目标可以直接使用```paddlenlp.Taskflow```实现零样本(zero-shot)抽取,对于细分场景我们推荐使用[定制训练](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/model_zoo/uie)(标注少量数据进行模型微调)以进一步提升效果。 我们在互联网、医疗、金融三大垂类自建测试集上进行了实验: @@ -1150,7 +1150,7 @@ from paddlenlp import Taskflow 'TAIL_ROLE': [{'item': '王杰', 'offset': 10, 'type': '人物类_实体'}], 'TRIG': [{'item': '作词', 'offset': 12}]}]] ``` -具体的WordTag-IE信息抽取的功能可以见[WordTag-IE具体介绍](../../examples/text_to_knowledge/wordtag-ie/README.md) . +具体的WordTag-IE信息抽取的功能可以见[WordTag-IE具体介绍](../../legacy/examples/text_to_knowledge/wordtag-ie/README.md) . #### 名词短语标注 @@ -1246,16 +1246,16 @@ from paddlenlp import Taskflow - 多模型选择,满足精度、速度要求 - | 模型 | 结构 | 语言 | - | :---: | :--------: | :--------: | - | `rocketqa-zh-dureader-cross-encoder` | 12-layers, 768-hidden, 12-heads | 中文 | - | `simbert-base-chinese` (默认) | 12-layers, 768-hidden, 12-heads | 中文 | - | `rocketqa-base-cross-encoder` | 12-layers, 768-hidden, 12-heads | 中文 | - | `rocketqa-medium-cross-encoder` | 6-layers, 768-hidden, 12-heads | 中文 | - | `rocketqa-mini-cross-encoder` | 6-layers, 384-hidden, 12-heads | 中文 | - | `rocketqa-micro-cross-encoder` | 4-layers, 384-hidden, 12-heads | 中文 | - | `rocketqa-nano-cross-encoder` | 4-layers, 312-hidden, 12-heads | 中文 | - | `rocketqav2-en-marco-cross-encoder` | 12-layers, 768-hidden, 12-heads | 英文 | + | 模型 | 结构 | 语言 | + |:------------------------------------:|:-------------------------------:|:----:| + | `rocketqa-zh-dureader-cross-encoder` | 12-layers, 768-hidden, 12-heads | 中文 | + | `simbert-base-chinese` (默认) | 12-layers, 768-hidden, 12-heads | 中文 | + | `rocketqa-base-cross-encoder` | 12-layers, 768-hidden, 12-heads | 中文 | + | `rocketqa-medium-cross-encoder` | 6-layers, 768-hidden, 12-heads | 中文 | + | `rocketqa-mini-cross-encoder` | 6-layers, 384-hidden, 12-heads | 中文 | + | `rocketqa-micro-cross-encoder` | 4-layers, 384-hidden, 12-heads | 中文 | + | `rocketqa-nano-cross-encoder` | 4-layers, 312-hidden, 12-heads | 中文 | + | `rocketqav2-en-marco-cross-encoder` | 12-layers, 768-hidden, 12-heads | 英文 | #### 可配置参数说明 @@ -1417,7 +1417,7 @@ from paddlenlp import Taskflow ``` #### 可配置参数说明 -* `model`:可选模型,默认为Salesforce/codegen-350M-mono,支持的模型参考[CodeGen文档](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/examples/code_generation/codegen/README.md)。 +* `model`:可选模型,默认为Salesforce/codegen-350M-mono,支持的模型参考[CodeGen文档](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/legacy/examples/code_generation/codegen/README.md)。 * `batch_size`:批处理大小,请结合机器情况进行调整,默认为1。 * `max_length`:生成代码的最大长度,默认为128。 * `min_length`:生成代码的最小长度,默认为0。 @@ -1697,12 +1697,12 @@ Tensor(shape=[1, 2], dtype=float32, place=Place(gpu:0), stop_gradient=True, - 多模型选择,满足精度、速度要求 - | 模型 | 视觉| 文本 | 语言 | - | :---: | :--------: | :--------: | :--------: | - | `PaddlePaddle/ernie_vil-2.0-base-zh` (默认) | ViT | ERNIE | 中文 | - | `OFA-Sys/chinese-clip-vit-base-patch16` | ViT-B/16 |RoBERTa-wwm-Base| 中文 | - | `OFA-Sys/chinese-clip-vit-large-patch14` | ViT-L/14 | RoBERTa-wwm-Base | 中文 | - | `OFA-Sys/chinese-clip-vit-large-patch14-336px` | ViT-L/14 | RoBERTa-wwm-Base | 中文 | + | 模型 | 视觉 | 文本 | 语言 | + |:----------------------------------------------:|:--------:|:----------------:|:----:| + | `PaddlePaddle/ernie_vil-2.0-base-zh` (默认) | ViT | ERNIE | 中文 | + | `OFA-Sys/chinese-clip-vit-base-patch16` | ViT-B/16 | RoBERTa-wwm-Base | 中文 | + | `OFA-Sys/chinese-clip-vit-large-patch14` | ViT-L/14 | RoBERTa-wwm-Base | 中文 | + | `OFA-Sys/chinese-clip-vit-large-patch14-336px` | ViT-L/14 | RoBERTa-wwm-Base | 中文 | #### 可配置参数说明 @@ -1740,24 +1740,24 @@ Tensor(shape=[2], dtype=float32, place=Place(gpu:0), stop_gradient=True, - 多模型选择,满足精度、速度要求 - | 模型 | 层数| 维度 | 语言| - | :---: | :--------: | :--------: | :--------: | - | `rocketqa-zh-dureader-query-encoder` | 12 | 768 | 中文| - | `rocketqa-zh-dureader-para-encoder` | 12 | 768 | 中文| - | `rocketqa-zh-base-query-encoder` | 12 | 768 | 中文| - | `rocketqa-zh-base-para-encoder` | 12 | 768 | 中文| - | `moka-ai/m3e-base` | 12 | 768 | 中文| - | `rocketqa-zh-medium-query-encoder` | 6 | 768 | 中文| - | `rocketqa-zh-medium-para-encoder` | 6 | 768 | 中文| - | `rocketqa-zh-mini-query-encoder` | 6 | 384 | 中文| - | `rocketqa-zh-mini-para-encoder` | 6 | 384 | 中文| - | `rocketqa-zh-micro-query-encoder` | 4 | 384 | 中文| - | `rocketqa-zh-micro-para-encoder` | 4 | 384 | 中文| - | `rocketqa-zh-nano-query-encoder` | 4 | 312 | 中文| - | `rocketqa-zh-nano-para-encoder` | 4 | 312 | 中文| - | `rocketqav2-en-marco-query-encoder` | 12 | 768 | 英文| - | `rocketqav2-en-marco-para-encoder` | 12 | 768 | 英文| - | `ernie-search-base-dual-encoder-marco-en"` | 12 | 768 | 英文| + | 模型 | 层数 | 维度 | 语言 | + |:------------------------------------------:|:----:|:----:|:----:| + | `rocketqa-zh-dureader-query-encoder` | 12 | 768 | 中文 | + | `rocketqa-zh-dureader-para-encoder` | 12 | 768 | 中文 | + | `rocketqa-zh-base-query-encoder` | 12 | 768 | 中文 | + | `rocketqa-zh-base-para-encoder` | 12 | 768 | 中文 | + | `moka-ai/m3e-base` | 12 | 768 | 中文 | + | `rocketqa-zh-medium-query-encoder` | 6 | 768 | 中文 | + | `rocketqa-zh-medium-para-encoder` | 6 | 768 | 中文 | + | `rocketqa-zh-mini-query-encoder` | 6 | 384 | 中文 | + | `rocketqa-zh-mini-para-encoder` | 6 | 384 | 中文 | + | `rocketqa-zh-micro-query-encoder` | 4 | 384 | 中文 | + | `rocketqa-zh-micro-para-encoder` | 4 | 384 | 中文 | + | `rocketqa-zh-nano-query-encoder` | 4 | 312 | 中文 | + | `rocketqa-zh-nano-para-encoder` | 4 | 312 | 中文 | + | `rocketqav2-en-marco-query-encoder` | 12 | 768 | 英文 | + | `rocketqav2-en-marco-para-encoder` | 12 | 768 | 英文 | + | `ernie-search-base-dual-encoder-marco-en"` | 12 | 768 | 英文 | #### 可配置参数说明 * `batch_size`:批处理大小,请结合机器情况进行调整,默认为1。 @@ -1774,23 +1774,23 @@ Tensor(shape=[2], dtype=float32, place=Place(gpu:0), stop_gradient=True, 如果你有自己的业务数据集,可以对模型效果进一步调优,支持定制化训练的任务如下: -| 任务名称 | 默认路径 | | -| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | -| `Taskflow("word_segmentation", mode="base")` | `$HOME/.paddlenlp/taskflow/lac` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/lexical_analysis) | -| `Taskflow("word_segmentation", mode="accurate")` | `$HOME/.paddlenlp/taskflow/wordtag` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/text_to_knowledge/ernie-ctm) | -| `Taskflow("pos_tagging")` | `$HOME/.paddlenlp/taskflow/lac` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/lexical_analysis) | -| `Taskflow("ner", mode="fast")` | `$HOME/.paddlenlp/taskflow/lac` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/lexical_analysis) | -| `Taskflow("ner", mode="accurate")` | `$HOME/.paddlenlp/taskflow/wordtag` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/text_to_knowledge/ernie-ctm) | -| `Taskflow("information_extraction", model="uie-base")` | `$HOME/.paddlenlp/taskflow/information_extraction/uie-base` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/uie) | -| `Taskflow("information_extraction", model="uie-tiny")` | `$HOME/.paddlenlp/taskflow/information_extraction/uie-tiny` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/uie) | -| `Taskflow("text_correction", model="ernie-csc")` | `$HOME/.paddlenlp/taskflow/text_correction/ernie-csc` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/text_correction/ernie-csc) | -| `Taskflow("dependency_parsing", model="ddparser")` | `$HOME/.paddlenlp/taskflow/dependency_parsing/ddparser` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/dependency_parsing/ddparser) | -| `Taskflow("dependency_parsing", model="ddparser-ernie-1.0")` | `$HOME/.paddlenlp/taskflow/dependency_parsing/ddparser-ernie-1.0` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/dependency_parsing/ddparser) | -| `Taskflow("dependency_parsing", model="ddparser-ernie-gram-zh")` | `$HOME/.paddlenlp/taskflow/dependency_parsing/ddparser-ernie-gram-zh` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/dependency_parsing/ddparser) | -| `Taskflow("sentiment_analysis", model="skep_ernie_1.0_large_ch")` | `$HOME/.paddlenlp/taskflow/sentiment_analysis/skep_ernie_1.0_large_ch` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/sentiment_analysis/skep) | -| `Taskflow("knowledge_mining", model="wordtag")` | `$HOME/.paddlenlp/taskflow/wordtag` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/text_to_knowledge/ernie-ctm) | -| `Taskflow("knowledge_mining", model="nptag")` | `$HOME/.paddlenlp/taskflow/knowledge_mining/nptag` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/text_to_knowledge/nptag) | -| `Taskflow("zero_shot_text_classification", model="utc-base")` | `$HOME/.paddlenlp/taskflow/zero_shot_text_classification/utc-base` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/zero_shot_text_classification) | +| 任务名称 | 默认路径 | | +|:-----------------------------------------------------------------:|:----------------------------------------------------------------------:|:----------------------------------------------------------------------------------------------------------------:| +| `Taskflow("word_segmentation", mode="base")` | `$HOME/.paddlenlp/taskflow/lac` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/examples/lexical_analysis) | +| `Taskflow("word_segmentation", mode="accurate")` | `$HOME/.paddlenlp/taskflow/wordtag` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/examples/text_to_knowledge/ernie-ctm) | +| `Taskflow("pos_tagging")` | `$HOME/.paddlenlp/taskflow/lac` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/examples/lexical_analysis) | +| `Taskflow("ner", mode="fast")` | `$HOME/.paddlenlp/taskflow/lac` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/examples/lexical_analysis) | +| `Taskflow("ner", mode="accurate")` | `$HOME/.paddlenlp/taskflow/wordtag` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/examples/text_to_knowledge/ernie-ctm) | +| `Taskflow("information_extraction", model="uie-base")` | `$HOME/.paddlenlp/taskflow/information_extraction/uie-base` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/model_zoo/uie) | +| `Taskflow("information_extraction", model="uie-tiny")` | `$HOME/.paddlenlp/taskflow/information_extraction/uie-tiny` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/model_zoo/uie) | +| `Taskflow("text_correction", model="ernie-csc")` | `$HOME/.paddlenlp/taskflow/text_correction/ernie-csc` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/examples/text_correction/ernie-csc) | +| `Taskflow("dependency_parsing", model="ddparser")` | `$HOME/.paddlenlp/taskflow/dependency_parsing/ddparser` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/examples/dependency_parsing/ddparser) | +| `Taskflow("dependency_parsing", model="ddparser-ernie-1.0")` | `$HOME/.paddlenlp/taskflow/dependency_parsing/ddparser-ernie-1.0` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/examples/dependency_parsing/ddparser) | +| `Taskflow("dependency_parsing", model="ddparser-ernie-gram-zh")` | `$HOME/.paddlenlp/taskflow/dependency_parsing/ddparser-ernie-gram-zh` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/examples/dependency_parsing/ddparser) | +| `Taskflow("sentiment_analysis", model="skep_ernie_1.0_large_ch")` | `$HOME/.paddlenlp/taskflow/sentiment_analysis/skep_ernie_1.0_large_ch` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/examples/sentiment_analysis/skep) | +| `Taskflow("knowledge_mining", model="wordtag")` | `$HOME/.paddlenlp/taskflow/wordtag` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/examples/text_to_knowledge/ernie-ctm) | +| `Taskflow("knowledge_mining", model="nptag")` | `$HOME/.paddlenlp/taskflow/knowledge_mining/nptag` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/examples/text_to_knowledge/nptag) | +| `Taskflow("zero_shot_text_classification", model="utc-base")` | `$HOME/.paddlenlp/taskflow/zero_shot_text_classification/utc-base` | [示例](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/applications/zero_shot_text_classification) |
@@ -1808,7 +1808,7 @@ $HOME/.paddlenlp/taskflow/wordtag/ └── tags.txt # 默认标签文件 ``` -* 参考上表中对应[示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/text_to_knowledge/ernie-ctm)准备数据集和标签文件`tags.txt`,执行相应训练脚本得到自己的`model_state.pdparams`和`model_config.json`。 +* 参考上表中对应[示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/examples/text_to_knowledge/ernie-ctm)准备数据集和标签文件`tags.txt`,执行相应训练脚本得到自己的`model_state.pdparams`和`model_config.json`。 * 根据自己数据集情况,修改标签文件`tags.txt`。 @@ -1834,25 +1834,25 @@ my_ner = Taskflow("ner", mode="accurate", task_path="./custom_task_path/")
任务名称模型模型详情训练集 -
中文分词默认模式: BiGRU+CRF 训练详情 百度自建数据集,包含近2200万句子,覆盖多种场景 +
中文分词默认模式: BiGRU+CRF 训练详情 百度自建数据集,包含近2200万句子,覆盖多种场景
快速模式:Jieba - - -
精确模式:WordTag 训练详情 百度自建数据集,词类体系基于TermTree构建 -
词性标注BiGRU+CRF 训练详情 百度自建数据集,包含2200万句子,覆盖多种场景 -
命名实体识别精确模式:WordTag 训练详情 百度自建数据集,词类体系基于TermTree构建 -
快速模式:BiGRU+CRF 训练详情 百度自建数据集,包含2200万句子,覆盖多种场景 -
依存句法分析DDParser 训练详情 百度自建数据集,DuCTB 1.0中文依存句法树库 -
信息抽取 UIE 训练详情 百度自建数据集 -
解语知识标注词类知识标注:WordTag 训练详情 百度自建数据集,词类体系基于TermTree构建 -
名词短语标注:NPTag 训练详情 百度自建数据集 -
文本纠错ERNIE-CSC 训练详情 SIGHAN简体版数据集及 Automatic Corpus Generation生成的中文纠错数据集 +
精确模式:WordTag 训练详情 百度自建数据集,词类体系基于TermTree构建 +
词性标注BiGRU+CRF 训练详情 百度自建数据集,包含2200万句子,覆盖多种场景 +
命名实体识别精确模式:WordTag 训练详情 百度自建数据集,词类体系基于TermTree构建 +
快速模式:BiGRU+CRF 训练详情 百度自建数据集,包含2200万句子,覆盖多种场景 +
依存句法分析DDParser 训练详情 百度自建数据集,DuCTB 1.0中文依存句法树库 +
信息抽取 UIE 训练详情 百度自建数据集 +
解语知识标注词类知识标注:WordTag 训练详情 百度自建数据集,词类体系基于TermTree构建 +
名词短语标注:NPTag 训练详情 百度自建数据集 +
文本纠错ERNIE-CSC 训练详情 SIGHAN简体版数据集及 Automatic Corpus Generation生成的中文纠错数据集
文本相似度SimBERT - 收集百度知道2200万对相似句组
情感分析 BiLSTM - 百度自建数据集 -
SKEP 训练详情 百度自建数据集 -
UIE 训练详情 百度自建数据集 +
SKEP 训练详情 百度自建数据集 +
UIE 训练详情 百度自建数据集
生成式问答CPM - 100GB级别中文数据
智能写诗CPM - 100GB级别中文数据
开放域对话PLATO-Mini - 十亿级别中文对话数据 -
零样本文本分类UTC 训练详情 百度自建数据集 +
零样本文本分类UTC 训练详情 百度自建数据集
diff --git a/docs/server.md b/docs/server.md index 1505790b65c1..994967859506 100644 --- a/docs/server.md +++ b/docs/server.md @@ -202,6 +202,6 @@ texts = [ 在Client发送请求的过程中可以一些参数来控制服务化处理逻辑,例如上面的 `max_seq_len`和 `batch_size` 均可以控制服务化处理时的序列长度和处理batch_size 。 ## 参考示例 -- [UIE 服务化部署](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/uie/deploy/serving/simple_serving) -- [文本分类服务化部署](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/multi_class/deploy/simple_serving) -- [预训练模型定制化post_handler](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/ernie-health/cblue/deploy/serving/simple_serving) +- [UIE 服务化部署](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/model_zoo/uie/deploy/serving/simple_serving) +- [文本分类服务化部署](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/applications/text_classification/multi_class/deploy/simple_serving) +- [预训练模型定制化post_handler](https://github.com/PaddlePaddle/PaddleNLP/blob/release/2.8/model_zoo/ernie-health/cblue/deploy/serving/simple_serving) diff --git a/docs/trainer.md b/docs/trainer.md index 533f8ffe2f6d..e8715e88e325 100644 --- a/docs/trainer.md +++ b/docs/trainer.md @@ -14,7 +14,7 @@ PaddleNLP提供了Trainer训练API,针对训练过程的通用训练配置做 ## Trainer基本使用方法介绍 下面是用户使用 Trainer API进行finetune任务的简单示例,这里以中文情感分类数据集`chnsenticorp`为例。 -更详细的使用可以参考[CLUE Trainer](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/examples/benchmark/clue/classification/run_clue_classifier_trainer.py)版本。 +更详细的使用可以参考[CLUE Trainer](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/legacy/examples/benchmark/clue/classification/run_clue_classifier_trainer.py)版本。 1. 导入需要用到的头文件。 - 主要是模型、Tokenizer @@ -82,7 +82,7 @@ if training_args.do_train: trainer.log_metrics("train", metrics) trainer.save_state() ``` -预训练的使用方式可以参考[ERNIE-1.0 Trainer](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/model_zoo/ernie-1.0/run_pretrain_trainer.py)版本。 +预训练的使用方式可以参考[ERNIE-1.0 Trainer](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/legacy/model_zoo/ernie-1.0/run_pretrain_trainer.py)版本。 ## Trainer进阶分布式能力使用介绍 @@ -102,9 +102,9 @@ if training_args.do_train: 混合并行这里, 主要添加了 tensor parallel (TP) 和 pipeline parallel(PP)支持. 目前, PaddleNLP主要对一些大模型, 如 GPT, Llama等做了 TP PP支持, 用户可以使用这些策略. -相关代码实现可以参考llama训练的[例子](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/examples/language_model/llama/run_trainer_tp4pp2.sh) +相关代码实现可以参考llama训练的[例子](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm) -流水线并行的组网改造可以参见[modeling_pp.py](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/examples/language_model/llama/modeling_pp.py) +流水线并行的组网改造可以参见[modeling_pp.py](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/paddlenlp/transformers/llama/modeling_pp.py) 当组网适配好 张量并行(TP), 流水线并行(PP)之后, 用户使用 `--tensor_parallel_degree` `--pipeline_parallel_degree` 即可启用混合并行训练. diff --git a/legacy/applications/README.md b/legacy/applications/README.md index 650edeec997d..d75461dda949 100644 --- a/legacy/applications/README.md +++ b/legacy/applications/README.md @@ -34,15 +34,14 @@ PaddleNLP 从预训练模型库出发,提供了经典预训练模型在主流 | 场景任务 | Pipelines版本地址 | 可定制版本地址 | Notebook | | :--------------- | ------- | ------- | ------- | | **检索**| [字面+语义检索](../pipelines/examples/semantic-search) | [语义检索](./neural_search) | [基于Pipelines搭建检索系统](https://aistudio.baidu.com/aistudio/projectdetail/4442670)
[二次开发语义检索](https://aistudio.baidu.com/aistudio/projectdetail/3351784) | -| **问答** | [FAQ问答](../pipelines/examples/FAQ/)
[无监督检索式问答](../pipelines/examples/unsupervised-question-answering)
[有监督检索式问答](../pipelines/examples/question-answering) | [FAQ问答](./question_answering/supervised_qa)
[无监督检索式问答](./question_answering/unsupervised_qa) | [基于Pipelines搭建FAQ问答系统](https://aistudio.baidu.com/aistudio/projectdetail/4465498)
[基于Pipelines搭建抽取式问答系统](https://aistudio.baidu.com/aistudio/projectdetail/4442857)
[FAQ政务问答](https://aistudio.baidu.com/aistudio/projectdetail/3678873)
[FAQ保险问答](https://aistudio.baidu.com/aistudio/projectdetail/3882519) | +| **问答** | [FAQ问答](../pipelines/examples/FAQ/)
[无监督检索式问答](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/pipelines/examples/unsupervised-question-answering)
[有监督检索式问答](../pipelines/examples/question-answering) | [FAQ问答](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/applications/question_answering/supervised_qa)
[无监督检索式问答](./question_answering/unsupervised_qa) | [基于Pipelines搭建FAQ问答系统](https://aistudio.baidu.com/aistudio/projectdetail/4465498)
[基于Pipelines搭建抽取式问答系统](https://aistudio.baidu.com/aistudio/projectdetail/4442857)
[FAQ政务问答](https://aistudio.baidu.com/aistudio/projectdetail/3678873)
[FAQ保险问答](https://aistudio.baidu.com/aistudio/projectdetail/3882519) | | **文本分类**| 暂无 | [文本分类](./text_classification) | [对话意图识别](https://aistudio.baidu.com/aistudio/projectdetail/2017202)
[法律文本多标签分类](https://aistudio.baidu.com/aistudio/projectdetail/3996601)
[层次分类](https://aistudio.baidu.com/aistudio/projectdetail/4568985) | -| **通用文本分类** | 暂无 | [通用文本分类](./zero_shot_text_classification) | | +| **通用文本分类** | 暂无 | [通用文本分类](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/applications/zero_shot_text_classification) | | | **通用信息抽取** | 暂无 | [通用信息抽取](./information_extraction) | [UIE快速体验](https://aistudio.baidu.com/aistudio/projectdetail/3914778)
[UIE微调实体抽取](https://aistudio.baidu.com/aistudio/projectdetail/4038499)
[UIE微调关系抽取](https://aistudio.baidu.com/aistudio/projectdetail/4371345)
[UIE-X快速体验](https://aistudio.baidu.com/aistudio/projectdetail/5017442)
[UIE-X微调](https://aistudio.baidu.com/aistudio/projectdetail/5261592) | -| **情感分析** | [情感分析](../pipelines/examples/sentiment_analysis) | [情感分析](./sentiment_analysis) | [情感分析](https://aistudio.baidu.com/aistudio/projectdetail/5318177)| -| **文档智能** | [文档抽取问答](../pipelines/examples/document-intelligence) | [跨模态文档问答](./document_intelligence/doc_vqa)| [文档抽取问答](https://aistudio.baidu.com/aistudio/projectdetail/4881278)
[汽车说明书问答](https://aistudio.baidu.com/aistudio/projectdetail/4049663) | -| **文生图** | [文生图系统](../pipelines/examples/text_to_image) | 可参考[PPDiffusers](../ppdiffusers) | | -| **语音指令解析** | 暂无 | [语音指令解析](./speech_cmd_analysis) | [语音指令解析](https://aistudio.baidu.com/aistudio/projectdetail/4399703) | -| **文本摘要** | 暂无 | [文本摘要](./text_summarization) | [文本摘要](https://aistudio.baidu.com/aistudio/projectdetail/4903667) | +| **情感分析** | [情感分析](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/pipelines/examples/sentiment_analysis) | [情感分析](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/applications/sentiment_analysis) | [情感分析](https://aistudio.baidu.com/aistudio/projectdetail/5318177)| +| **文档智能** | [文档抽取问答](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/pipelines/examples/document-intelligence) | [跨模态文档问答](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/applications/document_intelligence/doc_vqa)| [文档抽取问答](https://aistudio.baidu.com/aistudio/projectdetail/4881278)
[汽车说明书问答](https://aistudio.baidu.com/aistudio/projectdetail/4049663) | +| **文生图** | [文生图系统](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/pipelines/examples/text_to_image) | 可参考[PaddleMIX](https://github.com/PaddlePaddle/PaddleMIX) | | +| **文本摘要** | 暂无 | [文本摘要](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/applications/text_summarization) | [文本摘要](https://aistudio.baidu.com/aistudio/projectdetail/4903667) | ## 3、典型范例介绍 @@ -79,7 +78,7 @@ PaddleNLP 从预训练模型库出发,提供了经典预训练模型在主流 -详细使用说明请参考[智能问答系统](./question_answering)与[文档智能问答](./document_intelligence/doc_vqa)。 +详细使用说明请参考[智能问答系统](./question_answering)与[文档智能问答](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/applications/document_intelligence/doc_vqa)。 #### 📚 通用文本分类 @@ -91,7 +90,7 @@ PaddleNLP 从预训练模型库出发,提供了经典预训练模型在主流
-详细使用说明请参考[通用文本分类](./zero_shot_text_classification),更多:[文章解读](https://mp.weixin.qq.com/s/VV-nYv4y1r7oipJnURRL5w)。 +详细使用说明请参考[通用文本分类](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/applications/zero_shot_text_classification),更多:[文章解读](https://mp.weixin.qq.com/s/VV-nYv4y1r7oipJnURRL5w)。 #### 🗂 文本分类 @@ -117,14 +116,4 @@ PaddleNLP 从预训练模型库出发,提供了经典预训练模型在主流
-详细使用说明请参考[情感分析](./sentiment_analysis),更多:[文章解读](https://mp.weixin.qq.com/s/QAHjIRG9zxpYfM6YPRQ-9w)。 - -#### 🎙️ 智能语音指令解析 - -- 集成了[PaddleSpeech](https://github.com/PaddlePaddle/PaddleSpeech)和[百度开放平台](https://ai.baidu.com/)的语音识别和[UIE](./model_zoo/uie)通用信息抽取等技术,打造智能一体化的语音指令解析系统范例,该方案可应用于智能语音填单、智能语音交互、智能语音检索等场景,提高人机交互效率。 - -
- -
- -详细使用说明请参考[智能语音指令解析](./applications/speech_cmd_analysis)。 +详细使用说明请参考[情感分析](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/applications/sentiment_analysis),更多:[文章解读](https://mp.weixin.qq.com/s/QAHjIRG9zxpYfM6YPRQ-9w)。 diff --git a/legacy/applications/neural_search/README.md b/legacy/applications/neural_search/README.md index 8ef1ba059609..8786fc2a73d3 100644 --- a/legacy/applications/neural_search/README.md +++ b/legacy/applications/neural_search/README.md @@ -16,7 +16,7 @@ 车头如何放置车牌 后牌照怎么装 ``` -语义检索系统的关键就在于,采用语义而非关键词方式进行召回,达到更精准、更广泛得召回相似结果的目的。想快速体验搜索的效果,请参考[Pipelines的语义检索实现](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/pipelines/examples/semantic-search) +语义检索系统的关键就在于,采用语义而非关键词方式进行召回,达到更精准、更广泛得召回相似结果的目的。想快速体验搜索的效果,请参考[Pipelines的语义检索实现](../../pipelines/examples/semantic-search)
@@ -66,11 +66,11 @@ 我们针对不同的数据情况推出三种语义索引方案,如下图所示,您可以参照此方案,快速建立语义索引: -| ⭐️ 无监督数据 | ⭐️ 有监督数据 | **召回方案** | -| ------------ | ------------ | ------------ | -| 多 | 无 | SimCSE | -| 无 | 多 | In-batch Negatives| -| 有 | 有 | SimCSE+ In-batch Negatives | +| ⭐️ 无监督数据 | ⭐️ 有监督数据 | **召回方案** | +|--------------|--------------|----------------------------| +| 多 | 无 | SimCSE | +| 无 | 多 | In-batch Negatives | +| 有 | 有 | SimCSE+ In-batch Negatives | 最基本的情况是只有无监督数据,我们推荐您使用 SimCSE 进行无监督训练;另一种方案是只有有监督数据,我们推荐您使用 In-batch Negatives 的方法进行有监督训练。 @@ -120,12 +120,12 @@ (4)在排序阶段,使用点击(作为正样本)和展现未点击(作为负样本)数据构造排序阶段的训练集,进行精排训练。 -| 阶段 |模型 | 训练集 | 评估集(用于评估模型效果) | 召回库 |测试集 | -| ------------ | ------------ |------------ | ------------ | ------------ | ------------ | -| 召回 | Domain-adaptive Pretraining | 2kw | - | - | - | -| 召回 | 无监督预训练 - SimCSE | 798w | 20000 | 300000| 1000 | -| 召回 | 有监督训练 - In-batch Negatives | 3998 | 20000 |300000 | 1000 | -| 排序 | 有监督训练 - ERNIE-Gram单塔 Pairwise/RocketQA Cross Encoder| 1973538 | 57811 | - | 1000 | +| 阶段 | 模型 | 训练集 | 评估集(用于评估模型效果) | 召回库 | 测试集 | +|------|-------------------------------------------------------------|---------|----------------------------|--------|--------| +| 召回 | Domain-adaptive Pretraining | 2kw | - | - | - | +| 召回 | 无监督预训练 - SimCSE | 798w | 20000 | 300000 | 1000 | +| 召回 | 有监督训练 - In-batch Negatives | 3998 | 20000 | 300000 | 1000 | +| 排序 | 有监督训练 - ERNIE-Gram单塔 Pairwise/RocketQA Cross Encoder | 1973538 | 57811 | - | 1000 | 我们将除 Domain-adaptive Pretraining 之外的其他数据集全部开源,下载地址: @@ -314,7 +314,7 @@ pip install -r requirements.txt ## 4. Neural Search 快速体验实践 -PaddleNLP已经基于ERNIE 1.0训练了一个基线模型,如果想快速搭建Neural Search的完整系统,有两种方法,第一种是请参考下面的实现,包含了服务化的完整流程,另一种是使用Pipelines加载,Pipelines已经支持Neural Search训练的模型的载入,可以使用Pipelines的快速的基于Neural Search模型实现检索系统,详情请参考文档[Pipelines-Neural-Search](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/pipelines/examples/semantic-search/Neural_Search.md)。 +PaddleNLP已经基于ERNIE 1.0训练了一个基线模型,如果想快速搭建Neural Search的完整系统,有两种方法,第一种是请参考下面的实现,包含了服务化的完整流程,另一种是使用Pipelines加载,Pipelines已经支持Neural Search训练的模型的载入,可以使用Pipelines的快速的基于Neural Search模型实现检索系统,详情请参考文档[Pipelines-Neural-Search](../../pipelines/examples/semantic-search/Neural_Search.md)。 ### 4.1. 召回 @@ -385,14 +385,14 @@ time to cost :0.05616641044616699 seconds 我们进行了多组实践,用来对比说明召回阶段各方案的效果: -| 模型 | Recall@1 | Recall@5 |Recall@10 |Recall@20 |Recall@50 |策略简要说明| -| ------------ | ------------ | ------------ |--------- |--------- |--------- |--------- | -| 有监督训练 Baseline | 30.077| 43.513| 48.633 | 53.448 |59.632| 标准 pair-wise 训练范式,通过随机采样产生负样本| -| 有监督训练 In-batch Negatives | 51.301 | 65.309| 69.878| 73.996|78.881| In-batch Negatives 有监督训练| -| 无监督训练 SimCSE | 42.374 | 57.505| 62.641| 67.09|72.331| SimCSE 无监督训练| -| 无监督 + 有监督训练 SimCSE + In-batch Negatives | 55.976 | 71.849| 76.363| 80.49|84.809| SimCSE无监督训练,In-batch Negatives 有监督训练| -| Domain-adaptive Pretraining + SimCSE | 51.031 | 66.648| 71.338 | 75.676 |80.144| ERNIE 预训练,SimCSE 无监督训练| -| Domain-adaptive Pretraining + SimCSE + In-batch Negatives| **58.248** | **75.099**| **79.813**| **83.801**|**87.733**| ERNIE 预训练,SimCSE 无监督训训练,In-batch Negatives 有监督训练| +| 模型 | Recall@1 | Recall@5 | Recall@10 | Recall@20 | Recall@50 | 策略简要说明 | +|-----------------------------------------------------------|------------|------------|------------|------------|------------|------------------------------------------------------------------| +| 有监督训练 Baseline | 30.077 | 43.513 | 48.633 | 53.448 | 59.632 | 标准 pair-wise 训练范式,通过随机采样产生负样本 | +| 有监督训练 In-batch Negatives | 51.301 | 65.309 | 69.878 | 73.996 | 78.881 | In-batch Negatives 有监督训练 | +| 无监督训练 SimCSE | 42.374 | 57.505 | 62.641 | 67.09 | 72.331 | SimCSE 无监督训练 | +| 无监督 + 有监督训练 SimCSE + In-batch Negatives | 55.976 | 71.849 | 76.363 | 80.49 | 84.809 | SimCSE无监督训练,In-batch Negatives 有监督训练 | +| Domain-adaptive Pretraining + SimCSE | 51.031 | 66.648 | 71.338 | 75.676 | 80.144 | ERNIE 预训练,SimCSE 无监督训练 | +| Domain-adaptive Pretraining + SimCSE + In-batch Negatives | **58.248** | **75.099** | **79.813** | **83.801** | **87.733** | ERNIE 预训练,SimCSE 无监督训训练,In-batch Negatives 有监督训练 | 从上述表格可以看出,首先利用 ERNIE 3.0 做 Domain-adaptive Pretraining ,然后把训练好的模型加载到 SimCSE 上进行无监督训练,最后利用 In-batch Negatives 在有监督数据上进行训练能够获得最佳的性能。[模型下载](https://paddlenlp.bj.bcebos.com/models/inbatch_model_best.zip),模型的使用方式参考[In-batch Negatives](./recall/in_batch_negative/) 。 @@ -401,7 +401,7 @@ time to cost :0.05616641044616699 seconds 第一步:无监督训练 Domain-adaptive Pretraining -训练用时 16hour55min,可参考:[ERNIE 1.0](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/ernie-1.0) +训练用时 16hour55min,可参考:[ERNIE 1.0](../../model_zoo/ernie-1.0) 第二步:无监督训练 SimCSE @@ -453,11 +453,11 @@ time to cost :0.05616641044616699 seconds 排序阶段的效果评估: -| 模型 | AUC | -| ------------ | ------------ | -| Baseline: In-batch Negatives | 0.582 | -| pairwise ERNIE-Gram |0.801 | -| CrossEncoder:rocketqa-base-cross-encoder |**0.835** | +| 模型 | AUC | +|-------------------------------------------|-----------| +| Baseline: In-batch Negatives | 0.582 | +| pairwise ERNIE-Gram | 0.801 | +| CrossEncoder:rocketqa-base-cross-encoder | **0.835** | 同样输入文本: diff --git a/legacy/applications/neural_search/recall/simcse/README.md b/legacy/applications/neural_search/recall/simcse/README.md index 033afd18008f..0173f4538245 100644 --- a/legacy/applications/neural_search/recall/simcse/README.md +++ b/legacy/applications/neural_search/recall/simcse/README.md @@ -50,10 +50,10 @@ SimCSE 模型适合缺乏监督数据,但是又有大量无监督数据的匹 **效果评估** -| 策略 | 模型| Recall@1 | Recall@5 |Recall@10 |Recall@20 |Recall@50 | -| ------------ | ------------ | ------------ |--------- |--------- |--------- |--------- | -| SimCSE | ernie 1.0 |42.374 | 57.505| 62.641| 67.09|72.331| -| SimCSE | rocketqa-zh-base-query-encoder |**50.108** | **64.005**| **68.288**| **72.306**|**77.306**| +| 策略 | 模型 | Recall@1 | Recall@5 | Recall@10 | Recall@20 | Recall@50 | +|--------|--------------------------------|------------|------------|------------|------------|------------| +| SimCSE | ernie 1.0 | 42.374 | 57.505 | 62.641 | 67.09 | 72.331 | +| SimCSE | rocketqa-zh-base-query-encoder | **50.108** | **64.005** | **68.288** | **72.306** | **77.306** | @@ -155,9 +155,9 @@ simcse/ 以下模型结构参数为: `TrasformerLayer:12, Hidden:768, Heads:12, OutputEmbSize: 256` -|Model|训练参数配置|硬件|MD5| -| ------------ | ------------ | ------------ |-----------| -|[SimCSE](https://bj.bcebos.com/v1/paddlenlp/models/simcse_model.zip)|
ernie 1.0 epoch:3 lr:5E-5 bs:64 max_len:64
|
4卡 v100-16g
|7c46d9b15a214292e3897c0eb70d0c9f| +| Model | 训练参数配置 | 硬件 | MD5 | +|----------------------------------------------------------------------|-----------------------------------------------------------------------------|----------------------------------------------|----------------------------------| +| [SimCSE](https://bj.bcebos.com/v1/paddlenlp/models/simcse_model.zip) |
ernie 1.0 epoch:3 lr:5E-5 bs:64 max_len:64
|
4卡 v100-16g
| 7c46d9b15a214292e3897c0eb70d0c9f | ### 训练环境说明 @@ -442,7 +442,7 @@ sh deploy.sh #### SimCSE模型怎么部署? -+ SimCSE使用的模型跟 In-batch Negatives 训练出来的模型网络结构是一样的,使用 In-batch Negatives 的部署流程即可,参考[In-batch Negatives](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/neural_search/recall/in_batch_negative/deploy/python) ++ SimCSE使用的模型跟 In-batch Negatives 训练出来的模型网络结构是一样的,使用 In-batch Negatives 的部署流程即可,参考[In-batch Negatives](../in_batch_negative/deploy/python) ## Reference [1] Gao, Tianyu, Xingcheng Yao, and Danqi Chen. “SimCSE: Simple Contrastive Learning of Sentence Embeddings.” ArXiv:2104.08821 [Cs], April 18, 2021. http://arxiv.org/abs/2104.08821. diff --git a/legacy/applications/question_answering/unsupervised_qa/README.md b/legacy/applications/question_answering/unsupervised_qa/README.md index 719d8f640f56..dbed88d1f2b5 100644 --- a/legacy/applications/question_answering/unsupervised_qa/README.md +++ b/legacy/applications/question_answering/unsupervised_qa/README.md @@ -28,9 +28,9 @@ ## 简介 问答(QA)系统中最关键的挑战之一是标记数据的稀缺性,这是因为对目标领域获取问答对或常见问答对(FAQ)的成本很高,需要消耗大量的人力和时间。由于上述制约,这导致检索式问答系统落地困难,解决此问题的一种方法是依据问题上下文或大量非结构化文本自动生成的QA问答对。 -在此背景下,无监督检索式问答系统(即问答对自动生成智能检索式问答),基于PaddleNLP[问题生成](../../../examples/question_generation/README.md)、[UIE](../../../model_zoo/uie/README.md)、[检索式问答](../supervised_qa/faq_finance/README.md),支持以非结构化文本形式为上下文自动生成QA问答对,生成的问答对语料可以通过无监督的方式构建检索式问答系统。 +在此背景下,无监督检索式问答系统(即问答对自动生成智能检索式问答),基于PaddleNLP[问题生成](../../../examples/question_generation/README.md)、[UIE](../../../model_zoo/uie/README.md)、[检索式问答](https://github.com/PaddlePaddle/PaddleNLP/blob/release/2.8/applications/question_answering/supervised_qa/faq_finance/README.md),支持以非结构化文本形式为上下文自动生成QA问答对,生成的问答对语料可以通过无监督的方式构建检索式问答系统。 -若开发者已有FAQ语料,请参考[supervised_qa](../supervised_qa)。 +若开发者已有FAQ语料,请参考[supervised_qa](https://github.com/PaddlePaddle/PaddleNLP/blob/release/2.8/applications/question_answering/supervised_qa)。 ### 项目优势 具体来说,本项目具有以下优势: @@ -167,21 +167,21 @@ python -u run_qa_pairs_generation.py \ - `source_file_path` 源文件路径,源文件中每一行代表一条待生成问答对的上下文文本。 - `target_file_path` 目标文件路径,生成的目标文件为json格式。 - `answer_generation_model_path` 要加载的答案抽取模型的路径,可以是PaddleNLP提供的预训练模型,或者是本地模型checkpoint路径。如果使用PaddleNLP提供的预训练模型,可以选择下面其中之一。 - | 可选预训练模型 | - |---------------------------------| - | uie-base-answer-extractor-v1 | + | 可选预训练模型 | + |------------------------------| + | uie-base-answer-extractor-v1 | - `question_generation_model_path` 要加载的问题生成模型的路径,可以是PaddleNLP提供的预训练模型,或者是本地模型checkpoint路径。如果使用PaddleNLP提供的预训练模型,可以选择下面其中之一。 - | 可选预训练模型 | - |---------------------------------| - | unimo-text-1.0-question-generation | - | unimo-text-1.0-dureader_qg | + | 可选预训练模型 | + |------------------------------------------------| + | unimo-text-1.0-question-generation | + | unimo-text-1.0-dureader_qg | | unimo-text-1.0-question-generation-dureader_qg | - `filtration_model_path` 要加载的过滤模型的路径,可以是PaddleNLP提供的预训练模型,或者是本地模型checkpoint路径。如果使用PaddleNLP提供的预训练模型,可以选择下面其中之一。 | 可选预训练模型 | - |---------------------------------| - | uie-base-qa-filter-v1 | + |-----------------------| + | uie-base-qa-filter-v1 | - `batch_size` 使用taskflow时的批处理大小,请结合机器情况进行调整,默认为8。 - `a_max_answer_candidates` 答案抽取阶段,每个输入的最大返回答案候选数,默认为5。 @@ -219,7 +219,7 @@ python -u run_corpus_preparation.py \ 关于如何对语义检索模型进行无监督训练,以及针对给定问答语料库进行模型部署,请参考faq_system --> ### 基于Pipelines构建问答系统 -本项目提供了基于Pipelines的低成本构建问答对自动生成智能检索问答系统的能力。开发者只需要提供非结构化的纯文本,就可以使用本项目预制的问答对生成模块生成大量的问答对,并基于此快速搭建一个针对自己业务的检索问答系统,并可以提供Web可视化产品服务。Web可视化产品服务支持问答检索、在线问答对生成,在线文件上传和解析,在线索引库更新等功能,用户也可根据需要自行调整。具体的构建流程请参考[Pipelines-无监督智能检索问答系统](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/pipelines/examples/unsupervised-question-answering)。 +本项目提供了基于Pipelines的低成本构建问答对自动生成智能检索问答系统的能力。开发者只需要提供非结构化的纯文本,就可以使用本项目预制的问答对生成模块生成大量的问答对,并基于此快速搭建一个针对自己业务的检索问答系统,并可以提供Web可视化产品服务。Web可视化产品服务支持问答检索、在线问答对生成,在线文件上传和解析,在线索引库更新等功能,用户也可根据需要自行调整。具体的构建流程请参考[Pipelines-无监督智能检索问答系统](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/pipelines/examples/unsupervised-question-answering)。 @@ -376,11 +376,11 @@ python -u -m paddle.distributed.launch --gpus "1,2" --log_dir log/question_gener - `train_file` 本地训练数据地址,数据格式必须与`dataset_name`所指数据集格式相同,默认为None。 - `predict_file` 本地测试数据地址,数据格式必须与`dataset_name`所指数据集格式相同,默认为None。 - `model_name_or_path` 指示了finetune使用的具体预训练模型,可以是PaddleNLP提供的预训练模型,或者是本地的预训练模型。如果使用本地的预训练模型,可以配置本地模型的目录地址,例如: ./checkpoints/model_xx/,目录中需包含paddle预训练模型model_state.pdparams。如果使用PaddleNLP提供的预训练模型,可以选择下面其中之一,默认为`unimo-text-1.0`。 - | 可选预训练模型 | - |---------------------------------| - | unimo-text-1.0 | - | unimo-text-1.0-large | - | unimo-text-1.0-question-generation | + | 可选预训练模型 | + |------------------------------------| + | unimo-text-1.0 | + | unimo-text-1.0-large | + | unimo-text-1.0-question-generation | - `save_dir` 表示模型的保存路径。 - `output_path` 表示预测结果的保存路径。 @@ -463,10 +463,10 @@ python finetune/answer_extraction_and_roundtrip_filtration/evaluate.py \ - `limit`: SpanEvaluator测评指标的`limit`,当概率数组中的最后一个维度大于该值时将返回相应的文本片段。 #### 语义索引和召回模型 -我们的语义索引和召回模型是基于RocketQA的QueryEncoder训练的双塔模型,该模型用于语义索引和召回阶段,分别进行语义向量抽取和相似度召回。除使用预置模型外,如果用户想训练并接入自己的模型,模型训练可以参考[FAQ Finance](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/question_answering/supervised_qa/faq_finance)。 +我们的语义索引和召回模型是基于RocketQA的QueryEncoder训练的双塔模型,该模型用于语义索引和召回阶段,分别进行语义向量抽取和相似度召回。除使用预置模型外,如果用户想训练并接入自己的模型,模型训练可以参考[FAQ Finance](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/applications/question_answering/supervised_qa/faq_finance)。 #### 排序模型 -我们的排序模型是基于RocketQA的CrossEncoder训练的单塔模型,该模型用于搜索的排序阶段,对召回的结果进行重新排序的作用。关于排序的定制训练,可以参考[CrossEncoder](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/neural_search/ranking/cross_encoder)。 +我们的排序模型是基于RocketQA的CrossEncoder训练的单塔模型,该模型用于搜索的排序阶段,对召回的结果进行重新排序的作用。关于排序的定制训练,可以参考[CrossEncoder](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/applications/neural_search/ranking/cross_encoder)。 ## References [1] Zheng, Chujie, and Minlie Huang. "Exploring prompt-based few-shot learning for grounded dialog generation." arXiv preprint arXiv:2109.06513 (2021). diff --git a/legacy/applications/text_classification/README.md b/legacy/applications/text_classification/README.md index 361773805edd..edba001669ca 100644 --- a/legacy/applications/text_classification/README.md +++ b/legacy/applications/text_classification/README.md @@ -48,11 +48,11 @@ image
-- **多分类🚶:** 数据集的标签集含有两个或两个以上的类别,所有输入句子/文本有且只有一个标签。在文本多分类场景中,我们需要预测输入句子/文本最可能来自 `n` 个标签类别中的哪一个类别。以上图多分类中新闻文本为例,该新闻文本的标签为 `娱乐`。快速开启多分类任务参见 👉 [多分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/multi_class#readme) +- **多分类🚶:** 数据集的标签集含有两个或两个以上的类别,所有输入句子/文本有且只有一个标签。在文本多分类场景中,我们需要预测输入句子/文本最可能来自 `n` 个标签类别中的哪一个类别。以上图多分类中新闻文本为例,该新闻文本的标签为 `娱乐`。快速开启多分类任务参见 👉 [多分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/applications/text_classification/multi_class#readme) -- **多标签👫 :** 数据集的标签集含有两个或两个以上的类别,输入句子/文本具有一个或多个标签。在文本多标签任务中,我们需要预测输入句子/文本可能来自 `n` 个标签类别中的哪几个类别。以上图多标签中新闻文本为例,该新闻文本具有 `相机` 和 `芯片` 两个标签。快速开启多标签任务参见 👉 [多标签指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/multi_label#readme) 。 +- **多标签👫 :** 数据集的标签集含有两个或两个以上的类别,输入句子/文本具有一个或多个标签。在文本多标签任务中,我们需要预测输入句子/文本可能来自 `n` 个标签类别中的哪几个类别。以上图多标签中新闻文本为例,该新闻文本具有 `相机` 和 `芯片` 两个标签。快速开启多标签任务参见 👉 [多标签指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/applications/text_classification/multi_label#readme) 。 -- **层次分类👪 :** 数据集的标签集具有多级标签且标签之间具有层级结构关系,输入句子/文本具有一个或多个标签。在文本层次分类任务中,我们需要预测输入句子/文本可能来自于不同级标签类别中的某一个或几个类别。以上图层次分类中新闻文本为例(新闻为根节点),该新闻一级分类标签为 `体育`,二级分类标签为 `足球`。快速开启层次分类任务参见 👉 [层次分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/hierarchical#readme) 。 +- **层次分类👪 :** 数据集的标签集具有多级标签且标签之间具有层级结构关系,输入句子/文本具有一个或多个标签。在文本层次分类任务中,我们需要预测输入句子/文本可能来自于不同级标签类别中的某一个或几个类别。以上图层次分类中新闻文本为例(新闻为根节点),该新闻一级分类标签为 `体育`,二级分类标签为 `足球`。快速开启层次分类任务参见 👉 [层次分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/applications/text_classification/hierarchical#readme) 。 #### 2.1.2 多方案满足定制需求 @@ -72,9 +72,9 @@ 【快速开始】 -- 快速开启多分类任务参见 👉 [预训练模型微调-多分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/multi_class#readme) -- 快速开启多标签分类任务参见 👉 [预训练模型微调-多标签分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/multi_label#readme) -- 快速开启层次分类任务参见 👉 [预训练模型微调-层次分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/hierarchical#readme) +- 快速开启多分类任务参见 👉 [预训练模型微调-多分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/applications/text_classification/multi_class#readme) +- 快速开启多标签分类任务参见 👉 [预训练模型微调-多标签分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/applications/text_classification/multi_label#readme) +- 快速开启层次分类任务参见 👉 [预训练模型微调-层次分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/applications/text_classification/hierarchical#readme) #### 方案二:提示学习 @@ -99,9 +99,9 @@ 【快速开始】 更多测评和使用细节详见各场景文档: -- 快速开启多分类任务参见 👉 [提示学习(小样本)-多分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/multi_class/few-shot#readme) -- 快速开启多标签分类任务参见 👉 [提示学习(小样本)-多标签分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/multi_label/few-shot#readme) -- 快速开启层次分类任务参见 👉 [提示学习(小样本)-层次分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/hierarchical/few-shot#readme) +- 快速开启多分类任务参见 👉 [提示学习(小样本)-多分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/applications/text_classification/multi_class/few-shot#readme) +- 快速开启多标签分类任务参见 👉 [提示学习(小样本)-多标签分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/applications/text_classification/multi_label/few-shot#readme) +- 快速开启层次分类任务参见 👉 [提示学习(小样本)-层次分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/applications/text_classification/hierarchical/few-shot#readme) #### 方案三:语义索引 @@ -114,9 +114,9 @@ 【快速开始】 -- 快速开启多分类任务参见 👉 [语义索引-多分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/multi_class/retrieval_based#readme) -- 快速开启多标签分类任务参见 👉 [语义索引-多标签分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/multi_label/retrieval_based#readme) -- 快速开启层次分类任务参见 👉 [语义索引-层次分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/hierarchical/retrieval_based#readme) +- 快速开启多分类任务参见 👉 [语义索引-多分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/applications/text_classification/multi_class/retrieval_based#readme) +- 快速开启多标签分类任务参见 👉 [语义索引-多标签分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/applications/text_classification/multi_label/retrieval_based#readme) +- 快速开启层次分类任务参见 👉 [语义索引-层次分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/applications/text_classification/hierarchical/retrieval_based#readme) @@ -177,9 +177,9 @@ 更多使用方法和测评细节详见各场景模型分析模块: -- 体验模型分析模块 👉 [多分类-模型分析模块](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/multi_class/analysis) -- 体验模型分析模块 👉 [多标签-模型分析模块](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/multi_label/analysis) -- 体验模型分析模块 👉 [层次分类-模型分析模块](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/hierarchical/analysis) +- 体验模型分析模块 👉 [多分类-模型分析模块](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/applications/text_classification/multi_class/analysis) +- 体验模型分析模块 👉 [多标签-模型分析模块](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/applications/text_classification/multi_label/analysis) +- 体验模型分析模块 👉 [层次分类-模型分析模块](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/applications/text_classification/hierarchical/analysis) @@ -202,7 +202,7 @@ - 我们根据文本分类任务选择对应的场景目录: [多分类场景目录](./multi_class)、 [多标签场景目录](./multi_label)、[层次分类场景目录](./hierarchical)。 -- 如果没有已标注的数据集,我们推荐doccano数据标注工具进行标注,详见[文本分类标注指南](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/applications/text_classification/doccano.md)。如果已有标注好的本地数据集,我们需要根据不同任务要求将数据集整理为文档要求的格式,详见各分类场景文档。 +- 如果没有已标注的数据集,我们推荐doccano数据标注工具进行标注,详见[文本分类标注指南](./doccano.md)。如果已有标注好的本地数据集,我们需要根据不同任务要求将数据集整理为文档要求的格式,详见各分类场景文档。 **2.模型训练** @@ -229,11 +229,11 @@ ## 3. 快速开始 -- 快速开启多分类 👉 [多分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/multi_class#readme) +- 快速开启多分类 👉 [多分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/applications/text_classification/multi_class#readme) -- 快速开启多标签分类 👉 [多标签指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/multi_label#readme) +- 快速开启多标签分类 👉 [多标签指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/applications/text_classification/multi_label#readme) -- 快速开启层次分类 👉 [层次分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/hierarchical#readme) +- 快速开启层次分类 👉 [层次分类指南](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/applications/text_classification/hierarchical#readme) @@ -251,7 +251,7 @@ - [IFLYTEK app应用描述分类数据集](https://storage.googleapis.com/cluebenchmark/tasks/iflytek_public.zip) -- [CAIL 2022事件检测](https://cloud.tsinghua.edu.cn/d/6e911ff1286d47db8016/) +- [CAIL 2022事件检测](http://cail.cipsc.org.cn/task1.html?raceID=1&cail_tag=2022) **情感分类数据集(多分类):** diff --git a/legacy/applications/text_classification/doccano.md b/legacy/applications/text_classification/doccano.md index 16c79db92436..af9ecd7e8b23 100644 --- a/legacy/applications/text_classification/doccano.md +++ b/legacy/applications/text_classification/doccano.md @@ -175,7 +175,7 @@ python doccano.py \ --task_type "multi_class" ``` -稀疏数据识别出的有效标注请增加配置参数`--valid`,脏数据清洗的标注数据(文本中有脏数据标签)请增加配置参数`--dirty`,更多稀疏数据识别和脏数据清洗详见[多分类训练评估与模型优化指南](multi_class/analysis/README.md) +稀疏数据识别出的有效标注请增加配置参数`--valid`,脏数据清洗的标注数据(文本中有脏数据标签)请增加配置参数`--dirty`,更多稀疏数据识别和脏数据清洗详见[多分类训练评估与模型优化指南](./multi_class/analysis/README.md) ### 7.2 多标签任务 通过 [doccano.py](./doccano.py) 脚本进行数据形式转换,然后便可以按照[多标签文本分类任务指南](multi_label/README.md)中固定格式进行相应模型训练。 diff --git a/legacy/applications/text_classification/hierarchical/analysis/README.md b/legacy/applications/text_classification/hierarchical/analysis/README.md index 0f79bc349a50..68dce6680b3b 100644 --- a/legacy/applications/text_classification/hierarchical/analysis/README.md +++ b/legacy/applications/text_classification/hierarchical/analysis/README.md @@ -118,7 +118,7 @@ Text Label Prediction ### 单词级别可解释性分析 本项目开源模型的词级别可解释性分析Notebook,提供LIME、Integrated Gradient、GradShap 三种分析方法,支持分析微调后模型的预测结果,开发者可以通过更改**数据目录**和**模型目录**在自己的任务中使用Jupyter Notebook进行数据分析。 -运行 [word_interpret.ipynb](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/applications/text_classification/hierarchical/analysis/README.md) 代码,即可分析影响样本预测结果的关键词以及可视化所有词对预测结果的贡献情况,颜色越深代表这个词对预测结果影响越大: +运行 `word_interpret.ipynb`代码,即可分析影响样本预测结果的关键词以及可视化所有词对预测结果的贡献情况,颜色越深代表这个词对预测结果影响越大:
diff --git a/legacy/applications/text_classification/hierarchical/few-shot/README.md b/legacy/applications/text_classification/hierarchical/few-shot/README.md index ff44c9d173a6..c3a7c85e983c 100644 --- a/legacy/applications/text_classification/hierarchical/few-shot/README.md +++ b/legacy/applications/text_classification/hierarchical/few-shot/README.md @@ -1,6 +1,6 @@ # 小样本场景下的多标签层次分类任务指南 -**零样本/小样本文本分类推荐使用 UTC 模型,详情见[目录](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/zero_shot_text_classification),本项目将会在2.5.2版本下线。** +**零样本/小样本文本分类推荐使用 UTC 模型,详情见[目录](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/applications/zero_shot_text_classification)。** ## 目录 diff --git a/legacy/applications/text_classification/hierarchical/retrieval_based/README.md b/legacy/applications/text_classification/hierarchical/retrieval_based/README.md index 8dbbfc0a40f3..b07c6e9e0136 100644 --- a/legacy/applications/text_classification/hierarchical/retrieval_based/README.md +++ b/legacy/applications/text_classification/hierarchical/retrieval_based/README.md @@ -86,7 +86,7 @@ pip install -r requirements.txt ## 4. 数据准备 -训练需要准备指定格式的本地数据集,如果没有已标注的数据集,可以参考[文本分类任务doccano数据标注使用指南](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/applications/text_classification/doccano.md)进行文本分类数据标注。 +训练需要准备指定格式的本地数据集,如果没有已标注的数据集,可以参考[文本分类任务doccano数据标注使用指南](../../doccano.md)进行文本分类数据标注。 **指定格式本地数据集目录结构** diff --git a/legacy/applications/text_classification/multi_class/README.md b/legacy/applications/text_classification/multi_class/README.md index e91ff948a9df..86cee4b55d72 100644 --- a/legacy/applications/text_classification/multi_class/README.md +++ b/legacy/applications/text_classification/multi_class/README.md @@ -35,7 +35,7 @@ 对于大多数多分类任务,我们推荐使用预训练模型微调作为首选的文本分类方案,多分类项目中还提供通用文本分类(UTC)和语义索引的两种方案满足不同开发者需求,更多技术细节请参见[文本分类技术特色介绍](../README.md)。 -- 【零样本、小样本场景】 👉 [通用文本分类(UTC)方案](../../zero_shot_text_classification) +- 【零样本、小样本场景】 👉 [通用文本分类(UTC)方案](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/applications/zero_shot_text_classification) - 【标签类别不固定、标签类别众多】 👉 [语义索引分类方案](./retrieval_based) diff --git a/legacy/applications/text_classification/multi_class/analysis/README.md b/legacy/applications/text_classification/multi_class/analysis/README.md index cf70e0dc4264..0b47dd14c45c 100644 --- a/legacy/applications/text_classification/multi_class/analysis/README.md +++ b/legacy/applications/text_classification/multi_class/analysis/README.md @@ -57,7 +57,7 @@ pip install interpretdl==0.7.0 ### 单词级别可解释性分析 本项目开源模型的词级别可解释性分析Notebook,提供LIME、Integrated Gradient、GradShap 三种分析方法,支持分析微调后模型的预测结果,开发者可以通过更改**数据目录**和**模型目录**在自己的任务中使用Jupyter Notebook进行数据分析。 -运行 [word_interpret.ipynb](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/applications/text_classification/multi_class/analysis/README.md) 代码,即可分析影响样本预测结果的关键词以及可视化所有词对预测结果的贡献情况,颜色越深代表这个词对预测结果影响越大: +运行`word_interpret.ipynb`代码,即可分析影响样本预测结果的关键词以及可视化所有词对预测结果的贡献情况,颜色越深代表这个词对预测结果影响越大:
diff --git a/legacy/applications/text_classification/multi_class/few-shot/README.md b/legacy/applications/text_classification/multi_class/few-shot/README.md index b0ec99bdde54..476e81b36be9 100644 --- a/legacy/applications/text_classification/multi_class/few-shot/README.md +++ b/legacy/applications/text_classification/multi_class/few-shot/README.md @@ -1,6 +1,6 @@ # 小样本场景下的二/多分类任务指南 -**零样本/小样本文本分类推荐使用 UTC 模型,详情见[目录](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/zero_shot_text_classification),本项目将会在2.5.2版本下线。** +**零样本/小样本文本分类推荐使用 UTC 模型,详情见[目录](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/applications/zero_shot_text_classification),本项目将会在2.5.2版本下线。** ## 目录 diff --git a/legacy/applications/text_classification/multi_class/retrieval_based/README.md b/legacy/applications/text_classification/multi_class/retrieval_based/README.md index 10602a07b356..4cbf3a33ee1e 100644 --- a/legacy/applications/text_classification/multi_class/retrieval_based/README.md +++ b/legacy/applications/text_classification/multi_class/retrieval_based/README.md @@ -78,7 +78,7 @@ pip install -r requirements.txt ## 4. 数据准备 -训练需要准备指定格式的本地数据集,如果没有已标注的数据集,可以参考[文本分类任务doccano数据标注使用指南](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/applications/text_classification/doccano.md)进行文本分类数据标注。 +训练需要准备指定格式的本地数据集,如果没有已标注的数据集,可以参考[文本分类任务doccano数据标注使用指南](../../doccano.md)进行文本分类数据标注。 **指定格式本地数据集目录结构** diff --git a/legacy/applications/text_classification/multi_label/analysis/README.md b/legacy/applications/text_classification/multi_label/analysis/README.md index 9aeba1759089..9c454ba88de4 100644 --- a/legacy/applications/text_classification/multi_label/analysis/README.md +++ b/legacy/applications/text_classification/multi_label/analysis/README.md @@ -113,7 +113,7 @@ Text Label Prediction ### 单词级别可解释性分析 本项目开源模型的词级别可解释性分析Notebook,提供LIME、Integrated Gradient、GradShap 三种分析方法,支持分析微调后模型的预测结果,开发者可以通过更改**数据目录**和**模型目录**在自己的任务中使用Jupyter Notebook进行数据分析。 -运行 [word_interpret.ipynb](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/applications/text_classification/multi_label/analysis/README.md) 代码,即可分析影响样本预测结果的关键词以及可视化所有词对预测结果的贡献情况,颜色越深代表这个词对预测结果影响越大: +运行`word_interpret.ipynb`代码,即可分析影响样本预测结果的关键词以及可视化所有词对预测结果的贡献情况,颜色越深代表这个词对预测结果影响越大:
diff --git a/legacy/applications/text_classification/multi_label/few-shot/README.md b/legacy/applications/text_classification/multi_label/few-shot/README.md index d291ac73308a..ba70fb55c3aa 100644 --- a/legacy/applications/text_classification/multi_label/few-shot/README.md +++ b/legacy/applications/text_classification/multi_label/few-shot/README.md @@ -1,6 +1,6 @@ # 小样本场景下的多标签分类任务指南 -**零样本/小样本文本分类推荐使用 UTC 模型,详情见[目录](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/zero_shot_text_classification),本项目将会在2.5.2版本下线。** +**零样本/小样本文本分类推荐使用 UTC 模型,详情见[目录](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/applications/zero_shot_text_classification)。** ## 目录 diff --git a/legacy/applications/text_classification/multi_label/retrieval_based/README.md b/legacy/applications/text_classification/multi_label/retrieval_based/README.md index 835336e446ab..ff37beee7342 100644 --- a/legacy/applications/text_classification/multi_label/retrieval_based/README.md +++ b/legacy/applications/text_classification/multi_label/retrieval_based/README.md @@ -81,7 +81,7 @@ pip install -r requirements.txt ## 4. 数据准备 -训练需要准备指定格式的本地数据集,如果没有已标注的数据集,可以参考[文本分类任务doccano数据标注使用指南](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/applications/text_classification/doccano.md)进行文本分类数据标注。 +训练需要准备指定格式的本地数据集,如果没有已标注的数据集,可以参考[文本分类任务doccano数据标注使用指南](../../doccano.md)进行文本分类数据标注。 **指定格式本地数据集目录结构** @@ -433,7 +433,7 @@ python export_to_serving.py \ sh scripts/export_to_serving.sh ``` -Paddle Serving的部署采用Pipeline的方式,如果用户有对性能有更高的要求,可以采用C++的部署形式,请参考[Neural Search](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/neural_search/recall/in_batch_negative#c%E7%9A%84%E6%96%B9%E5%BC%8F): +Paddle Serving的部署采用Pipeline的方式,如果用户有对性能有更高的要求,可以采用C++的部署形式,请参考[Neural Search](../../../neural_search/recall/in_batch_negative/#c%E7%9A%84%E6%96%B9%E5%BC%8F): #### Pipeline方式 diff --git a/legacy/examples/README.md b/legacy/examples/README.md index 817c9400b2dd..d036956f85b0 100644 --- a/legacy/examples/README.md +++ b/legacy/examples/README.md @@ -6,38 +6,36 @@ PaddleNLP provides rich application examples covering mainstream NLP task to hel ## NLP 基础技术 (NLP Basic Technique) -| 目录 Folder | 任务 Task | -| :--------------- | ------- | -| word_embedding | [词向量 (Word Embedding)](./word_embedding/) | -| lexical_analysis | [词法分析 (Lexical Analysis)](./lexical_analysis/) | -| dependency_parsing | [句法依存分析 (Dependency Parsing)](./dependency_parsing/) | -| language_model | [预训练语言模型 (Pretrained Language Model)](./language_model/) | -| text_to_sql | [语义解析 (Semantic Parsing/Text to SQL)](./text_to_sql):star: | -| text_classification | [文本分类 (Text Classification)](./text_classification/) | -| text_matching | [文本匹配 (Text Matching)](./text_matching/) | -| text_generation | [文本生成 (Text Generation)](./text_generation/) | -| text_summarization | [文本摘要 (Text Summarization)](./text_summarization/) | -| text_correction |[文本纠错 (Text Correction)](./text_correction/):star: | -| semantic_indexing | [语义索引 (Semantic Indexing)](./semantic_indexing/)| -| information_extraction | [信息抽取 (Information Extraction)](./information_extraction/) | -| question_generation | [问题生成 (Question Generation)](./question_generation/) | +| 目录 Folder | 任务 Task | +|:-----------------------|--------------------------------------------------------------------------------------------------------------------------------------| +| word_embedding | [词向量 (Word Embedding)](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/examples/word_embedding) | +| lexical_analysis | [词法分析 (Lexical Analysis)](./lexical_analysis/) | +| dependency_parsing | [句法依存分析 (Dependency Parsing)](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/examples/dependency_parsing/ddparser) | +| text_to_sql | [语义解析 (Semantic Parsing/Text to SQL)](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/examples/text_to_sql):star: | +| text_classification | [文本分类 (Text Classification)](./text_classification/) | +| text_matching | [文本匹配 (Text Matching)](./text_matching/) | +| text_generation | [文本生成 (Text Generation)](./text_generation/) | +| text_summarization | [文本摘要 (Text Summarization)](./text_summarization/) | +| text_correction | [文本纠错 (Text Correction)](./text_correction/):star: | +| semantic_indexing | [语义索引 (Semantic Indexing)](./semantic_indexing/) | +| information_extraction | [信息抽取 (Information Extraction)](./information_extraction/) | +| question_generation | [问题生成 (Question Generation)](./question_generation/) | ## NLP 系统应用 (NLP System Applications) -| 目录 Folder | 任务 Task | -| :--------------- | ------- | -| sentiment_analysis|[情感分析 (Sentiment Analysis)](./sentiment_analysis/):star2: | -| dialogue |[通用对话 (General Dialogue System)](./dialogue/) | -| machine_translation |[文本翻译 (Machine Translation)](./machine_translation/) | -| simultaneous_translation|[同声翻译 (Simultaneous Translation)](./simultaneous_translation/) | +| 目录 Folder | 任务 Task | +|:------------------------------|------------------------------------------------------------------------------| +| sentiment_analysis | [情感分析 (Sentiment Analysis)](./sentiment_analysis/):star2: | +| dialogue | [通用对话 (General Dialogue System)](./dialogue/) | +| machine_translation | [文本翻译 (Machine Translation)](./machine_translation/) | +| simultaneous_translation | [同声翻译 (Simultaneous Translation)](./simultaneous_translation/) | | machine_reading_comprehension | [阅读理解 (Machine Reading Comprehension)](./machine_reading_comprehension/) | ## NLP 拓展应用 (NLP Extented Applications) -| 目录 Folder | 任务 Task | -| :--------------- | ------- | -| few_shot |[小样本学习 (Few-shot Learning)](./few_shot/):star2: | -| text_to_knowledge |[解语知识关联框架 (Text Knowledge Mining)](./text_to_knowledge/):star2: | -| model_compression |[模型压缩 (Model Compression)](./model_compression/) | -| text_graph |[文本图学习 (Text Graph Learning)](./text_graph/erniesage/) | -| time_series |[时间序列预测 (Time Series Prediction)](./time_series/) | +| 目录 Folder | 任务 Task | +|:------------------|-------------------------------------------------------------------------| +| few_shot | [小样本学习 (Few-shot Learning)](./few_shot/):star2: | +| text_to_knowledge | [解语知识关联框架 (Text Knowledge Mining)](./text_to_knowledge/):star2: | +| model_compression | [模型压缩 (Model Compression)](./model_compression/) | +| text_graph | [文本图学习 (Text Graph Learning)](./text_graph/erniesage/) | diff --git a/legacy/examples/code_generation/codegen/README.md b/legacy/examples/code_generation/codegen/README.md index 6ef14f5bcbc8..82a4891559d1 100644 --- a/legacy/examples/code_generation/codegen/README.md +++ b/legacy/examples/code_generation/codegen/README.md @@ -32,7 +32,6 @@ 本项目是基于预训练语言模型CodeGen的代码生成,具有以下优势: - **效果领先**。CodeGen(16B)在HumanEval benchmark上评估指标已经超过[OpenAI's Codex](https://arxiv.org/pdf/2107.03374.pdf)。 - **免费的Github Copilot**。支持通过Github Copilot调用该模型,让你免费体验代码AI助理。 -- **高性能**。基于[FastGeneration](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/fast_generation)打造高性能推理,毫秒级响应。具体加速指标可参考[perf](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/fast_generation/README.md)。 - **支持自定义数据集训练**。可增加自己的代码数据加以微调,让其更智能。 - **开箱即用**。本项目提供TaskFlow接口,无需训练,仅需几行代码便可预测。 diff --git a/legacy/examples/lexical_analysis/README.md b/legacy/examples/lexical_analysis/README.md index 421a04d6aa0a..7e06b3c7fd23 100644 --- a/legacy/examples/lexical_analysis/README.md +++ b/legacy/examples/lexical_analysis/README.md @@ -174,7 +174,7 @@ from paddlenlp import Taskflow my_lac = Taskflow("lexical_analysis", model_path="./custom_task_path/") ``` -更多使用方法请参考[Taskflow文档](../../docs/model_zoo/taskflow.md)。 +更多使用方法请参考[Taskflow文档](../../../docs/model_zoo/taskflow.md)。 ## 预训练模型 diff --git a/legacy/examples/machine_translation/transformer/README.md b/legacy/examples/machine_translation/transformer/README.md index e653a539a99d..0523cdf7dbbc 100644 --- a/legacy/examples/machine_translation/transformer/README.md +++ b/legacy/examples/machine_translation/transformer/README.md @@ -154,8 +154,6 @@ python predict.py --config ./configs/transformer.base.yaml 需要注意的是,目前预测仅实现了单卡的预测,原因在于,翻译后面需要的模型评估依赖于预测结果写入文件顺序,多卡情况下,目前暂未支持将结果按照指定顺序写入文件。 -另外 `predict.py` 中使用的 `TransformerGenerator` 接口对于GPU预测将在适配的条件下自动切换到 `FastGeneration` 预测加速版本(期间会进行jit编译), `FastGeneration` 的更多内容可以参考 `fast_transformer/README.md`。 - #### 基于自定义数据集进行预测 本示例同样支持自定义数据集进行预测。可以参照以下文档。 @@ -406,10 +404,6 @@ python predict.py \ 翻译结果会输出到 config 文件中 `output_file` 条目指定的文件中。执行预测时需要设置 `init_from_params` 来给出模型所在目录,更多参数的使用可以在 `configs/transformer.big.yaml` 和 `configs/transformer.base.yaml` 文件中查阅注释说明并进行更改设置。 -## 使用 FastGeneration 实现预测 - -具体的说明可以参考 `fast_transformer/README.md`。`cd fast_transformer/` 即可查看。 - ## 模型评估 预测结果中每行输出是对应行输入的得分最高的翻译,对于使用 BPE 的数据,预测出的翻译结果也将是 BPE 表示的数据,要还原成原始的数据(这里指 tokenize 后的数据)才能进行正确的评估。评估过程具体如下(BLEU 是翻译任务常用的自动评估方法指标): diff --git a/legacy/examples/machine_translation/transformer/fast_transformer/README.md b/legacy/examples/machine_translation/transformer/fast_transformer/README.md deleted file mode 100644 index cb760655e003..000000000000 --- a/legacy/examples/machine_translation/transformer/fast_transformer/README.md +++ /dev/null @@ -1,220 +0,0 @@ -# FastGeneration 预测 - -在这里我们集成了 NVIDIA [FasterTransformer](https://github.com/NVIDIA/FasterTransformer/tree/v3.1) 用于预测加速。同时集成了 FasterTransformer float32 以及 float16 预测,打造了 FastGeneration 的能力。以下是使用 FastGeneration 的说明。 - -## 使用环境说明 - -* 本项目依赖于 PaddlePaddle 2.1.0 及以上版本或适当的 develop 版本 -* CMake >= 3.10 -* CUDA 10.1 或 10.2(需要 PaddlePaddle 框架一致) -* gcc 版本需要与编译 PaddlePaddle 版本一致,比如使用 gcc8.2 -* 推荐使用 Python3 -* [FasterTransformer](https://github.com/NVIDIA/FasterTransformer/tree/v3.1#setup) 使用必要的环境 -* 环境依赖 - - attrdict - - pyyaml - ```shell - pip install attrdict pyyaml - ``` - -## 快速开始 - -我们实现了基于 FastGeneration 的自定义 op 的接入,用于加速当前机器翻译 example 在 GPU 上的预测性能。 - -## 使用 FastGeneration 完成预测 - -编写 python 脚本的时候,调用 [`FasterTransformer` API](https://paddlenlp.readthedocs.io/zh/latest/source/paddlenlp.ops.fast_transformer.transformer.fast_transformer.html#paddlenlp.ops.fast_transformer.transformer.fast_transformer.FasterTransformer) 即可实现 Transformer 模型的高性能预测。 - -举例如下: - -``` python -from paddlenlp.ops import FasterTransformer - -transformer = FasterTransformer( - src_vocab_size=args.src_vocab_size, - trg_vocab_size=args.trg_vocab_size, - max_length=args.max_length + 1, - num_encoder_layers=args.n_layer, - num_decoder_layers=args.n_layer, - n_head=args.n_head, - d_model=args.d_model, - d_inner_hid=args.d_inner_hid, - dropout=args.dropout, - weight_sharing=args.weight_sharing, - bos_id=args.bos_idx, - eos_id=args.eos_idx, - decoding_strategy=args.decoding_strategy, - beam_size=args.beam_size, - topk=args.topk, - topp=args.topp, - max_out_len=args.max_out_len, - use_fp16_decoding=args.use_fp16_decoding) -``` - -若当前环境下没有需要的自定义 op 的动态库,将会使用 JIT 自动编译需要的动态库。如果需要自行编译自定义 op 所需的动态库,可以参考 [文本生成高性能加速](../../../../paddlenlp/ops/README.md)。编译好后,使用 `FasterTransformer(decoding_lib="/path/to/lib", ...)` 可以完成导入。 - -更详细的例子可以参考 `encoder_decoding_predict.py`,我们提供了更详细用例。 - - -#### 数据准备 - -本示例可以使用 PaddleNLP 内置的处理好的 WMT14 EN-DE 翻译的数据进行训练、预测,也可以使用自定义数据集。数据准备部分可以参考前页文档 [使用自定义翻译数据集](../README.md)。 - -#### 模型推断 - -使用模型推断前提是需要指定一个合适的 checkpoint,需要在对应的 `../configs/transformer.base.yaml` 中修改对应的模型载入的路径参数 `init_from_params`。 - -我们提供一个已经训练好的动态图的 base model 的 checkpoint 以供使用,可以通过[transformer-base-wmt_ende_bpe](https://bj.bcebos.com/paddlenlp/models/transformers/transformer/transformer-base-wmt_ende_bpe.tar.gz)下载。 - -``` sh -wget https://bj.bcebos.com/paddlenlp/models/transformers/transformer/transformer-base-wmt_ende_bpe.tar.gz -tar -zxf transformer-base-wmt_ende_bpe.tar.gz -``` - -然后,需要修改对应的 `../configs/transformer.base.yaml` 配置文件中的 `init_from_params` 的值为 `./base_trained_models/step_final/`。 - -#### 使用动态图预测(使用 float32 decoding 预测) - -以英德翻译数据为例,模型训练完成后可以执行以下命令对指定文件中的文本进行翻译: - -``` sh -# setting visible devices for prediction -export CUDA_VISIBLE_DEVICES=0 -# 执行 decoding_gemm 目的是基于当前环境、配置,提前确定一个性能最佳的矩阵乘算法,不是必要的步骤 -cp -rf ../../../../paddlenlp/ops/build/third-party/build/fastertransformer/bin/decoding_gemm ./ -./decoding_gemm 8 4 8 64 38512 32 512 0 -python encoder_decoding_predict.py \ - --config ../configs/transformer.base.yaml \ - --decoding_lib ../../../../paddlenlp/ops/build/lib/libdecoding_op.so \ - --decoding_strategy beam_search \ - --beam_size 5 -``` - -其中: -* `--config`: 选项用于指明配置文件的位置 -* `--decoding_lib`: 选项用于指明编译好的 FastGeneration decoding lib 的位置 -* `--decoding_strategy`: 选项用于指定解码使用的策略,可以选择是 `beam_search`,`topk_sampling`,`topp_sampling`。 - * 当使用 `beam_search` 的时候,需要指定 `--beam_size` 的值 - * 当使用 `topk_sampling` 的时候,需要指定 `--topk` 的值 - * 当使用 `topp_sampling` 的时候,需要指定 `topp` 的值,并且需要保证 `--topk` 的值为 0 -* `--beam_size`: 解码策略是 `beam_search` 的时候,beam size 的大小,数据类型是 `int` -* `--diversity_rate`: 解码策略是 `beam_search` 的时候,设置 diversity rate 的大小,数据类型是 `float`。当设置的 `diversity_rate` 大于 0 的时候,FasterTransformer 仅支持 beam size 为 1,4,16,64 -* `--topk`: 解码策略是 `topk_sampling` 的时候,topk 计算的 k 值的大小,数据类型是 `int` -* `--topp`: 解码策略是 `topp_sampling` 的时候,p 的大小,数据类型是 `float` - -翻译结果会输出到 `output_file` 指定的文件。执行预测时需要设置 `init_from_params` 来给出模型所在目录,更多参数的使用可以在 `./sample/config/transformer.base.yaml` 文件中查阅注释说明并进行更改设置。如果执行不提供 `--config` 选项,程序将默认使用 base model 的配置。 - -#### 使用动态图预测(使用 float16 decoding 预测) - -float16 与 float32 预测的基本流程相同,不过在使用 float16 的 decoding 进行预测的时候,需要再加上 `--use_fp16_decoding` 选项,表示使用 fp16 进行预测。后按照与之前相同的方式执行即可。具体执行方式如下: - -``` sh -# setting visible devices for prediction -export CUDA_VISIBLE_DEVICES=0 -# 执行 decoding_gemm 目的是基于当前环境、配置,提前确定一个性能最佳的矩阵乘算法,不是必要的步骤 -cp -rf ../../../../paddlenlp/ops/build/third-party/build/fastertransformer/bin/decoding_gemm ./ -./decoding_gemm 8 4 8 64 38512 32 512 1 -python encoder_decoding_predict.py \ - --config ../configs/transformer.base.yaml \ - --decoding_lib ../../../../paddlenlp/ops/build/lib/libdecoding_op.so \ - --use_fp16_decoding \ - --decoding_strategy beam_search \ - --beam_size 5 -``` - -其中,`--config` 选项用于指明配置文件的位置,而 `--decoding_lib` 选项用于指明编译好的 FastGeneration decoding lib 的位置。 - -翻译结果会输出到 `output_file` 指定的文件。执行预测时需要设置 `init_from_params` 来给出模型所在目录,更多参数的使用可以在 `./sample/config/transformer.base.yaml` 文件中查阅注释说明并进行更改设置。如果执行不提供 `--config` 选项,程序将默认使用 base model 的配置。 - -需要注意的是,目前预测仅实现了单卡的预测,原因在于,翻译后面需要的模型评估依赖于预测结果写入文件顺序,多卡情况下,目前暂未支持将结果按照指定顺序写入文件。 - -#### 使用自定义数据集进行预测 - -如果需要使用准备好的自定义数据集进行高性能推理,同样可以通过在执行 `encoder_decoding_predict.py` 脚本时指明以下参数,从而引入自定义数据集。 - -* `--data_dir`: 指明训练需要的数据集的路径。无需提供不同的 train、dev 和 test 文件具体的文件名,会自动根据 `--src_lang` 和 `--trg_lang` 指定的语言进行构造。train、dev 和 test 默认的文件名分别为 [train|dev|test].{src_lang}-{trg_lang}.[{src_lang}|{trg_lang}]。且 `--data_dir` 设置的优先级会高于后面提到的 `--train_file`,`--dev_file` 和 `--test_file` 的优先级。 - * `--src_lang`(`-s`): 指代翻译模型的源语言。比如 `de` 表示德语,`en` 表示英语,`fr` 表示法语等等。和数据集本身相关。 - * `--trg_lang`(`-t`): 指代翻译模型的目标语言。比如 `de` 表示德语,`en` 表示英语,`fr` 表示法语等等。和数据集本身相关。 -* `--test_file`: 指明训练所需要的 `test` 验证集的数据集的路径。若没有提供 `--data_dir` 或是需要特别指明训练数据的名称的时候指定。指定的方式为,传入源语言的文件。比如,`--test_file ${DATA_DEST_DIR}/test.de-en.de`。 -* `--vocab_file`: 指明训练所需的词表文件的路径和名称。若指定 `--vocab_file` 则默认是源语言和目标语言使用同一个词表。且 `--vocab_file` 设置的优先级会高于后面提到的 `--src_vocab` 和 `--trg_vocab` 优先级。 -* `--src_vocab`: 指明训练所需的源语言的词表文件的路径和名称。可以与 `--trg_vocab` 相同,若相同,则视为源语言和目标语言共用同一个词表。 -* `--trg_vocab`: 指明训练所需的目标语言的词表文件的路径和名称。可以与 `--src_vocab` 相同,若相同,则视为源语言和目标语言共用同一个词表。 -* `--unk_token`: 若提供了自定义的词表,则需要额外指明词表中未登录词 `[UNK]` 具体的 token。比如,`--unk_token ""`。默认为 ``,与数据预处理脚本设定默认值相同。 -* `--bos_token`: 若提供了自定义的词表,则需要额外指明词表中起始词 `[BOS]` 具体的 token。比如,`--bos_token ""`。默认为 ``,与数据预处理脚本设定默认值相同。 -* `--eos_token`: 若提供了自定义的词表,则需要额外指明词表中结束词 `[EOS]` 具体的 token。比如,`--eos_token ""`。默认为 ``,与数据预处理脚本设定默认值相同。 -* `--pad_token`: 若提供了自定义的词表,原则上,需要额外指定词表中用于表示 `[PAD]` 具体的 token。比如,`--pad_token ""`。默认为 None,若使用 None,则使用 `--bos_token` 作为 `pad_token` 使用。 - -比如: - -``` bash -# setting visible devices for prediction -export CUDA_VISIBLE_DEVICES=0 -DATA_DEST_DIR=${PATH_TO_PADDLENLP}/PaddleNLP/examples/machine_translation/data/iwslt14.tokenized.de-en/ - -# 执行 decoding_gemm 目的是基于当前环境、配置,提前确定一个性能最佳的矩阵乘算法,不是必要的步骤 -cp -rf ../../../../paddlenlp/ops/build/third-party/build/fastertransformer/bin/decoding_gemm ./ -./decoding_gemm 8 4 8 64 38512 32 512 1 - -python encoder_decoding_predict.py \ - --config ../configs/transformer.base.yaml \ - --decoding_lib ../../../../paddlenlp/ops/build/lib/libdecoding_op.so \ - --use_fp16_decoding \ - --decoding_strategy beam_search \ - --beam_size 5 \ - --test_file ${DATA_DEST_DIR}/test.de-en.de \ - --src_vocab ${DATA_DEST_DIR}/dev.de-en.de \ - --trg_vocab ${DATA_DEST_DIR}/dev.de-en.en \ - --bos_token "" \ - --eos_token "" \ - --unk_token "" -``` - -#### 导出基于 FastGeneration 的预测库使用模型文件 - -我们提供一个已经基于动态图训练好的 base model 的 checkpoint 以供使用,当前 checkpoint 是基于 WMT 英德翻译的任务训练。可以通过[transformer-base-wmt_ende_bpe](https://bj.bcebos.com/paddlenlp/models/transformers/transformer/transformer-base-wmt_ende_bpe.tar.gz)下载。 - -使用 C++ 预测库,首先,我们需要做的是将动态图的 checkpoint 导出成预测库能使用的模型文件和参数文件。可以执行 `export_model.py` 实现这个过程。 - -``` sh -python export_model.py \ - --config ../configs/transformer.base.yaml \ - --decoding_strategy beam_search \ - --beam_size 5 -``` - -若当前环境下没有需要的自定义 op 的动态库,将会使用 JIT 自动编译需要的动态库。如果需要自行编译自定义 op 所需的动态库,可以参考 [文本生成高性能加速](../../../../paddlenlp/ops/README.md)。编译好后,可以在执行 `export_model.py` 时使用 `--decoding_lib ../../../../paddlenlp/ops/build/lib/libdecoding_op.so` 可以完成导入。 - -注意:如果是自行编译的话,这里的 `libdecoding_op.so` 的动态库是参照文档 [文本生成高性能加速](../../../../paddlenlp/ops/README.md) 中 **`Python 动态图使用自定义 op`** 编译出来的 lib,与相同文档中 **`C++ 预测库使用自定义 op`** 编译产出不同。因此,在使用预测库前,还需要额外导出模型: - * 一次用于获取 Python 动态图下的 lib,用到 Python 端进行模型导出。 - * 一次获取编译的基于预测库的可执行文件 - -执行 `export_model.py` 之后,可以在当前路径的 `infer_model/` 下面看到导出的模型文件: - ```text - └── infer_model/ - ├── transformer.pdiparams - └── transformer.pdmodel - ``` - -#### C++ 预测库使用高性能加速 - -C++ 预测库使用 FastGeneration 的高性能加速需要自行编译,可以参考 [文本生成高性能加速](../../../../paddlenlp/ops/README.md) 文档完成基于 C++ 预测库的编译,同时也可以参考相同文档执行对应的 C++ 预测库的 demo 完成预测。 - -具体的使用 demo 可以参考 [Transformer 预测库 C++ demo](../../../../paddlenlp/ops/fast_transformer/src/demo/transformer_e2e.cc)。 - -## 模型评估 - -评估方式与动态图评估方式相同,预测结果中每行输出是对应行输入的得分最高的翻译,对于使用 BPE 的数据,预测出的翻译结果也将是 BPE 表示的数据,要还原成原始的数据(这里指 tokenize 后的数据)才能进行正确的评估。评估过程具体如下(BLEU 是翻译任务常用的自动评估方法指标): - -``` sh -# 还原 predict.txt 中的预测结果为 tokenize 后的数据 -sed -r 's/(@@ )|(@@ ?$)//g' predict.txt > predict.tok.txt -# 若无 BLEU 评估工具,需先进行下载 -git clone https://github.com/moses-smt/mosesdecoder.git -# 以英德翻译 newstest2014 测试数据为例 -perl mosesdecoder/scripts/generic/multi-bleu.perl ~/.paddlenlp/datasets/WMT14ende/WMT14.en-de/wmt14_ende_data/newstest2014.tok.de < predict.tok.txt -``` - -执行上述操作之后,可以看到类似如下的结果,此处结果是 beam_size 为 5 时 base model 在 newstest2014 上的 BLEU 结果: -``` -BLEU = 26.89, 58.4/32.6/20.5/13.4 (BP=1.000, ratio=1.010, hyp_len=65166, ref_len=64506) -``` diff --git a/legacy/examples/machine_translation/transformer/fast_transformer/encoder_decoding_predict.py b/legacy/examples/machine_translation/transformer/fast_transformer/encoder_decoding_predict.py deleted file mode 100644 index f27ea58ac929..000000000000 --- a/legacy/examples/machine_translation/transformer/fast_transformer/encoder_decoding_predict.py +++ /dev/null @@ -1,292 +0,0 @@ -# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import argparse -import os -import sys -from pprint import pprint - -import numpy as np -import paddle -import yaml -from easydict import EasyDict as AttrDict - -from paddlenlp.ops import FasterTransformer -from paddlenlp.utils.log import logger - -sys.path.append("../") -import reader # noqa: E402 - - -def parse_args(): - parser = argparse.ArgumentParser() - parser.add_argument( - "--config", default="../configs/transformer.base.yaml", type=str, help="Path of the config file. " - ) - parser.add_argument( - "--decoding_lib", - default="../../../../paddlenlp/ops/build/lib/libdecoding_op.so", - type=str, - help="Path of libdecoding_op.so. ", - ) - parser.add_argument("--use_fp16_decoding", action="store_true", help="Whether to use fp16 decoding to predict. ") - parser.add_argument( - "--enable_fast_encoder", - action="store_true", - help="Whether to use fast version encoder to predict. This is experimental option for now. ", - ) - parser.add_argument("--use_fp16_encoder", action="store_true", help="Whether to use fp16 encoder to predict. ") - parser.add_argument( - "--decoding_strategy", - default="beam_search", - type=str, - choices=["beam_search", "beam_search_v2", "topk_sampling", "topp_sampling"], - help="Decoding strategy. Can be one of ['beam_search', 'topk_sampling', 'topp_sampling']. ", - ) - parser.add_argument("--beam_size", default=4, type=int, help="Beam size. ") - parser.add_argument("--diversity_rate", default=0.0, type=float, help="The diversity rate for beam search. ") - parser.add_argument("--topk", default=4, type=int, help="The k value for topk_sampling. Default is 4. ") - parser.add_argument( - "--topp", - default=0.0, - type=float, - help="The probability threshold for topp_sampling. Default is 0.0 which means it won't go through topp_sampling. ", - ) - parser.add_argument("--batch_size", default=None, type=int, help="Batch size. ") - parser.add_argument( - "--profile", action="store_true", help="Whether to profile the performance using newstest2014 dataset. " - ) - parser.add_argument( - "--data_dir", - default=None, - type=str, - help="The dir of train, dev and test datasets. If data_dir is given, train_file and dev_file and test_file will be replaced by data_dir/[train|dev|test].\{src_lang\}-\{trg_lang\}.[\{src_lang\}|\{trg_lang\}]. ", - ) - parser.add_argument( - "--test_file", - nargs="+", - default=None, - type=str, - help="The files for test. Can be set by using --test_file source_language_file. If it's None, the default WMT14 en-de dataset will be used. ", - ) - parser.add_argument( - "--benchmark", - action="store_true", - help="Whether to print logs on each cards and use benchmark vocab. Normally, not necessary to set --benchmark. ", - ) - parser.add_argument( - "--vocab_file", - default=None, - type=str, - help="The vocab file. Normally, it shouldn't be set and in this case, the default WMT14 dataset will be used.", - ) - parser.add_argument( - "--src_vocab", - default=None, - type=str, - help="The vocab file for source language. If --vocab_file is given, the --vocab_file will be used. ", - ) - parser.add_argument( - "--trg_vocab", - default=None, - type=str, - help="The vocab file for target language. If --vocab_file is given, the --vocab_file will be used. ", - ) - parser.add_argument("-s", "--src_lang", default=None, type=str, help="Source language. ") - parser.add_argument("-t", "--trg_lang", default=None, type=str, help="Target language. ") - parser.add_argument( - "--unk_token", - default=None, - type=str, - help="The unknown token. It should be provided when use custom vocab_file. ", - ) - parser.add_argument( - "--bos_token", default=None, type=str, help="The bos token. It should be provided when use custom vocab_file. " - ) - parser.add_argument( - "--eos_token", default=None, type=str, help="The eos token. It should be provided when use custom vocab_file. " - ) - parser.add_argument( - "--pad_token", - default=None, - type=str, - help="The pad token. It should be provided when use custom vocab_file. And if it's None, bos_token will be used. ", - ) - args = parser.parse_args() - return args - - -def post_process_seq(seq, bos_idx, eos_idx, output_bos=False, output_eos=False): - """ - Post-process the decoded sequence. - """ - eos_pos = len(seq) - 1 - for i, idx in enumerate(seq): - if idx == eos_idx: - eos_pos = i - break - seq = [idx for idx in seq[: eos_pos + 1] if (output_bos or idx != bos_idx) and (output_eos or idx != eos_idx)] - return seq - - -def do_predict(args): - place = "gpu" - place = paddle.set_device(place) - - # Define data loader - # NOTE: Data yielded by DataLoader may be on CUDAPinnedPlace, - # but custom op doesn't support CUDAPinnedPlace. Hence, - # disable using CUDAPinnedPlace in DataLoader. - paddle.io.reader.use_pinned_memory(False) - test_loader, to_tokens = reader.create_infer_loader(args) - - # Define model - transformer = FasterTransformer( - src_vocab_size=args.src_vocab_size, - trg_vocab_size=args.trg_vocab_size, - max_length=args.max_length + 1, - num_encoder_layers=args.n_layer, - num_decoder_layers=args.n_layer, - n_head=args.n_head, - d_model=args.d_model, - d_inner_hid=args.d_inner_hid, - dropout=args.dropout, - weight_sharing=args.weight_sharing, - bos_id=args.bos_idx, - eos_id=args.eos_idx, - pad_id=args.pad_idx, - decoding_strategy=args.decoding_strategy, - beam_size=args.beam_size, - max_out_len=args.max_out_len, - diversity_rate=args.diversity_rate, - decoding_lib=args.decoding_lib, - use_fp16_decoding=args.use_fp16_decoding, - enable_fast_encoder=args.enable_fast_encoder, - use_fp16_encoder=args.use_fp16_encoder, - ) - - # Set evaluate mode - transformer.eval() - - # Load checkpoint. - transformer.load(init_from_params=os.path.join(args.init_from_params, "transformer.pdparams")) - - # Providing model_dict still works. - # state_dict = paddle.load(os.path.join(args.init_from_params, - # "transformer.pdparams")) - # transformer.load(state_dict=state_dict) - - f = open(args.output_file, "w") - with paddle.no_grad(): - if args.profile: - import time - - start = time.time() - for (src_word,) in test_loader: - finished_seq = transformer(src_word=src_word) - if not args.profile: - if args.decoding_strategy == "beam_search" or args.decoding_strategy == "beam_search_v2": - finished_seq = finished_seq.numpy().transpose([1, 2, 0]) - elif args.decoding_strategy == "topk_sampling" or args.decoding_strategy == "topp_sampling": - finished_seq = np.expand_dims(finished_seq.numpy().transpose([1, 0]), axis=1) - for ins in finished_seq: - for beam_idx, beam in enumerate(ins): - if beam_idx >= args.n_best: - break - id_list = post_process_seq(beam, args.bos_idx, args.eos_idx) - word_list = to_tokens(id_list) - sequence = " ".join(word_list) + "\n" - f.write(sequence) - if args.profile: - if args.decoding_strategy == "beam_search" or args.decoding_strategy == "beam_search_v2": - logger.info( - "Setting info: batch size: {}, beam size: {}, use fp16: {}. ".format( - args.infer_batch_size, args.beam_size, args.use_fp16_decoding - ) - ) - elif args.decoding_strategy == "topk_sampling": - logger.info( - "Setting info: batch size: {}, topk: {}, use fp16: {}. ".format( - args.infer_batch_size, args.topk, args.use_fp16_decoding - ) - ) - elif args.decoding_strategy == "topp_sampling": - logger.info( - "Setting info: batch size: {}, topp: {}, use fp16: {}. ".format( - args.infer_batch_size, args.topp, args.use_fp16_decoding - ) - ) - paddle.device.cuda.synchronize(place) - logger.info( - "Average time latency is {} ms/batch. ".format((time.time() - start) / len(test_loader) * 1000) - ) - - -if __name__ == "__main__": - ARGS = parse_args() - yaml_file = ARGS.config - with open(yaml_file, "rt") as f: - args = AttrDict(yaml.safe_load(f)) - args.decoding_lib = ARGS.decoding_lib - args.use_fp16_decoding = ARGS.use_fp16_decoding - args.enable_fast_encoder = ARGS.enable_fast_encoder - args.use_fp16_encoder = ARGS.use_fp16_encoder - args.decoding_strategy = ARGS.decoding_strategy - args.beam_size = ARGS.beam_size - args.diversity_rate = ARGS.diversity_rate - args.topk = ARGS.topk - args.topp = ARGS.topp - args.profile = ARGS.profile - args.benchmark = ARGS.benchmark - if ARGS.batch_size: - args.infer_batch_size = ARGS.batch_size - args.data_dir = ARGS.data_dir - args.test_file = ARGS.test_file - - if ARGS.vocab_file is not None: - args.src_vocab = ARGS.vocab_file - args.trg_vocab = ARGS.vocab_file - args.joined_dictionary = True - elif ARGS.src_vocab is not None and ARGS.trg_vocab is None: - args.vocab_file = args.trg_vocab = args.src_vocab = ARGS.src_vocab - args.joined_dictionary = True - elif ARGS.src_vocab is None and ARGS.trg_vocab is not None: - args.vocab_file = args.trg_vocab = args.src_vocab = ARGS.trg_vocab - args.joined_dictionary = True - else: - args.src_vocab = ARGS.src_vocab - args.trg_vocab = ARGS.trg_vocab - args.joined_dictionary = not ( - args.src_vocab is not None and args.trg_vocab is not None and args.src_vocab != args.trg_vocab - ) - if args.weight_sharing != args.joined_dictionary: - if args.weight_sharing: - raise ValueError("The src_vocab and trg_vocab must be consistency when weight_sharing is True. ") - else: - raise ValueError( - "The src_vocab and trg_vocab must be specified respectively when weight sharing is False. " - ) - - if ARGS.src_lang is not None: - args.src_lang = ARGS.src_lang - if ARGS.trg_lang is not None: - args.trg_lang = ARGS.trg_lang - - args.unk_token = ARGS.unk_token - args.bos_token = ARGS.bos_token - args.eos_token = ARGS.eos_token - args.pad_token = ARGS.pad_token - pprint(args) - - do_predict(args) diff --git a/legacy/examples/machine_translation/transformer/fast_transformer/export_model.py b/legacy/examples/machine_translation/transformer/fast_transformer/export_model.py deleted file mode 100644 index 0f444985c36f..000000000000 --- a/legacy/examples/machine_translation/transformer/fast_transformer/export_model.py +++ /dev/null @@ -1,203 +0,0 @@ -# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import argparse -import os -import sys -from pprint import pprint - -import paddle -import yaml -from easydict import EasyDict as AttrDict - -from paddlenlp.ops import FasterTransformer -from paddlenlp.utils.log import logger - -sys.path.append("../") -import reader # noqa: E402 - - -def parse_args(): - parser = argparse.ArgumentParser() - parser.add_argument( - "--config", default="../configs/transformer.base.yaml", type=str, help="Path of the config file. " - ) - parser.add_argument( - "--decoding_lib", - default="../../../../paddlenlp/ops/build/lib/libdecoding_op.so", - type=str, - help="Path of libdecoding_op.so. ", - ) - parser.add_argument("--use_fp16_decoding", action="store_true", help="Whether to use fp16 decoding to predict. ") - parser.add_argument( - "--enable_fast_encoder", - action="store_true", - help="Whether to use fast version encoder to predict. This is experimental option for now. ", - ) - parser.add_argument("--use_fp16_encoder", action="store_true", help="Whether to use fp16 encoder to predict. ") - parser.add_argument( - "--decoding_strategy", - default="beam_search", - type=str, - choices=["beam_search", "topk_sampling", "topp_sampling", "beam_search_v2"], - help="Decoding strategy. Can be one of ['beam_search', 'topk_sampling', 'topp_sampling', 'beam_search_v2']. ", - ) - parser.add_argument("--beam_size", default=4, type=int, help="Beam size. ") - parser.add_argument("--topk", default=4, type=int, help="The k value for topk_sampling. Default is 4. ") - parser.add_argument( - "--topp", - default=0.0, - type=float, - help="The probability threshold for topp_sampling. Default is 0.0 which means it won't go through topp_sampling. ", - ) - parser.add_argument( - "--benchmark", - action="store_true", - help="Whether to print logs on each cards and use benchmark vocab. Normally, not necessary to set --benchmark. ", - ) - parser.add_argument( - "--vocab_file", - default=None, - type=str, - help="The vocab file. Normally, it shouldn't be set and in this case, the default WMT14 dataset will be used.", - ) - parser.add_argument( - "--src_vocab", - default=None, - type=str, - help="The vocab file for source language. If --vocab_file is given, the --vocab_file will be used. ", - ) - parser.add_argument( - "--trg_vocab", - default=None, - type=str, - help="The vocab file for target language. If --vocab_file is given, the --vocab_file will be used. ", - ) - parser.add_argument( - "--bos_token", default=None, type=str, help="The bos token. It should be provided when use custom vocab_file. " - ) - parser.add_argument( - "--eos_token", default=None, type=str, help="The eos token. It should be provided when use custom vocab_file. " - ) - parser.add_argument( - "--pad_token", - default=None, - type=str, - help="The pad token. It should be provided when use custom vocab_file. And if it's None, bos_token will be used. ", - ) - args = parser.parse_args() - return args - - -def do_predict(args): - place = "gpu" - place = paddle.set_device(place) - reader.adapt_vocab_size(args) - - # Define model - transformer = FasterTransformer( - src_vocab_size=args.src_vocab_size, - trg_vocab_size=args.trg_vocab_size, - max_length=args.max_length + 1, - num_encoder_layers=args.n_layer, - num_decoder_layers=args.n_layer, - n_head=args.n_head, - d_model=args.d_model, - d_inner_hid=args.d_inner_hid, - dropout=args.dropout, - weight_sharing=args.weight_sharing, - bos_id=args.bos_idx, - eos_id=args.eos_idx, - pad_id=args.pad_idx, - decoding_strategy=args.decoding_strategy, - beam_size=args.beam_size, - max_out_len=args.max_out_len, - decoding_lib=args.decoding_lib, - use_fp16_decoding=args.use_fp16_decoding, - enable_fast_encoder=args.enable_fast_encoder, - use_fp16_encoder=args.use_fp16_encoder, - rel_len=args.use_rel_len, - alpha=args.alpha, - ) - - # Set evaluate mode - transformer.eval() - - # Load checkpoint. - transformer.load(init_from_params=os.path.join(args.init_from_params, "transformer.pdparams")) - - # Convert dygraph model to static graph model - transformer = paddle.jit.to_static( - transformer, - input_spec=[ - # src_word - paddle.static.InputSpec(shape=[None, None], dtype="int64"), - # trg_word - # Support exporting model which support force decoding - # NOTE: Data type MUST be int32 ! - # paddle.static.InputSpec( - # shape=[None, None], dtype="int32") - ], - ) - - # Save converted static graph model - paddle.jit.save(transformer, os.path.join(args.inference_model_dir, "transformer")) - logger.info("Transformer has been saved to {}".format(args.inference_model_dir)) - - -if __name__ == "__main__": - ARGS = parse_args() - yaml_file = ARGS.config - with open(yaml_file, "rt") as f: - args = AttrDict(yaml.safe_load(f)) - args.decoding_lib = ARGS.decoding_lib - args.use_fp16_decoding = ARGS.use_fp16_decoding - args.enable_fast_encoder = ARGS.enable_fast_encoder - args.use_fp16_encoder = ARGS.use_fp16_encoder - args.decoding_strategy = ARGS.decoding_strategy - args.beam_size = ARGS.beam_size - args.topk = ARGS.topk - args.topp = ARGS.topp - args.benchmark = ARGS.benchmark - - if ARGS.vocab_file is not None: - args.src_vocab = ARGS.vocab_file - args.trg_vocab = ARGS.vocab_file - args.joined_dictionary = True - elif ARGS.src_vocab is not None and ARGS.trg_vocab is None: - args.vocab_file = args.trg_vocab = args.src_vocab = ARGS.src_vocab - args.joined_dictionary = True - elif ARGS.src_vocab is None and ARGS.trg_vocab is not None: - args.vocab_file = args.trg_vocab = args.src_vocab = ARGS.trg_vocab - args.joined_dictionary = True - else: - args.src_vocab = ARGS.src_vocab - args.trg_vocab = ARGS.trg_vocab - args.joined_dictionary = not ( - args.src_vocab is not None and args.trg_vocab is not None and args.src_vocab != args.trg_vocab - ) - if args.weight_sharing != args.joined_dictionary: - if args.weight_sharing: - raise ValueError("The src_vocab and trg_vocab must be consistency when weight_sharing is True. ") - else: - raise ValueError( - "The src_vocab and trg_vocab must be specified respectively when weight sharing is False. " - ) - - args.bos_token = ARGS.bos_token - args.eos_token = ARGS.eos_token - args.pad_token = ARGS.pad_token - pprint(args) - - do_predict(args) diff --git a/legacy/examples/model_compression/distill_lstm/README.md b/legacy/examples/model_compression/distill_lstm/README.md index 56e63c435339..f400a1e566f9 100644 --- a/legacy/examples/model_compression/distill_lstm/README.md +++ b/legacy/examples/model_compression/distill_lstm/README.md @@ -35,7 +35,7 @@ 对于BERT的fine-tuning任务,本实验中使用了预训练模型`bert-bas-uncased`、`bert-wwm-ext-chinese`、`bert-base-chinese`。同样,这几个模型在训练时会被自动下载到`paddlenlp.utils.env.MODEL_HOME`路径下。例如,对于`bert-base-uncased`模型,在linux系统下,会被下载到`~/.paddlenlp/models/bert-base-uncased`下。 -在中文数据集上的小模型训练的输入利用jieba分词,其中词表同本repo下[文本分类项目](../../text_classification/rnn)的词表,可通过运行以下命令进行下载: +在中文数据集上的小模型训练的输入利用jieba分词,其中词表同本repo下[文本分类项目](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/examples/text_classification/rnn)的词表,可通过运行以下命令进行下载: ```shell wget https://bj.bcebos.com/paddlenlp/data/senta_word_dict.txt diff --git a/legacy/examples/multimodal/minigpt4/paddle_minigpt4_instrction.md b/legacy/examples/multimodal/minigpt4/paddle_minigpt4_instrction.md index 7b84aea48bd7..8c6ddb7ca93b 100644 --- a/legacy/examples/multimodal/minigpt4/paddle_minigpt4_instrction.md +++ b/legacy/examples/multimodal/minigpt4/paddle_minigpt4_instrction.md @@ -11,9 +11,9 @@ 根据你准备的Vicuna模型版本,下载预训练的MiniGPT4 权重。 -| Checkpoint Aligned with Vicuna 7B | Checkpoint Aligned with Vicuna 13B | -:-------------------------------------:|:-----------------------------------: -[Download](https://drive.google.com/file/d/1RY9jV0dyqLX-o38LrumkKRh6Jtaop58R/view?usp=sharing) | [Download](https://drive.google.com/file/d/1a4zLvaiDBr-36pasffmgpvH5P7CKmpze/view?usp=share_link) +| Checkpoint Aligned with Vicuna 7B | Checkpoint Aligned with Vicuna 13B | +|:----------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------------------:| +| [Download](https://drive.google.com/file/d/1RY9jV0dyqLX-o38LrumkKRh6Jtaop58R/view?usp=sharing) | [Download](https://drive.google.com/file/d/1a4zLvaiDBr-36pasffmgpvH5P7CKmpze/view?usp=share_link) | ### 1.2准备 ViT and Qformer 权重 MiniGPT4中使用的ViT和Qformer Weight来自blip2-flan-t5-xxl,这个weight在PaddleNLP中进行了转换。 所以你可以从 PaddleNLP 下载它,你有两种下载方式进行下载: @@ -34,9 +34,9 @@ Blip2Model.from_pretrained("Salesforce/blip2-flan-t5-xxl") #### 1.2.2 直接点击下载 可以直接进行点击下载: -| blip2-flan-t5-xxl 权重 | 点击下载 | -:-------------------------------------:|:-----------------------------------: -| model_state.pdparams | [Download](https://paddlenlp.bj.bcebos.com/models/community/Salesforce/blip2-flan-t5-xxl/model_state.pdparams) | +| blip2-flan-t5-xxl 权重 | 点击下载 | +|:----------------------:|:--------------------------------------------------------------------------------------------------------------:| +| model_state.pdparams | [Download](https://paddlenlp.bj.bcebos.com/models/community/Salesforce/blip2-flan-t5-xxl/model_state.pdparams) | ### 1.3 准备 Vicuna 权重 @@ -46,15 +46,15 @@ Blip2Model.from_pretrained("Salesforce/blip2-flan-t5-xxl") 这里展示两种Vicuna delta 权重,请根据需要选择一种并点击下载。 -| vicuna-7b-delta-v0 | vicuna-13b-delta-v0 | -:-------------------------------------:|:-----------------------------------: - [Download](https://huggingface.co/lmsys/vicuna-7b-delta-v0/tree/main) | [Download](https://huggingface.co/lmsys/vicuna-13b-delta-v0g) +| vicuna-7b-delta-v0 | vicuna-13b-delta-v0 | +|:---------------------------------------------------------------------:|:------------------------------------------------------------:| +| [Download](https://huggingface.co/lmsys/vicuna-7b-delta-v0/tree/main) | [Download](https://huggingface.co/lmsys/vicuna-13b-delta-v0) | #### 1.3.2 根据以上选择的vicuna delta 权重,下载 相应的 llama 权重。 -| llama-7b | llama-13b | -:-------------------------------------:|:-----------------------------------: - [Download](https://huggingface.co/decapoda-research/llama-7b-hf/tree/main) | [Download](https://huggingface.co/decapoda-research/llama-13b-hf) +| llama-7b | llama-13b | +|:--------------------------------------------------------------------------:|:-----------------------------------------------------------------:| +| [Download](https://huggingface.co/baffo32/decapoda-research-llama-7B-hf/tree/main) | [Download](https://huggingface.co/yahma/llama-13b-hf/tree/main) | #### 1.3.3 结合上面的两个权重,得到可以使用的 vicuna 权重 diff --git a/legacy/examples/question_generation/unimo-text/README.md b/legacy/examples/question_generation/unimo-text/README.md index fdf6ba023b19..cc05ef0c9d29 100644 --- a/legacy/examples/question_generation/unimo-text/README.md +++ b/legacy/examples/question_generation/unimo-text/README.md @@ -74,7 +74,7 @@ PaddleNLP提供开箱即用的产业级NLP预置任务能力,无需训练, 关键配置参数说明: * `model`:可选模型,默认为unimo-text-1.0-dureader_qg,支持的模型有["unimo-text-1.0", "unimo-text-1.0-dureader_qg", "unimo-text-1.0-question-generation", "unimo-text-1.0-question-generation-dureader_qg"]。 -具体参数配置可参考[Taskflow文档](../../../docs/model_zoo/taskflow.md)。 +具体参数配置可参考[Taskflow文档](../../../../docs/model_zoo/taskflow.md)。 ## 训练定制 diff --git a/legacy/examples/sentiment_analysis/skep/README.md b/legacy/examples/sentiment_analysis/skep/README.md index de57627169db..2d5183613102 100644 --- a/legacy/examples/sentiment_analysis/skep/README.md +++ b/legacy/examples/sentiment_analysis/skep/README.md @@ -268,4 +268,4 @@ python predict_opinion.py \ **备注**: 1. 评价对象级情感分类和观点抽取两类任务的模型部署方式可参考语句级情感分类,这里不再赘述。 -2. 评级级情感分类以及观点抽取,暂不支持skep模型的Taskflow离线模型加载。如需使用此类功能,请参考:[unified_sentiment_analysis](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/sentiment_analysis/unified_sentiment_extraction)。 +2. 评级级情感分类以及观点抽取,暂不支持skep模型的Taskflow离线模型加载。如需使用此类功能,请参考:[unified_sentiment_analysis](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/applications/sentiment_analysis/unified_sentiment_extraction)。 diff --git a/legacy/examples/simultaneous_translation/stacl/README.md b/legacy/examples/simultaneous_translation/stacl/README.md index 1bd391caa538..743ae223accc 100644 --- a/legacy/examples/simultaneous_translation/stacl/README.md +++ b/legacy/examples/simultaneous_translation/stacl/README.md @@ -10,7 +10,7 @@ ### 模型特点 -STACL 是论文 [STACL: Simultaneous Translation with Implicit Anticipation and Controllable Latency using Prefix-to-Prefix Framework](https://www.aclweb.org/anthology/P19-1289/) 中针对同传提出的适用于所有同传场景的翻译架构[2],该架构基于Transformer实现,可参考PaddleNLP的[Transformer](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/machine_translation/transformer)。 +STACL 是论文 [STACL: Simultaneous Translation with Implicit Anticipation and Controllable Latency using Prefix-to-Prefix Framework](https://www.aclweb.org/anthology/P19-1289/) 中针对同传提出的适用于所有同传场景的翻译架构[2],该架构基于Transformer实现,可参考PaddleNLP的[Transformer](../../machine_translation/transformer)。 STACL 主要具有以下优势: diff --git a/legacy/examples/simultaneous_translation/stacl/demo/README.md b/legacy/examples/simultaneous_translation/stacl/demo/README.md index 84c2ff473ecf..a0b460ccbd6c 100644 --- a/legacy/examples/simultaneous_translation/stacl/demo/README.md +++ b/legacy/examples/simultaneous_translation/stacl/demo/README.md @@ -40,7 +40,7 @@ ``` -上述models目录下的模型可以在这里[下载](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/examples/simultaneous_translation/stacl/README.md#%E6%A8%A1%E5%9E%8B%E4%B8%8B%E8%BD%BD%E6%9B%B4%E6%96%B0%E4%B8%AD) ,下载完后将解压后的`transformer.pdparams`分别放在不同的waitk策略对应的子目录下面。 +上述models目录下的模型可以在这里[下载](../README.md#%E6%A8%A1%E5%9E%8B%E4%B8%8B%E8%BD%BD%E6%9B%B4%E6%96%B0%E4%B8%AD) ,下载完后将解压后的`transformer.pdparams`分别放在不同的waitk策略对应的子目录下面。 ### 参数说明与配置 @@ -79,7 +79,7 @@ ### 使用说明 -1. 下载[预训练模型](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/examples/simultaneous_translation/stacl/README.md#%E6%A8%A1%E5%9E%8B%E4%B8%8B%E8%BD%BD%E6%9B%B4%E6%96%B0%E4%B8%AD) ,并放在models目录下对应的子目录里; +1. 下载[预训练模型](../README.md#%E6%A8%A1%E5%9E%8B%E4%B8%8B%E8%BD%BD%E6%9B%B4%E6%96%B0%E4%B8%AD) ,并放在models目录下对应的子目录里; 2. 下载词表(源语言词表,目标语言词表,BPE词表),并在配置文件`transformer_demo.yaml`中修改相应的参数; 3. 运行`demo.py`; 4. 出现界面,在Chinese input文本框中输入中文,按【回车键】开始实时翻译,或者按【REC】开始录音并开始实时翻译,遇到【。!?】结束整句,按【CLEAR】清空所有的输入和输出。 diff --git a/legacy/examples/text_matching/simnet/README.md b/legacy/examples/text_matching/simnet/README.md index 9b346888e8a4..3237d7c76c2d 100644 --- a/legacy/examples/text_matching/simnet/README.md +++ b/legacy/examples/text_matching/simnet/README.md @@ -8,22 +8,22 @@ SimNet框架在百度各产品上广泛应用,主要包括BOW、CNN、RNN、MM ## 模型简介 -本项目通过调用[Seq2Vec](../../../paddlenlp/seq2vec/)中内置的模型进行序列建模,完成句子的向量表示。包含最简单的词袋模型和一系列经典的RNN类模型。 - -| 模型 | 模型介绍 | -| ------------------------------------------------ | ------------------------------------------------------------ | -| BOW(Bag Of Words) | 非序列模型,将句子表示为其所包含词的向量的加和 | -| CNN | 序列模型,使用卷积操作,提取局部区域地特征 | -| GRU(Gated Recurrent Unit) | 序列模型,能够较好地解决序列文本中长距离依赖的问题 | -| LSTM(Long Short Term Memory) | 序列模型,能够较好地解决序列文本中长距离依赖的问题 | - - -| 模型 | dev acc | test acc | -| ---- | ------- | -------- | -| BoW | 0.7290 | 0.75232 | -| CNN | 0.7042 | 0.73760 | -| GRU | 0.7781 | 0.77808 | -| LSTM | 0.73760 | 0.77320 | +本项目通过调用[Seq2Vec](../../../../paddlenlp/seq2vec/)中内置的模型进行序列建模,完成句子的向量表示。包含最简单的词袋模型和一系列经典的RNN类模型。 + +| 模型 | 模型介绍 | +|--------------------------------|----------------------------------------------------| +| BOW(Bag Of Words) | 非序列模型,将句子表示为其所包含词的向量的加和 | +| CNN | 序列模型,使用卷积操作,提取局部区域地特征 | +| GRU(Gated Recurrent Unit) | 序列模型,能够较好地解决序列文本中长距离依赖的问题 | +| LSTM(Long Short Term Memory) | 序列模型,能够较好地解决序列文本中长距离依赖的问题 | + + +| 模型 | dev acc | test acc | +|------|---------|----------| +| BoW | 0.7290 | 0.75232 | +| CNN | 0.7042 | 0.73760 | +| GRU | 0.7781 | 0.77808 | +| LSTM | 0.73760 | 0.77320 | diff --git a/legacy/examples/text_summarization/unimo-text/README.md b/legacy/examples/text_summarization/unimo-text/README.md index c0d336331d03..9fde6d55ec40 100644 --- a/legacy/examples/text_summarization/unimo-text/README.md +++ b/legacy/examples/text_summarization/unimo-text/README.md @@ -30,7 +30,6 @@ 本项目是基于预训练语言模型UNIMO-Text的文本摘要,具有以下优势: - 效果领先。 - 开箱即用。本项目提供TaskFlow接口,无需训练,仅需几行代码便可预测。 -- 高性能推理。本项目基于[FastGeneration](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/fast_generation)进行推理加速,能够提供更高性能的推理体验。 - 训练推理全流程打通。本项目提供了全面的定制训练流程,从数据准备、模型训练预测,到模型推理部署,一应俱全。 ### 基于预训练语言模型的文本摘要 diff --git a/legacy/examples/torch_migration/docs/ThesisReproduction_NLP.md b/legacy/examples/torch_migration/docs/ThesisReproduction_NLP.md index eee175d34a28..b944a36c893c 100644 --- a/legacy/examples/torch_migration/docs/ThesisReproduction_NLP.md +++ b/legacy/examples/torch_migration/docs/ThesisReproduction_NLP.md @@ -721,7 +721,7 @@ if paddle.distributed.get_world_size() > 1: #### 3.12.4 程序启动方式 -对于单机单卡,启动脚本如下所示。[https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/language_model/bert](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/language_model/bert) +对于单机单卡,启动脚本如下所示。[单机单卡](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/examples/benchmark/glue) ```shell unset CUDA_VISIBLE_DEVICES @@ -765,7 +765,7 @@ python -m paddle.distributed.launch --gpus "0,1,2,3" run_glue.py \ **【实战】** -本部分可以参考paddlenlp库中的例子:[单机多卡训练](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/language_model/bert)。 +本部分可以参考paddlenlp库中的例子:[单机多卡训练](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/model_zoo/bert)。 ## 4. 论文复现注意事项与FAQ diff --git a/legacy/examples/torch_migration/pipeline/Step5/bert_torch/glue.py b/legacy/examples/torch_migration/pipeline/Step5/bert_torch/glue.py index 10cec84128a5..49de105ff783 100644 --- a/legacy/examples/torch_migration/pipeline/Step5/bert_torch/glue.py +++ b/legacy/examples/torch_migration/pipeline/Step5/bert_torch/glue.py @@ -259,7 +259,7 @@ class Glue(datasets.GeneratorBasedBuilder): year={2017} }""" ), - url="http://ixa2.si.ehu.es/stswiki/index.php/STSbenchmark", + url="https://huggingface.co/datasets/mteb/stsbenchmark-sts", process_label=np.float32, ), GlueConfig( diff --git a/legacy/model_zoo/bert/README.md b/legacy/model_zoo/bert/README.md index 58837afaa301..03022ce3a4be 100644 --- a/legacy/model_zoo/bert/README.md +++ b/legacy/model_zoo/bert/README.md @@ -236,16 +236,16 @@ python -m paddle.distributed.launch --gpus "0" run_glue_trainer.py \ 基于`bert-base-uncased`在GLUE各评测任务上Fine-tuning后,在验证集上有如下结果: -| Task | Metric | Result | -|:-----:|:----------------------------:|:-----------------:| -| SST2 | Accuracy | 0.92660 | -| QNLI | Accuracy | 0.91707 | -| CoLA | Mattehew's corr | 0.59557 | -| MRPC | F1/Accuracy | 0.91667/0.88235 | -| STSB | Person/Spearman corr | 0.88847/0.88350 | -| QQP | Accuracy/F1 | 0.90581/0.87347 | -| MNLI | Matched acc/MisMatched acc | 0.84422/0.84825 | -| RTE | Accuracy | 0.711191 | +| Task | Metric | Result | +|:----:|:--------------------------:|:---------------:| +| SST2 | Accuracy | 0.92660 | +| QNLI | Accuracy | 0.91707 | +| CoLA | Mattehew's corr | 0.59557 | +| MRPC | F1/Accuracy | 0.91667/0.88235 | +| STSB | Person/Spearman corr | 0.88847/0.88350 | +| QQP | Accuracy/F1 | 0.90581/0.87347 | +| MNLI | Matched acc/MisMatched acc | 0.84422/0.84825 | +| RTE | Accuracy | 0.711191 | ### 预测 @@ -285,4 +285,4 @@ Batch id: 4, example id: 0, sentence1: this new jangle of noise , mayhem and stu ## 扩展 -上述的介绍是基于动态图的BERT的预训练任务和微调任务以及预测任务的实践过程,同时在我们也提供了基于PaddlePaddle Fleet API的静态图的BERT相关实践,在组网代码层面保持动静统一,在计算速度以及多机联合训练方面有着更优的性能,具体的细节可以参考 [BERT静态图](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/bert/static) 。 +上述的介绍是基于动态图的BERT的预训练任务和微调任务以及预测任务的实践过程,同时在我们也提供了基于PaddlePaddle Fleet API的静态图的BERT相关实践,在组网代码层面保持动静统一,在计算速度以及多机联合训练方面有着更优的性能,具体的细节可以参考 [BERT静态图](./static/)。 diff --git a/legacy/model_zoo/chinesebert/README.md b/legacy/model_zoo/chinesebert/README.md index 383f68b2149d..7a2c6ccc9422 100644 --- a/legacy/model_zoo/chinesebert/README.md +++ b/legacy/model_zoo/chinesebert/README.md @@ -14,7 +14,7 @@ ## **模型预训练** -模型预训练过程可参考[Electra的README](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/model_zoo/electra/README.md) +模型预训练过程可参考[Electra的README](../electra/README.md) ## **Fine-tuning** diff --git a/legacy/model_zoo/convbert/README.md b/legacy/model_zoo/convbert/README.md index b7014db2abdf..89494186d585 100644 --- a/legacy/model_zoo/convbert/README.md +++ b/legacy/model_zoo/convbert/README.md @@ -18,7 +18,7 @@ Fine-tuning 使用GLUE数据,这部分Paddle已提供,在执行Fine-tuning ## **模型预训练** -模型预训练过程可参考[Electra的README](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/model_zoo/electra/README.md) +模型预训练过程可参考[Electra的README](../electra/README.md) ## **Fine-tuning** @@ -80,16 +80,16 @@ eval loss: 0.226449, acc: 0.9013761467889908, eval done total : 0.51035308837890 使用convbert-small预训练模型进行单卡Fine-tuning ,在验证集上有如下结果(这里各类任务的结果是运行1次的结果): -| Task | Metric | Result | -|-------|------------------------------|-------------| -| CoLA | Matthews corr | 56.22 | -| SST-2 | acc. | 91.39 | -| MRPC | acc./F1 | 87.70 | -| STS-B | Pearson/Spearman corr | 86.34 | -| QQP | acc./F1 | 85.47 | -| MNLI | matched acc./mismatched acc. | 81.87 | -| QNLI | acc. | 87.71 | -| RTE | acc. | 66.06 | +| Task | Metric | Result | +|-------|------------------------------|--------| +| CoLA | Matthews corr | 56.22 | +| SST-2 | acc. | 91.39 | +| MRPC | acc./F1 | 87.70 | +| STS-B | Pearson/Spearman corr | 86.34 | +| QQP | acc./F1 | 85.47 | +| MNLI | matched acc./mismatched acc. | 81.87 | +| QNLI | acc. | 87.71 | +| RTE | acc. | 66.06 | 注:acc.是Accuracy的简称,表中Metric字段名词取自[GLUE论文](https://openreview.net/pdf?id=rJ4km2R5t7) diff --git a/legacy/model_zoo/electra/README.md b/legacy/model_zoo/electra/README.md index 64bdb96f0d67..7a009a28b542 100644 --- a/legacy/model_zoo/electra/README.md +++ b/legacy/model_zoo/electra/README.md @@ -1,7 +1,6 @@ # ELECTRA with PaddleNLP [ELECTRA](https://openreview.net/pdf?id=r1xMH1BtvB) 在[BERT](https://arxiv.org/abs/1810.04805)的基础上对其预训练过程进行了改进:预训练由两部分模型网络组成,称为Generator和Discriminator,各自包含1个BERT模型。Generator的预训练使用和BERT一样的Masked Language Model(MLM)任务,但Discriminator的预训练使用Replaced Token Detection(RTD)任务(主要改进点)。预训练完成后,使用Discriminator作为精调模型,后续的Fine-tuning不再使用Generator。 -![avatar](./electra_model_brief_introduce.JPG) 图片来源:来自[electra论文](https://openreview.net/pdf?id=r1xMH1BtvB) diff --git a/legacy/model_zoo/ernie-1.0/README.md b/legacy/model_zoo/ernie-1.0/README.md index 3ddcab37f664..d99c90fa1701 100644 --- a/legacy/model_zoo/ernie-1.0/README.md +++ b/legacy/model_zoo/ernie-1.0/README.md @@ -516,7 +516,7 @@ python3 -u -m paddle.distributed.launch \ - 记录混合精度,loss_scaling等信息,方便用户debug。 - 对模型结构,配置参数,paddle版本信息进行记录,方便复现环境 - **下游任务评估**:CLUE Benchmark搜索评估参数效果 - - 使用[批量启动-grid-search](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/benchmark/clue#%E6%89%B9%E9%87%8F%E5%90%AF%E5%8A%A8-grid-search),可以进行批量搜索任务 + - 使用[批量启动-grid-search](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/examples/benchmark/clue#%E6%89%B9%E9%87%8F%E5%90%AF%E5%8A%A8-grid-search),可以进行批量搜索任务 - 注意,这里使用的是训练中的checkpoint进行评估,可以直接试着 评估待评估的参数为,所在的路径地址,即如 `python grid_seach.py output/ernie-base-outdir/model_100000` 之类的checkpoint地址。 详细介绍请参见[ERNIE 中文预训练介绍](./pretraining_introduction.md)。 diff --git a/legacy/model_zoo/ernie-1.0/preprocess b/legacy/model_zoo/ernie-1.0/preprocess deleted file mode 120000 index 99a4b835a303..000000000000 --- a/legacy/model_zoo/ernie-1.0/preprocess +++ /dev/null @@ -1 +0,0 @@ -../../../llm/tools/preprocess \ No newline at end of file diff --git a/legacy/model_zoo/ernie-1.0/pretraining_introduction.md b/legacy/model_zoo/ernie-1.0/pretraining_introduction.md index b7d77c3e405e..0274722946a7 100644 --- a/legacy/model_zoo/ernie-1.0/pretraining_introduction.md +++ b/legacy/model_zoo/ernie-1.0/pretraining_introduction.md @@ -8,7 +8,7 @@ PaddleNLP致力于预训练开源工作,使用开源中文语料CLUE、WuDao 接下来将从下面几个方面,详细介绍整个数据制作全流程,从零开始,构建一个预训练模型。 -* [1. 数据准备](数据准备) +* [1. 数据准备](#数据准备) * [1.1 大规模中文数据](#大规模中文数据) * [1.2 高精准中文分词](#高精准中文分词) * [1.3 快速Token ID 转化](#快速TokenID转化) @@ -48,7 +48,7 @@ PaddleNLP致力于预训练开源工作,使用开源中文语料CLUE、WuDao ## 1. 数据准备 -数据流是预训练的非常重要的,[预处理文档](./preprocess/README.md)提供了整体的数据变动的流程示意,用户可以查看数据制作的细节文档。 +数据流是预训练的非常重要的,[预处理文档](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/llm/tools/preprocess)提供了整体的数据变动的流程示意,用户可以查看数据制作的细节文档。 @@ -102,7 +102,7 @@ ERNIE 使用知识嵌入的方式进行预训练。文本中的知识,比如 ```shell -python ./preprocess/words_segmentation.py \ +python $PADDLENLP_PATH/llm/tools/preprocess/words_segmentation.py \ --input_path "./WuDaoCorpus2.0_base_200G" \ --output_path "./wudao_lac_cut" \ --data_format "wudao" \ @@ -112,9 +112,9 @@ python ./preprocess/words_segmentation.py \ 注:预训练需要实现 SOP( Sentence Order Predict) 任务,在分词的同时,我们使用 简单规则 进行了文本断句。如果语料只有一句话,建议去除SOP loss,训练时设置 `binary_head=False`。 -文本转化完成后。我们使用 `./preprocess/trans_to_json.py`重新转换为jsonl格式(分词完毕)。 +文本转化完成后。我们使用 `$PADDLENLP_PATH/llm/tools/preprocess/trans_to_json.py`重新转换为jsonl格式(分词完毕)。 ```shell -python ./preprocess/trans_to_json.py \ +python $PADDLENLP_PATH/llm/tools/preprocess/trans_to_json.py \ --input_path "./wudao_lac_cut" \ --output_path "wudao_corpus_200g_sample.jsonl" \ --workers 40 \ @@ -144,7 +144,7 @@ wget https://bj.bcebos.com/paddlenlp/models/transformers/data_tools/wudao_corpus 使用 Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz CPU测试,40线程,处理速度 8+MB/s,约7个小时左右,即可完成 200GB 文本转化为ID. ```shell -python -u ./preprocess/create_pretraining_data.py \ +python -u $PADDLENLP_PATH/llm/tools/preprocess/create_pretraining_data.py \ --model_name "ernie-3.0-base-zh" \ --tokenizer_name "ErnieTokenizer" \ --input_path "wudao_corpus_200g.jsonl" \ @@ -567,7 +567,7 @@ python3 -u -m paddle.distributed.launch \ - **下游任务评估**:CLUE Benchmark搜索评估参数效果 - - 使用[批量启动-grid-search](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/benchmark/clue#%E6%89%B9%E9%87%8F%E5%90%AF%E5%8A%A8-grid-search),可以进行批量搜索任务 + - 使用[批量启动-grid-search](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/examples/benchmark/clue#%E6%89%B9%E9%87%8F%E5%90%AF%E5%8A%A8-grid-search),可以进行批量搜索任务 - 注意,这里使用的是训练中的checkpoint进行评估,可以直接试着 评估待评估的参数为,所在的路径地址,即如 `python grid_seach.py output/ernie-base-outdir/model_100000` 之类的checkpoint地址。 diff --git a/legacy/model_zoo/ernie-1.0/vocab/README.md b/legacy/model_zoo/ernie-1.0/vocab/README.md index 8179e8651a81..f409dbcdf583 100644 --- a/legacy/model_zoo/ernie-1.0/vocab/README.md +++ b/legacy/model_zoo/ernie-1.0/vocab/README.md @@ -25,12 +25,12 @@ PaddleNLP致力于预训练开源工作,本文档提供了ERNIE词表的制作 **WuDaoCorpus2.0 Base 语料** -WuDaoCorpora是悟道爬取的中文大规模语料。整体数量为3TB,目前开源的部分为WuDaoCorpus2.0 bases数据集,大小为200GB。用户请参考[这里](../preprocess/docs/WuDaoCorpusBase.md)获取原始文本数据。 +WuDaoCorpora是悟道爬取的中文大规模语料。整体数量为3TB,目前开源的部分为WuDaoCorpus2.0 bases数据集,大小为200GB。用户请参考[这里](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/tools/preprocess/docs/WuDaoCorpusBase.md)获取原始文本数据。 **CLUECorpus2020 语料** -CLUECorpus2020 过对Common Crawl的中文部分进行语料清洗得到。开源部分提供了约200G左右的语料文本,详细介绍见[官网](https://github.com/CLUEbenchmark/CLUECorpus2020#%E6%95%B0%E6%8D%AE%E4%B8%8B%E8%BD%BD),用户参考[这里](./preprocess/docs/CLUECorpus2020.md)获取原始文本数据。 +CLUECorpus2020 过对Common Crawl的中文部分进行语料清洗得到。开源部分提供了约200G左右的语料文本,详细介绍见[官网](https://github.com/CLUEbenchmark/CLUECorpus2020#%E6%95%B0%E6%8D%AE%E4%B8%8B%E8%BD%BD),用户参考[这里](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/tools/preprocess/docs/CLUECorpus2020.md)获取原始文本数据。 diff --git a/legacy/model_zoo/ernie-3.0-tiny/README.md b/legacy/model_zoo/ernie-3.0-tiny/README.md index f6239638a3d0..07b7aca47135 100644 --- a/legacy/model_zoo/ernie-3.0-tiny/README.md +++ b/legacy/model_zoo/ernie-3.0-tiny/README.md @@ -542,7 +542,7 @@ python run_eval.py \ 尽管 ERNIE 3.0 Tiny 已提供了效果不错的轻量级模型可以微调后直接使用,但在本项目中,微调后的模型体积是 69.0 MB,内存占用达到 115.72MB,部署至端侧还是存在一定困难。因此当模型有部署上线的需求,想要进一步压缩模型体积,降低推理时延,可使用本项目的 **端上语义理解压缩方案** 对上一步微调后的模型进行压缩。 -为了方便实现,[PaddleNLP 模型压缩 API](../../docs/compression.md) 已提供了以下压缩功能,模型压缩 API 主要是基于 [PaddleSlim](https://github.com/PaddlePaddle/PaddleSlim) 模型压缩能力,PaddleSlim 是一个专注于深度学习模型压缩的工具库,提供低比特量化、知识蒸馏、稀疏化和模型结构搜索等模型压缩策略,帮助开发者快速实现模型的小型化,欢迎大家使用。 +为了方便实现,[PaddleNLP 模型压缩 API](../../../docs/compression.md) 已提供了以下压缩功能,模型压缩 API 主要是基于 [PaddleSlim](https://github.com/PaddlePaddle/PaddleSlim) 模型压缩能力,PaddleSlim 是一个专注于深度学习模型压缩的工具库,提供低比特量化、知识蒸馏、稀疏化和模型结构搜索等模型压缩策略,帮助开发者快速实现模型的小型化,欢迎大家使用。 端上模型压缩流程如下图所示: @@ -597,12 +597,12 @@ python run_train.py \ ### 压缩效果 -| 模型 | 模型精度(acc.) | 模型体积(MB) | -|-----------------------------------|--------------|--------------| -| 原模型 | 82.34 | 69.0 | -| 原模型+裁剪(词表+模型宽度) | 82.11(-0.23) | 64.0(-7.2%) | -| 原模型+裁剪(词表+模型宽度)+量化(矩阵乘) | 82.21(-0.13) | 11.0(-84.1%) | -| 原模型+裁剪(词表+模型宽度)+量化(矩阵乘+Embedding) | 82.21(-0.13) | 5.4(-92.2%) | +| 模型 | 模型精度(acc.) | 模型体积(MB) | +|-------------------------------------------------------|----------------|--------------| +| 原模型 | 82.34 | 69.0 | +| 原模型+裁剪(词表+模型宽度) | 82.11(-0.23) | 64.0(-7.2%) | +| 原模型+裁剪(词表+模型宽度)+量化(矩阵乘) | 82.21(-0.13) | 11.0(-84.1%) | +| 原模型+裁剪(词表+模型宽度)+量化(矩阵乘+Embedding) | 82.21(-0.13) | 5.4(-92.2%) | 模型经过压缩后,精度基本无损,体积减小了 92.2%,仅有 5.4 MB。到此,算法侧的工作基本完成。 @@ -630,14 +630,14 @@ python run_train.py \ 使用 FastDeploy 将压缩后的模型部署在华为 nova 7 Pro (麒麟 985 芯片)上,选用 Paddle Lite 作为后端进行测试,得到不同推理精度下的模型效果、端到端时延(包括前后处理)、内存占用的数据如下: -| 模型 | 模型精度(acc.) | 推理精度 | 端到端时延(ms) | 内存占用 Pss (MB) | 模型体积(MB) | -|-----------------------------------|--------------|-----------|-------------|----------------|--------------| -| 原模型 | 82.34 | FP32 | 9.90 | 115.72 | 69.0 | -| 原模型 | 82.34(-0.00) | FP16 | 6.03(1.64x) | 106.24(-8.2%) | 69.0(-0.0%) | -| 原模型+裁剪(词表+模型宽度) | 82.11(-0.23) | FP32 | 7.55(1.31x) | 59.49(-48.59%) | 64.0(-7.2%) | -| 原模型+裁剪(词表+模型宽度) | 82.11(-0.23) | FP16 | 4.68(2.12x) | 52.23(-54.87%) | 64.0(-7.2%) | -| 原模型+裁剪(词表+模型宽度)+量化(矩阵乘) | 82.21(-0.13) | FP32+INT8 | 4.57(2.17x) | 49.17(-57.51%) | 11.0(-84.1%) | -| **原模型+裁剪(词表+模型宽度)+量化(矩阵乘+Embedding)** | 82.21(-0.13) | FP32+INT8 | **4.64(2.13x)** | **43.77(-62.18%)** | **5.4(-92.2%)** | +| 模型 | 模型精度(acc.) | 推理精度 | 端到端时延(ms) | 内存占用 Pss (MB) | 模型体积(MB) | +|-----------------------------------------------------------|----------------|-----------|-----------------|--------------------|-----------------| +| 原模型 | 82.34 | FP32 | 9.90 | 115.72 | 69.0 | +| 原模型 | 82.34(-0.00) | FP16 | 6.03(1.64x) | 106.24(-8.2%) | 69.0(-0.0%) | +| 原模型+裁剪(词表+模型宽度) | 82.11(-0.23) | FP32 | 7.55(1.31x) | 59.49(-48.59%) | 64.0(-7.2%) | +| 原模型+裁剪(词表+模型宽度) | 82.11(-0.23) | FP16 | 4.68(2.12x) | 52.23(-54.87%) | 64.0(-7.2%) | +| 原模型+裁剪(词表+模型宽度)+量化(矩阵乘) | 82.21(-0.13) | FP32+INT8 | 4.57(2.17x) | 49.17(-57.51%) | 11.0(-84.1%) | +| **原模型+裁剪(词表+模型宽度)+量化(矩阵乘+Embedding)** | 82.21(-0.13) | FP32+INT8 | **4.64(2.13x)** | **43.77(-62.18%)** | **5.4(-92.2%)** | **测试条件**:max_seq_length=16,batch_size=1,thread_num=1 diff --git a/legacy/model_zoo/ernie-3.0-tiny/deploy/README.md b/legacy/model_zoo/ernie-3.0-tiny/deploy/README.md index 4da0c09c7c0c..0946cd900482 100644 --- a/legacy/model_zoo/ernie-3.0-tiny/deploy/README.md +++ b/legacy/model_zoo/ernie-3.0-tiny/deploy/README.md @@ -23,21 +23,9 @@ ```text -├── cpp -│   ├── CMakeLists.txt # CMake编译脚本 -│   ├── infer_demo.cc # C++ 部署示例代码 -│   └── README.md # C++ 部署示例文档 ├── python │   ├── infer_demo.py # Python 部署示例代码 │   └── README.md # Python 部署示例文档 -├── android -│   ├── README.md # Android部署文档 -│   ├── app # App示例代码 -│   ├── build.gradle -│   ├── ernie_tiny # ERNIE 3.0 Tiny JNI & Java封装代码 -│   ├── ...... # Android相关的工程文件及目录 -│   ├── local.properties -│   └── ui # 一些辅助用的UI代码 └── README.md # 文档 ``` @@ -53,5 +41,3 @@ ## 详细部署文档 - [Python部署](python/README.md) -- [C++部署](cpp/README.md) -- [Android部署](android/README.md) diff --git a/legacy/model_zoo/ernie-3.0-tiny/deploy/python/README.md b/legacy/model_zoo/ernie-3.0-tiny/deploy/python/README.md index 3b2eb9e07f15..58cff6f6be84 100644 --- a/legacy/model_zoo/ernie-3.0-tiny/deploy/python/README.md +++ b/legacy/model_zoo/ernie-3.0-tiny/deploy/python/README.md @@ -262,8 +262,4 @@ batch size = 32,max length = 16。 [ERNIE 3.0 Tiny模型详细介绍](../../README.md) -[ERNIE 3.0 Tiny模型C++部署方法](../cpp/README.md) - -[ERNIE 3.0 Tiny模型Android部署方法](../android/README.md) - [FastDeploy SDK安装文档](https://github.com/PaddlePaddle/FastDeploy/blob/develop/docs/cn/build_and_install/download_prebuilt_libraries.md) diff --git a/legacy/model_zoo/ernie-3.0/README.md b/legacy/model_zoo/ernie-3.0/README.md index c9f0d9829cd5..300282fa8223 100644 --- a/legacy/model_zoo/ernie-3.0/README.md +++ b/legacy/model_zoo/ernie-3.0/README.md @@ -20,7 +20,6 @@ * [部署](#部署) * [FastDeploy 部署](#FastDeploy部署) * [Python 部署](#Python部署) - * [C++ 部署](#C++部署) * [服务化部署](#服务化部署) * [Notebook教程](#Notebook教程) * [参考文献](#参考文献) @@ -1433,7 +1432,7 @@ trainer = Trainer( trainer.compress() ``` -压缩 API 可以传入的超参数可参考[文档](../../docs/compression.md)。 +压缩 API 可以传入的超参数可参考[文档](../../../docs/compression.md)。 本项目提供了压缩 API 在分类(包含文本分类、文本匹配、自然语言推理、代词消歧等任务)、序列标注、阅读理解三大场景下的使用样例,可以分别参考 `compress_seq_cls.py` 、`compress_token_cls.py`、`compress_qa.py`,启动方式如下: @@ -1462,7 +1461,7 @@ python compress_qa.py --model_name_or_path best_models/cmrc2018/ --dataset cmrc2 本案例中我们对 ERNIE 3.0-Medium 模型在三类任务上微调后的模型使用压缩 API 进行压缩。压缩后精度如下: | Model | AVG | AFQMC | TNEWS | IFLYTEK | CMNLI | OCNLI | CLUEWSC2020 | CSL | CMRC2018 | MSRA_NER | -| ------------------------------- | ----- | ----- | ----- | ------- | ----- | ----- | ----------- | ----- | ----------- | ----------------- | +|---------------------------------|-------|-------|-------|---------|-------|-------|-------------|-------|-------------|-------------------| | ERNIE 3.0-Medium | 74.87 | 75.35 | 57.45 | 60.18 | 81.16 | 77.19 | 80.59 | 81.93 | 66.95/87.15 | 92.65/93.43/93.04 | | ERNIE 3.0-Medium+FP16 | 74.87 | 75.32 | 57.45 | 60.22 | 81.16 | 77.22 | 80.59 | 81.90 | 66.95/87.16 | 92.65/93.45/93.05 | | ERNIE 3.0-Medium+裁剪+FP32 | 74.70 | 75.14 | 57.31 | 60.29 | 81.25 | 77.46 | 79.93 | 81.70 | 65.92/86.43 | 93.10/93.43/93.27 | @@ -1501,7 +1500,7 @@ python compress_qa.py --model_name_or_path best_models/cmrc2018/ --dataset cmrc2 测试环境及说明如上,测试 CPU 性能时,线程数设置为12。 | | TNEWS 性能 | TNEWS 精度 | MSRA_NER 性能 | MSRA_NER 精度 | CMRC2018 性能 | CMRC2018 精度 | -| -------------------------- | ------------ | ------------ | ------------- | ------------- | ------------- | ------------- | +|----------------------------|--------------|--------------|---------------|---------------|---------------|---------------| | ERNIE 3.0-Medium+FP32 | 311.95(1.0X) | 57.45 | 90.91(1.0x) | 93.04 | 33.74(1.0x) | 66.95 | | ERNIE 3.0-Medium+INT8 | 600.35(1.9x) | 56.57(-0.88) | 141.00(1.6x) | 92.64(-0.40) | 56.51(1.7x) | 66.23(-0.72) | | ERNIE 3.0-Medium+裁剪+FP32 | 408.65(1.3x) | 57.31(-0.14) | 122.13(1.3x) | 93.27(+0.23) | 48.47(1.4x) | 65.55(-1.40) | @@ -1516,10 +1515,10 @@ python compress_qa.py --model_name_or_path best_models/cmrc2018/ --dataset cmrc2 ##### GPU 性能 | | TNEWS 性能 | TNEWS 精度 | MSRA_NER 性能 | MSRA_NER 精度 | CMRC2018 性能 | CMRC2018 精度 | -| -------------------------- | ------------- | ------------ | ------------- | ------------- | ------------- | ------------- | +|----------------------------|---------------|--------------|---------------|---------------|---------------|---------------| | ERNIE 3.0-Medium+FP32 | 1123.85(1.0x) | 57.45 | 366.75(1.0x) | 93.04 | 146.84(1.0x) | 66.95 | | ERNIE 3.0-Medium+FP16 | 2672.41(2.4x) | 57.45(0.00) | 840.11(2.3x) | 93.05(0.01) | 303.43(2.1x) | 66.95(0.00) | -| ERNIE 3.0-Medium+INT8 | 3226.26(2.9x) | 56.99(-0.46) | 889.33(2.4x) | 92.70(-0.34) | 348.84(2.4x) | 66.32(-0.63 | +| ERNIE 3.0-Medium+INT8 | 3226.26(2.9x) | 56.99(-0.46) | 889.33(2.4x) | 92.70(-0.34) | 348.84(2.4x) | 66.32(-0.63) | | ERNIE 3.0-Medium+裁剪+FP32 | 1424.01(1.3x) | 57.31(-0.14) | 454.27(1.2x) | 93.27(+0.23) | 183.77(1.3x) | 65.92(-1.03) | | ERNIE 3.0-Medium+裁剪+FP16 | 3577.62(3.2x) | 57.27(-0.18) | 1138.77(3.1x) | 93.27(+0.23) | 445.71(3.0x) | 65.89(-1.06) | | ERNIE 3.0-Medium+裁剪+INT8 | 3635.48(3.2x) | 57.26(-0.19) | 1105.26(3.0x) | 93.20(+0.16) | 444.27(3.0x) | 66.17(-0.78) | @@ -1553,12 +1552,6 @@ python compress_qa.py --model_name_or_path best_models/cmrc2018/ --dataset cmrc2 Python 部署请参考:[Python 部署指南](./deploy/python/README.md) - - -#### C++ 部署 - -C++ 部署请参考:[C++ 部署指南](./deploy/cpp/README.md) - ### 服务化部署 diff --git a/legacy/model_zoo/ernie-3.0/deploy/README.md b/legacy/model_zoo/ernie-3.0/deploy/README.md index c08521440c3e..6ebd0956838c 100644 --- a/legacy/model_zoo/ernie-3.0/deploy/README.md +++ b/legacy/model_zoo/ernie-3.0/deploy/README.md @@ -115,5 +115,4 @@ ERNIE 3.0 模型支持 Python、C++ 部署以及 Serving 服务化部署。以下是详细文档。 - [Python 部署](python/README.md) -- [C++ 部署](cpp/README.md) - [Serving 部署](serving/README.md) diff --git a/legacy/model_zoo/ernie-3.0/deploy/python/README.md b/legacy/model_zoo/ernie-3.0/deploy/python/README.md index fac22fae62b1..b3c40f924fbd 100644 --- a/legacy/model_zoo/ernie-3.0/deploy/python/README.md +++ b/legacy/model_zoo/ernie-3.0/deploy/python/README.md @@ -243,5 +243,3 @@ FastDeploy 在 Python 端上,提供 `fastdeploy.RuntimeOption.use_xxx()` 以 ## 相关文档 [ERNIE 3.0模型详细介绍](../../README.md) - -[ERNIE 3.0模型C++部署方法](../cpp/README.md) diff --git a/legacy/model_zoo/ernie-code/README.md b/legacy/model_zoo/ernie-code/README.md index c64001bd2cbb..495fa08303cf 100644 --- a/legacy/model_zoo/ernie-code/README.md +++ b/legacy/model_zoo/ernie-code/README.md @@ -1,6 +1,6 @@ # ERNIE-Code -[ACL 2023 (Findings)](https://aclanthology.org/2023.findings-acl.676/) | [arXiv](https://arxiv.org/pdf/2212.06742) | [BibTex](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/ernie-code/README.md#bibtex) | [English version](./README.en.md) +[ACL 2023 (Findings)](https://aclanthology.org/2023.findings-acl.676/) | [arXiv](https://arxiv.org/pdf/2212.06742) | [BibTex](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/model_zoo/ernie-code#bibtex) | [English version](https://github.com/PaddlePaddle/PaddleNLP/blob/release/2.8/model_zoo/ernie-code/README.en.md) ![ernie-code-comp](https://github.com/KB-Ding/PaddleNLP/assets/13767887/2a550b46-a7d5-416d-b300-83cce7044be4) diff --git a/legacy/model_zoo/gpt-3/docs/standard.md b/legacy/model_zoo/gpt-3/docs/standard.md index 371d876e5640..3317a60d8785 100644 --- a/legacy/model_zoo/gpt-3/docs/standard.md +++ b/legacy/model_zoo/gpt-3/docs/standard.md @@ -325,4 +325,4 @@ Optimizer: ### 5.模型推理示例 模型训练完成后,可使用飞桨高性能推理引擎Paddle Inference通过如下方式进行推理部署。 -总共分为两个步骤:模型导出和推理部署。可以参考[GPT的模型推理](https://github.com/PaddlePaddle/PaddleFleetX/blob/develop/docs/inference.md)。 +总共分为两个步骤:模型导出和推理部署。可以参考[GPT的模型推理](https://github.com/PaddlePaddle/PaddleFleetX/blob/develop/projects/gpt/docs/inference.md)。 diff --git a/legacy/model_zoo/gpt-3/projects/gpt/docs/README.md b/legacy/model_zoo/gpt-3/projects/gpt/docs/README.md index 0d836d667438..2b2a342d18e5 100644 --- a/legacy/model_zoo/gpt-3/projects/gpt/docs/README.md +++ b/legacy/model_zoo/gpt-3/projects/gpt/docs/README.md @@ -6,8 +6,8 @@ GPT-[2](https://cdn.openai.com/better-language-models/language_models_are_unsupe 本项目是语言模型 GPT 的 PaddlePaddle 大模型实现。目前,PaddleFleetX 提供了 [GPT-345M](https://paddlefleetx.bj.bcebos.com/model/nlp/gpt/GPT_345M.tar.gz) 的预训练模型文件;分别基于 [LAMBADA](https://raw.githubusercontent.com/cybertronai/bflm/master/lambada_test.jsonl) 和 [WikiText](https://s3.amazonaws.com/research.metamind.io/wikitext/wikitext-103-v1.zip) 数据集,采用 ACC(accuracy) 和 PPL(perplexity) 指标后的评估结果如下: | **模型文件** | **ACC** | **PPL** | -|---------|-----------|---------------| -| GPT-345M | 44.17% | 18.01 | +|--------------|---------|---------| +| GPT-345M | 44.17% | 18.01 | 下面是本例的简要目录结构及说明: @@ -108,13 +108,13 @@ cd .. # 回到 PaddleFleetX 根目录下 ``` 其中参数对应的释义如下: -| **参数名** | **参数释义** | -|------------------------------|------------------------| -| device | 设备信息 | -| seed | 随机数种子 | +| **参数名** | **参数释义** | +|-------------------|------------------------------------------------------| +| device | 设备信息 | +| seed | 随机数种子 | | global_batch_size | 全局的batch size大小,即一次参数更新等效的batch size | -| local_batch_size | 每个进程训练的batch size大小 | -| micro_batch_size | 每次前向计算的batch size大小 | +| local_batch_size | 每个进程训练的batch size大小 | +| micro_batch_size | 每次前向计算的batch size大小 | ### Engine训练控制 @@ -145,29 +145,29 @@ Engine训练设置完成模型训练/验证/推理等过程中的参数设置, ``` 其中参数对应的释义如下: -| **参数名** | **参数释义** | -|------------------------------|------------------------| -| max_steps | 最大训练步数 | -| num_train_epochs | 训练的epoch数量 | -| accumulate_steps | 梯度累加次数 | -| logging_freq | 训练日志打印的频率 | -| eval_freq | 模型评估间隔 | -| eval_iters | 模型评估时训练评估测试集的轮数 | -| test_iters | 模型测试或推理时的轮数 | -| enable | 是否使用混合精度策略进行训练 | -| dtype | 混合精度训练数据类型使用float16还是bfloat16,默认为float16类型 | -| level | 混合精度训练模式,默认``O2``模式 | -| scale_loss | 使用fp16混合精度策略下,loss的放缩比例 | +| **参数名** | **参数释义** | +|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------| +| max_steps | 最大训练步数 | +| num_train_epochs | 训练的epoch数量 | +| accumulate_steps | 梯度累加次数 | +| logging_freq | 训练日志打印的频率 | +| eval_freq | 模型评估间隔 | +| eval_iters | 模型评估时训练评估测试集的轮数 | +| test_iters | 模型测试或推理时的轮数 | +| enable | 是否使用混合精度策略进行训练 | +| dtype | 混合精度训练数据类型使用float16还是bfloat16,默认为float16类型 | +| level | 混合精度训练模式,默认``O2``模式 | +| scale_loss | 使用fp16混合精度策略下,loss的放缩比例 | | custom_black_list | 自定义算子黑名单。这个名单中的算子在支持混合精度计算时会被认为是数值危险的,它们的影响也可能会在下游操作中观察到。这些算子通常不会转为float16/bfloat16计算 | | custom_white_list | 自定义算子白名单。这个名单中的算子在支持混合精度计算时会被认为是数值安全的,并且对性能至关重要。如果设置了白名单,该名单中的算子会使用float16/bfloat16计算 | -| save_steps | 保存模型间隔step数 | -| save_epoch | 保存模型间隔epoch数 | -| output_dir | 指定输出文件 | -| ckpt_dir | checkpoint的加载目录 | +| save_steps | 保存模型间隔step数 | +| save_epoch | 保存模型间隔epoch数 | +| output_dir | 指定输出文件 | +| ckpt_dir | checkpoint的加载目录 | ### 模型网络 -网络部分完成了网络的组网操作,GPT在[PaddleFleetX/ppfleetx/models/language_model/gpt/dygraph/single_model.py]((https://github.com/PaddlePaddle/PaddleFleetX/blob/develop/ppfleetx/models/language_model/gpt/dygraph/single_model.py))下。 +网络部分完成了网络的组网操作,GPT在[PaddleFleetX/ppfleetx/models/language_model/gpt/dygraph/single_model.py](https://github.com/PaddlePaddle/PaddleFleetX/blob/develop/ppfleetx/models/language_model/gpt/dygraph/single_model.py)下。 可以使用配置文件配置模型的规模,如: ```yaml @@ -193,26 +193,26 @@ Engine训练设置完成模型训练/验证/推理等过程中的参数设置, ``` 其中参数对应的释义如下: -| **参数名** | **参数释义** | -|------------------------------|------------------------| -| module | 指定GPT模型的执行模块 | -| vocab_size | 训练词表大小 | -| hidden_size | 隐藏层大小 | -| num_layers | transformer层数 | -| num_attention_heads | attention head的数量 | -| max_seq_len | 输入文本序列的长度 | -| ffn_hidden_size | ffn层大小,一般为隐藏层的四倍 | -| attention_probs_dropout_prob | attention中的dropout的失活率 | -| max_position_embeddings | position embedding的长度 | -| type_vocab_size | 词表类型 | -| initializer_range | 参数初始化的范围 | -| use_recompute | 是否使用recompute训练 | -| recompute_granularity | recompute训练的粒度,可选 `full` `full_attn` `core_attn`,full即recompute全部transformer,full_attn表明只recompute所有self attention部分,core_attn表明只recompute `softmax(qkT)v` 部分。注:显存占用方面,`core_attn` > `full_attn` > `full`,若所选策略产生OOM错误,可以适当更改recompute_granularity | -|no_recompute_layers| list of integer,标识哪些层的transformer不需要进行recompute。所有在该list中的值应该 >= 0 同时应该 < num_layers。向该参数中增加不进行recompute 的层数可以提升模型训练的整体吞吐,但是会适当的增加显存。若训练中发现有显存富裕,可以适当增加不进行recompute的层数。如果使用该参数后出现OOM错误,可以适当减小不进行recompute的层数。 | -| fused_linear | 是否使用fused_linear代替传统Linear加速训练。注:该功能需要cuda 11.6及以上编译的paddle支持。 | -| fuse_attn_qkv | 是否对attention层中的qkv计算使用fuse策略以加速训练 | -| sequence_parallel | 是否使用序列并行策略以加速训练。注:只有混合并行的GPT才支持该功能,它与张量模型并行共用通信组,当mp_degree=1时,序列并行策略会被强制关闭。 | -| virtual_pp_degree | 虚拟流水线并行维度,该参数会减小流水线bubble的占比以提升流水线的吞吐。但是该参数会增加流水线间的通讯,所以该参数的推荐值为2。并且,只有 num_layers可以被 pp_degree * virtual_pp_degree 整除时,才可以使用虚拟流水线并行。 | +| **参数名** | **参数释义** | +|------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| module | 指定GPT模型的执行模块 | | +| vocab_size | 训练词表大小 | +| hidden_size | 隐藏层大小 | +| num_layers | transformer层数 | +| num_attention_heads | attention head的数量 | +| max_seq_len | 输入文本序列的长度 | +| ffn_hidden_size | ffn层大小,一般为隐藏层的四倍 | +| attention_probs_dropout_prob | attention中的dropout的失活率 | +| max_position_embeddings | position embedding的长度 | +| type_vocab_size | 词表类型 | +| initializer_range | 参数初始化的范围 | +| use_recompute | 是否使用recompute训练 | +| recompute_granularity | recompute训练的粒度,可选 `full` `full_attn` `core_attn`,full即recompute全部transformer,full_attn表明只recompute所有self attention部分,core_attn表明只recompute `softmax(qkT)v` 部分。注:显存占用方面,`core_attn` > `full_attn` > `full`,若所选策略产生OOM错误,可以适当更改recompute_granularity | +| no_recompute_layers | list of integer,标识哪些层的transformer不需要进行recompute。所有在该list中的值应该 >= 0 同时应该 < num_layers。向该参数中增加不进行recompute 的层数可以提升模型训练的整体吞吐,但是会适当的增加显存。若训练中发现有显存富裕,可以适当增加不进行recompute的层数。如果使用该参数后出现OOM错误,可以适当减小不进行recompute的层数。 | | +| fused_linear | 是否使用fused_linear代替传统Linear加速训练。注:该功能需要cuda 11.6及以上编译的paddle支持。 | +| fuse_attn_qkv | 是否对attention层中的qkv计算使用fuse策略以加速训练 | +| sequence_parallel | 是否使用序列并行策略以加速训练。注:只有混合并行的GPT才支持该功能,它与张量模型并行共用通信组,当mp_degree=1时,序列并行策略会被强制关闭。 | +| virtual_pp_degree | 虚拟流水线并行维度,该参数会减小流水线bubble的占比以提升流水线的吞吐。但是该参数会增加流水线间的通讯,所以该参数的推荐值为2。并且,只有 num_layers可以被 pp_degree * virtual_pp_degree 整除时,才可以使用虚拟流水线并行。 | ### 数据集 数据集参数分为“Train”、“Eval”和“Test”三部分,分别对应模型预训练、离线评估、推理等三个模块。 @@ -238,18 +238,18 @@ Engine训练设置完成模型训练/验证/推理等过程中的参数设置, ``` 其中参数对应的释义如下: -| **参数名** | **参数释义** | -|------------------------------|------------------------| -| dataset.name | 指定自定义数据集的名称 | -| input_dir | 指定输入文件,可以使用目录,指定目录时将包括目录中的所有文件 | -| split | 训练集,验证集和测试集的切分比例 | -| max_seq_len | 输入文本序列的长度 | -| sampler.name | 指定自定义采样器的名称 | -| shuffle | 是否需要在生成样本下标时打乱顺序 | -| drop_last | 是否需要丢弃最后无法凑整一个mini-batch的样本 | -| num_workers | 用于加载数据的子进程个数 | -| return_list | 每个设备上的数据是否以list形式返回 | -| collate_fn | 通过此参数指定如果将样本列表组合为mini-batch数据;支持自定义 | +| **参数名** | **参数释义** | +|--------------|--------------------------------------------------------------| +| dataset.name | 指定自定义数据集的名称 | +| input_dir | 指定输入文件,可以使用目录,指定目录时将包括目录中的所有文件 | +| split | 训练集,验证集和测试集的切分比例 | +| max_seq_len | 输入文本序列的长度 | +| sampler.name | 指定自定义采样器的名称 | +| shuffle | 是否需要在生成样本下标时打乱顺序 | +| drop_last | 是否需要丢弃最后无法凑整一个mini-batch的样本 | +| num_workers | 用于加载数据的子进程个数 | +| return_list | 每个设备上的数据是否以list形式返回 | +| collate_fn | 通过此参数指定如果将样本列表组合为mini-batch数据;支持自定义 | ### 优化器 @@ -278,21 +278,21 @@ GPT训练默认使用AdamW优化器以及cosine学习率衰减,这里通过配 其中参数说明: -| **参数名** | **参数释义** | -|--------------|---------------------------| -| name | 指定自定义优化器的名称 | -| weight_decay | weight的衰减率 | -| beta1 | 一阶矩估计的指数衰减率 | -| beta2 | 二阶矩估计的指数衰减率 | -| epsilon | 指定优化器需要优化的参数 | -| lr.name | 指定自定义学习率策略的名称 | -| decay_steps | 衰减的步长 | -| warmup_rate | warmup 率 | -| max_lr | Adam 的初始最大学习率 | -| min_lr | Adam 的初始最小学习率 | -| grad_clip.name | 指定自定义梯度裁剪策略的名称 | -| clip_norm | 所允许的范数最大值 | -| tensor_fusion | 是否使用tensor_fustion功能加速训练 | +| **参数名** | **参数释义** | +|----------------|------------------------------------| +| name | 指定自定义优化器的名称 | +| weight_decay | weight的衰减率 | +| beta1 | 一阶矩估计的指数衰减率 | +| beta2 | 二阶矩估计的指数衰减率 | +| epsilon | 指定优化器需要优化的参数 | +| lr.name | 指定自定义学习率策略的名称 | +| decay_steps | 衰减的步长 | +| warmup_rate | warmup 率 | +| max_lr | Adam 的初始最大学习率 | +| min_lr | Adam 的初始最小学习率 | +| grad_clip.name | 指定自定义梯度裁剪策略的名称 | +| clip_norm | 所允许的范数最大值 | +| tensor_fusion | 是否使用tensor_fustion功能加速训练 | 另外,[Profiler](./hybrid_profiler.md)中还介绍了在 GPT 中开启 Profiler 并分析调试分析结果的方法及相关的参数解释。 diff --git a/legacy/model_zoo/gpt-3/projects/gpt/docs/auto_parallel.md b/legacy/model_zoo/gpt-3/projects/gpt/docs/auto_parallel.md index 4520716d4359..322099b967d3 100644 --- a/legacy/model_zoo/gpt-3/projects/gpt/docs/auto_parallel.md +++ b/legacy/model_zoo/gpt-3/projects/gpt/docs/auto_parallel.md @@ -19,13 +19,13 @@ Global: ``` 其中参数对应的释义如下: -| **参数名** | **参数释义** | -|--------------------------------|---------------------------| -| device | 设备信息 | -| seed | 随机数种子 | +| **参数名** | **参数释义** | +|-------------------|-------------------------------------------------------| +| device | 设备信息 | +| seed | 随机数种子 | | global_batch_size | 全局的batch size大小,即一次参数更新等效的 batch size | -| local_batch_size | 每个进程训练的batch size大小 | -| micro_batch_size | 每次前向计算的batch size大小 | +| local_batch_size | 每个进程训练的batch size大小 | +| micro_batch_size | 每次前向计算的batch size大小 | ### Engine训练控制 @@ -53,27 +53,27 @@ Engine训练设置完成模型训练/验证/推理等过程中的参数设置, 其中参数对应的释义如下: -| **参数名** | **参数释义** | -|-------------------|------------------------------------------| -| max_steps | 最大训练步数 | -| num_train_epochs | 训练的epoch数量 | -| logging_freq | 训练日志打印的频率 | -| eval_freq | 模型评估间隔,以epoch为粒度 | -| eval_iters | 模型评估时训练评估测试集的轮数 | -| test_iters | 模型测试或推理时的轮数 | -| enable | 是否使用混合精度的类型,可选: `True` `False` | -| dtype | 使用混合精度的类型,可选: `float16` `bfloat16`| -| level | 使用混合精度训练的等级,可选 `o1` `o2` `o3` | -| scale_loss | 使用混合精度float16下,loss的放缩比例 | +| **参数名** | **参数释义** | +|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| max_steps | 最大训练步数 | +| num_train_epochs | 训练的epoch数量 | +| logging_freq | 训练日志打印的频率 | +| eval_freq | 模型评估间隔,以epoch为粒度 | +| eval_iters | 模型评估时训练评估测试集的轮数 | +| test_iters | 模型测试或推理时的轮数 | +| enable | 是否使用混合精度的类型,可选: `True` `False` | +| dtype | 使用混合精度的类型,可选: `float16` `bfloat16` | +| level | 使用混合精度训练的等级,可选 `o1` `o2` `o3` | +| scale_loss | 使用混合精度float16下,loss的放缩比例 | | custom_black_list | 自定义算子黑名单。这个名单中的算子在支持float16/bfloat16计算时会被认为是数值危险的,它们的影响也可能会在下游操作中观察到。这些算子通常不会转为float16/bfloat16计算。 | -| custom_white_list | 自定义算子白名单。这个名单中的算子在支持float16/bfloat16计算时会被认为是数值安全的,并且对性能至关重要。如果设置了白名单,该名单中的算子会使用float16/bfloat16计算。| -| output_dir | 指定输出文件 | -| ckpt_dir | checkpoint的加载目录 | +| custom_white_list | 自定义算子白名单。这个名单中的算子在支持float16/bfloat16计算时会被认为是数值安全的,并且对性能至关重要。如果设置了白名单,该名单中的算子会使用float16/bfloat16计算。 | +| output_dir | 指定输出文件 | +| ckpt_dir | checkpoint的加载目录 | ### 模型网络 -网络部分完成了网络的组网操作,GPT在[PaddleFleetX/ppfleetx/models/language_model/gpt/auto/auto_model.py]((https://github.com/PaddlePaddle/PaddleFleetX/blob/develop/ppfleetx/models/language_model/gpt/auto/auto_model.py))下。 +网络部分完成了网络的组网操作,GPT在[PaddleFleetX/ppfleetx/models/language_model/gpt/auto/auto_model.py](https://github.com/PaddlePaddle/PaddleFleetX/blob/develop/ppfleetx/models/language_model/gpt/auto/auto_model.py)下。 可以使用配置文件配置模型的规模,如: ```yaml @@ -95,20 +95,20 @@ Engine训练设置完成模型训练/验证/推理等过程中的参数设置, ``` 其中参数对应的释义如下: -| **参数名** | **参数释义** | -|------------------------------|------------------------| -| module | 指定GPT模型的执行模块 | -| vocab_size | 训练词表大小 | -| hidden_size | 隐藏层大小 | -| num_layers | transformer层数 | -| num_attention_heads | attention head的数量 | -| max_seq_len | 输入文本序列的长度 | -| ffn_hidden_size | ffn层大小,一般为隐藏层的四倍 | -| attention_probs_dropout_prob | attention中的dropout的失活率 | -| max_position_embeddings | position embedding的长度 | -| type_vocab_size | 词表类型 | -| initializer_range | 参数初始化的范围 | -| use_recompute | 是否使用recompute训练,重计算全部transformer | +| **参数名** | **参数释义** | +|------------------------------|----------------------------------------------------------| +| module | 指定GPT模型的执行模块 | +| vocab_size | 训练词表大小 | +| hidden_size | 隐藏层大小 | +| num_layers | transformer层数 | +| num_attention_heads | attention head的数量 | +| max_seq_len | 输入文本序列的长度 | +| ffn_hidden_size | ffn层大小,一般为隐藏层的四倍 | +| attention_probs_dropout_prob | attention中的dropout的失活率 | +| max_position_embeddings | position embedding的长度 | +| type_vocab_size | 词表类型 | +| initializer_range | 参数初始化的范围 | +| use_recompute | 是否使用recompute训练,重计算全部transformer | | fuse_attn_qkv | 是否对attention层中qkv计算使用fuse代替传统Linear加速训练 | @@ -131,14 +131,14 @@ Engine训练设置完成模型训练/验证/推理等过程中的参数设置, ``` 其中参数对应的释义如下: -| **参数名** | **参数释义** | -|-------------------|------------------------| -| collate_fn | 通过此参数指定如果将样本列表组合为mini-batch数据;支持自定义 | -| sample_split | 通过此参数dataset返回的sample被组织为(inputs,labels) | -| dataset.name | 指定自定义数据集的名称 | -| input_dir | 指定输入文件,可以使用目录,指定目录时将包括目录中的所有文件 | -| split | 训练集,验证集和测试集的切分比例 | -| max_seq_len | 输入文本序列的长度 | +| **参数名** | **参数释义** | +|--------------|--------------------------------------------------------------| +| collate_fn | 通过此参数指定如果将样本列表组合为mini-batch数据;支持自定义 | +| sample_split | 通过此参数dataset返回的sample被组织为(inputs,labels) | +| dataset.name | 指定自定义数据集的名称 | +| input_dir | 指定输入文件,可以使用目录,指定目录时将包括目录中的所有文件 | +| split | 训练集,验证集和测试集的切分比例 | +| max_seq_len | 输入文本序列的长度 | ### 优化器 @@ -165,19 +165,19 @@ GPT训练默认使用AdamW优化器以及cosine学习率衰减,这里通过配 其中参数说明: -| **参数名** | **参数释义** | -|----------------|---------------------------| -| name | 指定自定义优化器的名称 | -| weight_decay | weight的衰减率 | -| beta1 | 一阶矩估计的指数衰减率 | -| beta2 | 二阶矩估计的指数衰减率 | -| epsilon | 指定优化器需要优化的参数 | -| lr.name | 指定自定义学习率策略的名称 | -| decay_steps | 衰减的步长 | -| warmup_rate | warmup 率 | +| **参数名** | **参数释义** | +|----------------|------------------------------| +| name | 指定自定义优化器的名称 | +| weight_decay | weight的衰减率 | +| beta1 | 一阶矩估计的指数衰减率 | +| beta2 | 二阶矩估计的指数衰减率 | +| epsilon | 指定优化器需要优化的参数 | +| lr.name | 指定自定义学习率策略的名称 | +| decay_steps | 衰减的步长 | +| warmup_rate | warmup 率 | | max_lr | Adam 的初始最大学习率 | | min_lr | Adam 的初始最小学习率 | -| grad_clip.name | 指定自定义梯度裁剪策略的名称 | +| grad_clip.name | 指定自定义梯度裁剪策略的名称 | | clip_norm | 所允许的范数最大值 | @@ -197,23 +197,23 @@ GPT训练默认使用AdamW优化器以及cosine学习率衰减,这里通过配 其中参数说明: -| **参数名** | **参数释义** | -|------------------|--------------------------------------| -| dp_degree | 数据并行维度 | -| mp_degree | 张量模型并行维度 | -| pp_degree | 流水线并行维度 | -| sharding_degree | 分组切分并行维度 | -| sharding_stage | 切分策略;1表示仅切分优化器状态,2表示再切分梯度,3表示再切分前向参数 | +| **参数名** | **参数释义** | +|-----------------|-----------------------------------------------------------------------| +| dp_degree | 数据并行维度 | +| mp_degree | 张量模型并行维度 | +| pp_degree | 流水线并行维度 | +| sharding_degree | 分组切分并行维度 | +| sharding_stage | 切分策略;1表示仅切分优化器状态,2表示再切分梯度,3表示再切分前向参数 | ## 运行方式 本目录按照345M、1.3B和6.7B规模大小,给出32G V100环境下GPT模型半自动并行训练的策略配置如下: -| 模型规模 | 训练策略 | yaml文件 | -|----------|---------------------------- |----------------------------------------| -| 345MB | 单卡+fp16 | pretrain_gpt_345M_single_card.yaml | -| 1.3B | dp8+fp16+recompute | pretrain_gpt_1.3B_dp8.yaml | -| 6.7B | sharding16+fp16+recompute | pretrain_gpt_6.7B_sharding16.yaml | +| 模型规模 | 训练策略 | yaml文件 | +|----------|---------------------------|------------------------------------| +| 345MB | 单卡+fp16 | pretrain_gpt_345M_single_card.yaml | +| 1.3B | dp8+fp16+recompute | pretrain_gpt_1.3B_dp8.yaml | +| 6.7B | sharding16+fp16+recompute | pretrain_gpt_6.7B_sharding16.yaml | 若要在显存容量更小的16G V100环境下进行GPT大模型训练,可将对应yaml文件中的`Model`-`hidden size`值改为原来的1/2即可。 @@ -247,7 +247,7 @@ python ./tools/auto.py -c ./ppfleetx/configs/nlp/gpt/auto/pretrain_gpt_1.3B_sing **启动命令** ```shell -cd PaddleNLP/model_zoo/gpt-3 # 如果已在 PaddleNLP/model_zoo/gpt-3 目录下,则忽略 +cd PaddleNLP/legacy/model_zoo/gpt-3 # 如果已在 PaddleNLP/model_zoo/gpt-3 目录下,则忽略 log_dir=log_auto python -m paddle.distributed.launch --log_dir $log_dir --devices "0,1,2,3,4,5,6,7" \ diff --git a/legacy/model_zoo/gpt-3/projects/gpt/docs/single_finetune.md b/legacy/model_zoo/gpt-3/projects/gpt/docs/single_finetune.md index ba581a807664..8a32ada25ec8 100644 --- a/legacy/model_zoo/gpt-3/projects/gpt/docs/single_finetune.md +++ b/legacy/model_zoo/gpt-3/projects/gpt/docs/single_finetune.md @@ -32,7 +32,7 @@ bash projects/gpt/finetune_gpt_345M_single_card.sh SST2 GLUE benchmark 包含 9 个数据集,分别是 **CoLA**、**SST-2**、**MRPC**、**QQP**、**STS-B**、**MNLI**、**QNLI**、**RTE**、**WNLI**,涉及到 **自然语言推断**,**文本蕴含**,**情感分析**,**语义相似** 等任务,整体可以归位 3 类,分别是单句任务:CoLA、SST-2;相似性:MRPC、QQP、STS-B;释义:MNLI、QNLI、RTE、WNLI。 -以下介绍载自 [huggingface](https://huggingface.co/datasets/glue/blob/main/glue.py). +以下介绍载自 [huggingface](https://huggingface.co/datasets/nyu-mll/glue). * CoLA: The Corpus of Linguistic Acceptability consists of English acceptability judgments drawn from books and journal articles on linguistic theory. Each example is a sequence of words annotated with whether it is a grammatical English sentence. * SST-2: The Stanford Sentiment Treebank consists of sentences from movie reviews and human annotations of their sentiment. The task is to predict the sentiment of a given sentence. We use the two-way (positive/negative) class split, and use only sentence-level labels. @@ -69,10 +69,10 @@ normal_(self.score.weight) ### Engine -| 参数字段 | 参数含义 | -| ------ | --------| -|run_mode| 运行的模式,需要设置为 epoch 方式| -|num_train_epochs| 需要 finetune 的 epoch 数 | +| 参数字段 | 参数含义 | +|------------------|-----------------------------------| +| run_mode | 运行的模式,需要设置为 epoch 方式 | +| num_train_epochs | 需要 finetune 的 epoch 数 | ``` Engine: @@ -82,15 +82,15 @@ Engine: ### Model -| 参数字段 | 参数含义 | -| ------ | --------| -|module| 需要设置为 "GPTFinetuneModule" | -|name | 需要设置为 "GPT" | -|num_classes | finetune 时的类别数,根据语料库以及任务来设定 | -|pretrained | 预训练的权重文件路径前缀,去掉 ".pdparams" | -|loss.train.name | finetune 时的训练损失函数类名 | -|loss.eval.name | finetune 时的验证损失函数类名 | -|metric.eval.name | finetune 时的验证评估函数类名 | +| 参数字段 | 参数含义 | +|------------------|-----------------------------------------------| +| module | 需要设置为 "GPTFinetuneModule" | +| name | 需要设置为 "GPT" | +| num_classes | finetune 时的类别数,根据语料库以及任务来设定 | +| pretrained | 预训练的权重文件路径前缀,去掉 ".pdparams" | +| loss.train.name | finetune 时的训练损失函数类名 | +| loss.eval.name | finetune 时的验证损失函数类名 | +| metric.eval.name | finetune 时的验证评估函数类名 | 微调时,不同任务对应的类别数 和 loss 函数以及评测指标不同,因此需要通过配置来改变设置。 ``` @@ -113,18 +113,18 @@ Model: ### Optimizer 和 LRScheduler -| 参数字段 | 参数含义 | -| ------ | --------| -|name| 优化器类名 | -|weight_decay| 权重衰减值 | -|beta1| FusedAdamW 的 beta1 | -|beta2| FusedAdamW 的 beta2 | -|epsilon| FusedAdamW 的 epsilon | -|multi_precision| 当使用 FP16 O2 级别时,是否开启参数使用多精度表示 | -|tensor_fusion| 是否开启 tensor_fusion | -|lr.name| 学习率调整策略类名 | -|lr.warmup| 当参数时小数时,表示 warmup 步数占总步数的比例,如果是整数时,则表示 warmup 的步数 | -|lr.learning_rate| 初始化学习率值 | +| 参数字段 | 参数含义 | +|------------------|------------------------------------------------------------------------------------| +| name | 优化器类名 | +| weight_decay | 权重衰减值 | +| beta1 | FusedAdamW 的 beta1 | +| beta2 | FusedAdamW 的 beta2 | +| epsilon | FusedAdamW 的 epsilon | +| multi_precision | 当使用 FP16 O2 级别时,是否开启参数使用多精度表示 | +| tensor_fusion | 是否开启 tensor_fusion | +| lr.name | 学习率调整策略类名 | +| lr.warmup | 当参数时小数时,表示 warmup 步数占总步数的比例,如果是整数时,则表示 warmup 的步数 | +| lr.learning_rate | 初始化学习率值 | 注:这里的超参会跟随优化器类的不同而不同,可以自行查看优化器类和学习率调整策略类初始化函数需要设置的超参数设定。 @@ -145,11 +145,11 @@ Optimizer: ### Data -| 参数字段 | 参数含义 | -| ------ | --------| -|Train.dataset| 描述 finetune 时的数据集 | -|Train.sampler| 描述 dataloader 所需要的 batch sampler | -|Train.loader| 描述 dataloader 所需要的相关信息,例如 num_workers 等 | +| 参数字段 | 参数含义 | +|---------------|-------------------------------------------------------| +| Train.dataset | 描述 finetune 时的数据集 | +| Train.sampler | 描述 dataloader 所需要的 batch sampler | +| Train.loader | 描述 dataloader 所需要的相关信息,例如 num_workers 等 | 注:数据集的设定会根据不同任务不同语料库不同而设定不同,例如 `split` 字段,不同数据集是有不同的设定,请参考所需要 finetune 的数据集初始化函数。 @@ -317,14 +317,14 @@ python ./tools/train.py -c ./ppfleetx/configs/nlp/gpt/finetune_gpt_345M_single_c 以下的指标是通过 [GPT_345M](https://paddlefleetx.bj.bcebos.com/model/nlp/gpt/GPT_345M.tar.gz) 预训练模型 finetune 得到的结果,仅作为参考。 -| Corpus | Task | Domanin | Metric | Result | -| ------ | ------------------- | ------------------ | ---------------------------- | ---------------------------- | -| CoLA | acceptability | Misc. | Matthews corr | 0.60471 | -| SST-2 | sentiment | Movie reviews | Accuracy | 0.93005 | -| MNLI | NLI | Misc. | Matched acc./Mismatched acc. | 0.84238/0.84815 | -| QNLI | QA/NLI | Wikipedia | Accuracy | 0.90445 | -| RTE | NLI | News, Wikipedia | Accuracy | 0.70397 | -| WNLI | coreference | Books | Accuracy | 0.40845 | -| MRPC | paraphrase | News | Accuracy/F1 | 0.81913/0.87022 | -| QQP | paraphrase | social QA question | Accuracy/F1 | 0.86087/0.81055 | -| STS-B | sentence similarity | Misc. | Pearson/Spearman corr. | 0.85797/0.85824 | +| Corpus | Task | Domanin | Metric | Result | +|--------|---------------------|--------------------|------------------------------|-----------------| +| CoLA | acceptability | Misc. | Matthews corr | 0.60471 | +| SST-2 | sentiment | Movie reviews | Accuracy | 0.93005 | +| MNLI | NLI | Misc. | Matched acc./Mismatched acc. | 0.84238/0.84815 | +| QNLI | QA/NLI | Wikipedia | Accuracy | 0.90445 | +| RTE | NLI | News, Wikipedia | Accuracy | 0.70397 | +| WNLI | coreference | Books | Accuracy | 0.40845 | +| MRPC | paraphrase | News | Accuracy/F1 | 0.81913/0.87022 | +| QQP | paraphrase | social QA question | Accuracy/F1 | 0.86087/0.81055 | +| STS-B | sentence similarity | Misc. | Pearson/Spearman corr. | 0.85797/0.85824 | diff --git a/legacy/model_zoo/gpt-3/projects/gpt/docs/structured_pruning.md b/legacy/model_zoo/gpt-3/projects/gpt/docs/structured_pruning.md index 9e23cf01a406..cbfb10677ae8 100644 --- a/legacy/model_zoo/gpt-3/projects/gpt/docs/structured_pruning.md +++ b/legacy/model_zoo/gpt-3/projects/gpt/docs/structured_pruning.md @@ -35,7 +35,7 @@ tar xf GPT_345M.tar.gz ### 稀疏训练 -- [345M模型稀疏训练](../gpt/prune_gpt_345M_single_card.sh) +- [345M模型稀疏训练](../prune_gpt_345M_single_card.sh) 快速启动: ```shell diff --git a/legacy/model_zoo/roberta/README.md b/legacy/model_zoo/roberta/README.md index b6e948386801..2de917e83213 100644 --- a/legacy/model_zoo/roberta/README.md +++ b/legacy/model_zoo/roberta/README.md @@ -77,7 +77,7 @@ https://github.com/PaddlePaddle/Paddle/blob/0ee230a7d3177f791d2a5388ab4dffdccc03 ## fine-tune -finetune代码请参考[benchmark_glue](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/benchmark/glue) +finetune代码请参考[benchmark_glue](../../examples/benchmark/glue) 运行如下: @@ -102,9 +102,9 @@ python -u ./run_glue.py \ ``` -总训练tokens:512(seq_len)* 32(batch_size) * 780000(iteration),约RoBERTa训练量10%,在GLUE validation set表现: +总训练tokens:512(seq_len) * 32(batch_size) * 780000(iteration),约RoBERTa训练量10%,在GLUE validation set表现: -| Model GLUE Score | CoLA | SST-2 | MRPC | STS-B | QQP | MNLI | QNLI | RTE | -|--------------------|-------|--------|--------|--------|--------|--------|--------|--------| -| RoBERTa paper | 68.0 | 96.4 | 90.9 | 92.4 | 92.2 | 90.2 | 94.7 | 86.6 | -| PaddleNLP 6-epoch | 36.9 | 89.5 | 84.3 | 86.2 | 88.6 | 80.5 | 88.4 | 58.1 | +| Model GLUE Score | CoLA | SST-2 | MRPC | STS-B | QQP | MNLI | QNLI | RTE | +|-------------------|------|-------|------|-------|------|------|------|------| +| RoBERTa paper | 68.0 | 96.4 | 90.9 | 92.4 | 92.2 | 90.2 | 94.7 | 86.6 | +| PaddleNLP 6-epoch | 36.9 | 89.5 | 84.3 | 86.2 | 88.6 | 80.5 | 88.4 | 58.1 | diff --git a/legacy/model_zoo/t5/README.md b/legacy/model_zoo/t5/README.md index 7f743228c412..68cd9f810845 100644 --- a/legacy/model_zoo/t5/README.md +++ b/legacy/model_zoo/t5/README.md @@ -18,7 +18,7 @@ #### 1. 数据准备 -数据流是预训练的非常重要的,[预处理文档](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/model_zoo/ernie-1.0/preprocess/README.md)提供了整体的数据变动的流程示意,用户可以查看数据制作的细节文档。 +数据流是预训练的非常重要的,[预处理文档](../../../llm/tools/preprocess/README.md)提供了整体的数据变动的流程示意,用户可以查看数据制作的细节文档。 在数据ID化步骤中,我们需要配置tokenzer_name,选择t5模型对应的tokenizer;通过下面脚本转化,我们可以得到处理好的预训练数据,token ids:[`t5_openwebtext.bin`](https://paddlenlp.bj.bcebos.com/models/transformers/t5/data/t5_openwebtext.bin), 文章索引信息[`t5_openwebtext.idx`](https://paddlenlp.bj.bcebos.com/models/transformers/t5/data/t5_openwebtext.idx).(这里提供了一个处理好的预训练数据,可点击链接下载) diff --git a/legacy/model_zoo/uie/README.md b/legacy/model_zoo/uie/README.md index 2580e319618f..d36f01550877 100644 --- a/legacy/model_zoo/uie/README.md +++ b/legacy/model_zoo/uie/README.md @@ -36,7 +36,7 @@ #### News 📢: UIE-X 🧾 -**全新升级UIE-X,除已有纯文本抽取的全部功能外,新增文档抽取能力**,欢迎体验 👉 [信息抽取应用](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/information_extraction/#readme) +**全新升级UIE-X,除已有纯文本抽取的全部功能外,新增文档抽取能力**,欢迎体验 👉 [信息抽取应用](../../applications/information_extraction) #### UIE的优势 @@ -629,7 +629,7 @@ python labelstudio2doccano.py --labelstudio_file label-studio.json #### 4.3 模型微调 -推荐使用 [Trainer API ](../../docs/trainer.md) 对模型进行微调。只需输入模型、数据集等就可以使用 Trainer API 高效快速地进行预训练、微调和模型压缩等任务,可以一键启动多卡训练、混合精度训练、梯度累积、断点重启、日志显示等功能,Trainer API 还针对训练过程的通用训练配置做了封装,比如:优化器、学习率调度等。 +推荐使用 [Trainer API ](../../../docs/trainer.md) 对模型进行微调。只需输入模型、数据集等就可以使用 Trainer API 高效快速地进行预训练、微调和模型压缩等任务,可以一键启动多卡训练、混合精度训练、梯度累积、断点重启、日志显示等功能,Trainer API 还针对训练过程的通用训练配置做了封装,比如:优化器、学习率调度等。 使用下面的命令,使用 `uie-base` 作为预训练模型进行模型微调,将微调后的模型保存至`$finetuned_model`: @@ -945,7 +945,7 @@ python deploy/python/infer.py --model_dir ./checkpoint/model_best --device gpu - 为了进一步探索通用信息抽取的边界,我们举办了**CCKS 2022 千言通用信息抽取竞赛评测**(2022/03/30 - 2022/07/31)。 - [报名链接](https://aistudio.baidu.com/aistudio/competition/detail/161/0/introduction) -- [基线代码](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/information_extraction/DuUIE) +- [基线代码](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/examples/information_extraction/DuUIE) ## References - **[Unified Structure Generation for Universal Information Extraction](https://arxiv.org/pdf/2203.12277.pdf)** diff --git a/legacy/pipelines/README.md b/legacy/pipelines/README.md index 5778158dff41..fa8e18ad5386 100644 --- a/legacy/pipelines/README.md +++ b/legacy/pipelines/README.md @@ -13,7 +13,7 @@ PaddleNLP Pipelines 是一个端到端NLP流水线系统框架,面向 NLP ** * **低门槛开发**:依托丰富的预置组件,像搭积木一样快速构建产品级系统,预置组件覆盖文档解析、数据处理、模型组网、预测部署、Web 服务、UI 界面等全流程系统功能。 -* **高精度预测**:基于前沿的预训练模型、成熟的系统方案,可构建效果领先的产品级系统,如[NLP流水线系统](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/pipelines#NLP流水线系统)中预置的语义检索系统、阅读理解式智能问答系统等。 +* **高精度预测**:基于前沿的预训练模型、成熟的系统方案,可构建效果领先的产品级系统,如[NLP流水线系统](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/pipelines#NLP流水线系统)中预置的语义检索系统、阅读理解式智能问答系统等。 * **灵活可定制**:除深度兼容 PaddleNLP 模型组件外,还可嵌入飞桨生态下任意模型、[AI 开放平台算子](https://ai.baidu.com/)、其它开源项目如 Elasticsearch 等作为基础组件,快速扩展,从而实现任意复杂系统的灵活定制开发。 @@ -29,9 +29,9 @@ PaddleNLP Pipelines 是一个端到端NLP流水线系统框架,面向 NLP ** PaddleNLP Pipelines NLP流水线系统针对 NLP 部分高频场景开源了经过充分打磨的产品级系统,并会不断开放其它场景的产品级系统,用户可以基于NLP流水线系统提供的系统能力快速开发出适配业务数据的产品。 -* 快速搭建产品级[**语义检索**](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/pipelines/examples/semantic-search)系统:使用自然语言文本通过语义进行智能文档查询,而不是关键字匹配 -* 快速搭建产品级[**智能问答**](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/pipelines/examples/question-answering)系统:用自然语言提问,即可获得精准答案片段 -* 快速搭建产品级 [**FAQ 问答**](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/pipelines/examples/FAQ)系统:用自然语言提问,匹配相关的高频问题,并返回匹配到的高频问题的答案 +* 快速搭建产品级[**语义检索**](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/pipelines/examples/semantic-search)系统:使用自然语言文本通过语义进行智能文档查询,而不是关键字匹配 +* 快速搭建产品级[**智能问答**](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/pipelines/examples/question-answering)系统:用自然语言提问,即可获得精准答案片段 +* 快速搭建产品级 [**FAQ 问答**](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/pipelines/examples/FAQ)系统:用自然语言提问,匹配相关的高频问题,并返回匹配到的高频问题的答案 ### 效果展示 @@ -55,14 +55,14 @@ PaddleNLP Pipelines NLP流水线系统针对 NLP 部分高频场景开源了经 | | | |-|-| -| :floppy_disk: [快速安装](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/pipelines#floppy_disk-安装) |安装 PaddleNLP Pipelines| -| :beginner: [快速体验](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/pipelines#beginner-快速体验) |基于 Pipelines 快速搭建语义检索/智能问答等产品系统| -| :man_office_worker: [用户案例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/pipelines#man_office_worker-用户案例) |各行业用户基于PaddleNLP Pipelinse 构建的产品案例| -| :mortar_board: [Tutorials](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/pipelines#mortar_board-tutorials) |像搭积木一样一步步构建 NLP 流水线系统教程| -| :bar_chart: [Benchmarks](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/pipelines/benchmarks) |针对各场景模型的性能、精度评测指标| +| :floppy_disk: [快速安装](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/pipelines#floppy_disk-安装) |安装 PaddleNLP Pipelines| +| :beginner: [快速体验](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/pipelines#beginner-快速体验) |基于 Pipelines 快速搭建语义检索/智能问答等产品系统| +| :man_office_worker: [用户案例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/pipelines#man_office_worker-用户案例) |各行业用户基于PaddleNLP Pipelinse 构建的产品案例| +| :mortar_board: [Tutorials](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/pipelines#mortar_board-tutorials) |像搭积木一样一步步构建 NLP 流水线系统教程| +| :bar_chart: [Benchmarks](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/pipelines/benchmarks) |针对各场景模型的性能、精度评测指标| | :telescope: [Roadmap](https://github.com/PaddlePaddle/PaddleNLP) | PaddleNLP Pipelines 产品路线图| | :newspaper: [技术博客](https://github.com/PaddlePaddle/PaddleNLP) | 阅读 PaddleNLP Pipelines 系列技术文章| -| :vulcan_salute: [社区交流](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/pipelines#vulcan_salute-社区交流) | [官方微信群](https://github.com/PaddlePaddle/PaddleNLP#社区交流), [GitHub Discussions](https://github.com/PaddlePaddle/PaddleNLP/discussions) | +| :vulcan_salute: [社区交流](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/pipelines#vulcan_salute-社区交流) | [官方微信群](https://github.com/PaddlePaddle/PaddleNLP#社区交流), [GitHub Discussions](https://github.com/PaddlePaddle/PaddleNLP/discussions) | ## :floppy_disk: 安装 Note: 因为 pipelines 依赖较多, 安装耗时大概 10 分钟左右,安装过程中请请耐心等待。 @@ -212,10 +212,10 @@ Pipelines可以服务化,通过HTTP接口的形式供其他程序进行调用 市面现已有的工程规范查询系统解决方案一直延续着传统关键字词匹配的查询方式,依赖用户对查询结果进行自行排序、筛选、鉴别,有时甚至还要再次由工程设计人员耗费一定时间精力人工查阅工程规范文件后,才能最终确认是否为想要查询的规范条款。传统规范查询系统至少需要进行 3~5 次查询才能找到用户想要的规范条款,而寻规系统是基于强大预训练模型构建起来的语义检索系统,针对 80% 的规范查询需求仅 **1 次查询** 就能精确命中查询意图,并返回真正符合工程设计人员查询意图的结果! ## :mortar_board: Tutorials -- Tutorial 1 - Pipelines [Windows视频安装教程](https://www.bilibili.com/video/BV1DY4y1M7HE/?zw) -- Tutorial 2 - 语义检索 Pipeline: [AIStudio notebook](https://aistudio.baidu.com/aistudio/projectdetail/4442670) | [Python](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/pipelines/examples/semantic-search/semantic_search_example.py) -- Tutorial 3 - 智能问答 Pipeline: [AIStudio notebook](https://aistudio.baidu.com/aistudio/projectdetail/4442857) | [Python](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/pipelines/examples/question-answering/dense_qa_example.py) -- Tutorial 4 - FAQ智能问答 Pipeline: [AIStudio notebook](https://aistudio.baidu.com/aistudio/projectdetail/4465498) | [Python](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/pipelines/examples/FAQ/dense_faq_example.py) +- Tutorial 1 - Pipelines [Windows视频安装教程](https://www.bilibili.com/video/BV1DY4y1M7HE) +- Tutorial 2 - 语义检索 Pipeline: [AIStudio notebook](https://aistudio.baidu.com/aistudio/projectdetail/4442670) | [Python](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/legacy/pipelines/examples/semantic-search/semantic_search_example.py) +- Tutorial 3 - 智能问答 Pipeline: [AIStudio notebook](https://aistudio.baidu.com/aistudio/projectdetail/4442857) | [Python](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/legacy/pipelines/examples/question-answering/dense_qa_example.py) +- Tutorial 4 - FAQ智能问答 Pipeline: [AIStudio notebook](https://aistudio.baidu.com/aistudio/projectdetail/4465498) | [Python](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/legacy/pipelines/examples/FAQ/dense_faq_example.py) - Tutorial 5 - Pipelines 快速上手二次开发教程: [AIStudio notebook](https://aistudio.baidu.com/aistudio/projectdetail/5011119) ## :vulcan_salute: 社区交流 微信扫描二维码并填写问卷之后,加入交流群与来自各行各业的小伙伴交流学习吧~ diff --git a/legacy/pipelines/benchmarks/README.md b/legacy/pipelines/benchmarks/README.md index 77a9cb8bd428..acbd8d2221f4 100644 --- a/legacy/pipelines/benchmarks/README.md +++ b/legacy/pipelines/benchmarks/README.md @@ -9,40 +9,40 @@ ### DualEncoder模型效果 -| 模型 | 模型规模 | MRR@10 | Recall@1 | Recall@50 | -| :--------------------------: | :-------------------------------: | :-------------: |:-------------: |:-------------: | -| rocketqa-baselines | 12-layer, 768-hidden | 56.45% |45.05% | 91.40%| -| rocketqa-zh-base-query-encoder&rocketqa-zh-base-para-encoder | 12-layer, 768-hidden | **59.14%** |**48.00%** | **92.15%**| -| rocketqa-zh-medium-query-encoder&rocketqa-zh-medium-para-encoder | 6-layer, 768-hidden | 53.92% |42.35% | 89.75%| -| rocketqa-zh-mini-query-encoder&rocketqa-zh-mini-para-encoder | 6-layer, 384-hidden | 44.97% |34.25% | 84.97%| -| rocketqa-zh-micro-query-encoder&rocketqa-zh-micro-para-encoder | 4-layer, 384-hidden | 40.22% |28.70% | 83.40% | -| rocketqa-zh-nano-query-encoder&rocketqa-zh-nano-para-encoder | 4-layer, 312-hidden | 38.07% |27.35% | 80.35%| +| 模型 | 模型规模 | MRR@10 | Recall@1 | Recall@50 | +|:----------------------------------------------------------------:|:--------------------:|:----------:|:----------:|:----------:| +| rocketqa-baselines | 12-layer, 768-hidden | 56.45% | 45.05% | 91.40% | +| rocketqa-zh-base-query-encoder&rocketqa-zh-base-para-encoder | 12-layer, 768-hidden | **59.14%** | **48.00%** | **92.15%** | +| rocketqa-zh-medium-query-encoder&rocketqa-zh-medium-para-encoder | 6-layer, 768-hidden | 53.92% | 42.35% | 89.75% | +| rocketqa-zh-mini-query-encoder&rocketqa-zh-mini-para-encoder | 6-layer, 384-hidden | 44.97% | 34.25% | 84.97% | +| rocketqa-zh-micro-query-encoder&rocketqa-zh-micro-para-encoder | 4-layer, 384-hidden | 40.22% | 28.70% | 83.40% | +| rocketqa-zh-nano-query-encoder&rocketqa-zh-nano-para-encoder | 4-layer, 312-hidden | 38.07% | 27.35% | 80.35% | ### CrossEncoder模型效果 -| 模型 | 模型规模 | MRR@10 | Recall@1 | Recall@50 | -| :--------------------------: | :-------------------------------: | :-------------: |:-------------: |:-------------: | -| rocketqa-baselines | 12-layer, 768-hidden | 65.62% |55.50% | 91.75%| -| rocketqa-base-cross-encoder| 12-layer, 768-hidden | **76.64%** |**70.05%** | **91.75%**| -| rocketqa-medium-cross-encoder | 6-layer, 768-hidden | 74.82% |67.30% | 91.75%| -| rocketqa-mini-cross-encoder | 6-layer, 384-hidden | 70.25% |60.85% | 91.75%| -| rocketqa-micro-cross-encoder | 4-layer, 384-hidden | 68.80% |59.35% | 91.75% | -| rocketqa-nano-cross-encoder | 4-layer, 312-hidden | 67.99% |58.25% | 91.75%| +| 模型 | 模型规模 | MRR@10 | Recall@1 | Recall@50 | +|:-----------------------------:|:--------------------:|:----------:|:----------:|:----------:| +| rocketqa-baselines | 12-layer, 768-hidden | 65.62% | 55.50% | 91.75% | +| rocketqa-base-cross-encoder | 12-layer, 768-hidden | **76.64%** | **70.05%** | **91.75%** | +| rocketqa-medium-cross-encoder | 6-layer, 768-hidden | 74.82% | 67.30% | 91.75% | +| rocketqa-mini-cross-encoder | 6-layer, 384-hidden | 70.25% | 60.85% | 91.75% | +| rocketqa-micro-cross-encoder | 4-layer, 384-hidden | 68.80% | 59.35% | 91.75% | +| rocketqa-nano-cross-encoder | 4-layer, 312-hidden | 67.99% | 58.25% | 91.75% | ## 模型性能 RocketQA系列的模型在GPU上能够达到ms级别的速度,一个query大概20ms左右,最快能够达到10ms,另外,为了验证在CPU上的速度,我们使用RocketQA系列的模型在CPU上测试了构建索引的时间,数据集是1398条,在cpu上的测试时间,以下cpu上的查询时间指的是在后台query发一次请求经过模型处理后得到结果的时间,包含召回和排序两部分,召回的文本数为30条。 -| 模型 | 模型规模 | 构建索引时间 | 查询一条文本时间 | -| :--------------------------: | :-------------------------------: | :-------------: |:-------------: | -| rocketqa-baselines | 12-layer, 768-hidden | 15min46s |10.04s/30条 | -| rocketqa-zh-base | 12-layer, 768-hidden | 15min54s |11.50s/30条 | -| rocketqa-zh-medium| 6-layer, 768-hidden | 7min54s | 5.39s/30条 | -| rocketqa-zh-mini | 6-layer, 384-hidden | 4min10s |4.02s/30条 | -| rocketqa-zh-micro | 4-layer, 384-hidden | 2min49s |3.0s/30条 | -| rocketqa-zh-nano | 4-layer, 312-hidden | 2min30s |2.84s/30条 | +| 模型 | 模型规模 | 构建索引时间 | 查询一条文本时间 | +|:------------------:|:--------------------:|:------------:|:----------------:| +| rocketqa-baselines | 12-layer, 768-hidden | 15min46s | 10.04s/30条 | +| rocketqa-zh-base | 12-layer, 768-hidden | 15min54s | 11.50s/30条 | +| rocketqa-zh-medium | 6-layer, 768-hidden | 7min54s | 5.39s/30条 | +| rocketqa-zh-mini | 6-layer, 384-hidden | 4min10s | 4.02s/30条 | +| rocketqa-zh-micro | 4-layer, 384-hidden | 2min49s | 3.0s/30条 | +| rocketqa-zh-nano | 4-layer, 312-hidden | 2min30s | 2.84s/30条 | 注意在测试速度的时候会有一些浮动,有很多因素会影响测试速度,比如 `elastic search`本身的性能,检索的文本数目,但总体的结论不会变。 diff --git a/legacy/pipelines/docs/index.md b/legacy/pipelines/docs/index.md index b7da5ef42200..141c2fa4e0c6 100644 --- a/legacy/pipelines/docs/index.md +++ b/legacy/pipelines/docs/index.md @@ -14,7 +14,7 @@ PaddleNLP Pipelines 是一个端到端NLP流水线系统框架,面向 NLP ** * **低门槛开发**:依托丰富的预置组件,像搭积木一样快速构建产品级系统,预置组件覆盖文档解析、数据处理、模型组网、预测部署、Web 服务、UI 界面等全流程系统功能。 -* **高精度预测**:基于前沿的预训练模型、成熟的系统方案,可构建效果领先的产品级系统,如[NLP流水线系统](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/pipelines#NLP流水线系统)中预置的语义检索系统、阅读理解式智能问答系统等。 +* **高精度预测**:基于前沿的预训练模型、成熟的系统方案,可构建效果领先的产品级系统,如[NLP流水线系统](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/pipelines#NLP流水线系统)中预置的语义检索系统、阅读理解式智能问答系统等。 * **灵活可定制**:除深度兼容 PaddleNLP 模型组件外,还可嵌入飞桨生态下任意模型、[AI 开放平台算子](https://ai.baidu.com/)、其它开源项目如 Elasticsearch 等作为基础组件,快速扩展,从而实现任意复杂系统的灵活定制开发。 @@ -24,15 +24,15 @@ PaddleNLP Pipelines 是一个端到端NLP流水线系统框架,面向 NLP ** -更多的Benchmarks的信息请参考文档[Benchmarks](./benchmarks/README.md) +更多的Benchmarks的信息请参考文档[Benchmarks](../benchmarks/README.md) ## NLP流水线系统 PaddleNLP Pipelines NLP流水线系统针对 NLP 部分高频场景开源了经过充分打磨的产品级系统,并会不断开放其它场景的产品级系统,用户可以基于NLP流水线系统提供的系统能力快速开发出适配业务数据的产品。 -* 快速搭建产品级[**语义检索**](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/pipelines/examples/semantic-search)系统:使用自然语言文本通过语义进行智能文档查询,而不是关键字匹配 -* 快速搭建产品级[**智能问答**](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/pipelines/examples/question-answering)系统:用自然语言提问,即可获得精准答案片段 -* 快速搭建产品级 [**FAQ 问答**](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/pipelines/examples/FAQ)系统:用自然语言提问,匹配相关的高频问题,并返回匹配到的高频问题的答案 +* 快速搭建产品级[**语义检索**](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/pipelines/examples/semantic-search)系统:使用自然语言文本通过语义进行智能文档查询,而不是关键字匹配 +* 快速搭建产品级[**智能问答**](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/pipelines/examples/question-answering)系统:用自然语言提问,即可获得精准答案片段 +* 快速搭建产品级 [**FAQ 问答**](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/pipelines/examples/FAQ)系统:用自然语言提问,匹配相关的高频问题,并返回匹配到的高频问题的答案 ### 效果展示 @@ -54,16 +54,16 @@ PaddleNLP Pipelines NLP流水线系统针对 NLP 部分高频场景开源了经 -| | | -|-|-| -| :floppy_disk: [快速安装](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/pipelines#floppy_disk-安装) |安装 PaddleNLP Pipelines| -| :beginner: [快速体验](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/pipelines#beginner-快速体验) |基于 Pipelines 快速搭建语义检索/智能问答等产品系统| -| :man_office_worker: [用户案例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/pipelines#man_office_worker-用户案例) |各行业用户基于PaddleNLP Pipelinse 构建的产品案例| -| :mortar_board: [Tutorials](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/pipelines#mortar_board-tutorials) |像搭积木一样一步步构建 NLP 流水线系统教程| -| :bar_chart: [Benchmarks](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/pipelines/benchmarks) |针对各场景模型的性能、精度评测指标| -| :telescope: [Roadmap](https://github.com/PaddlePaddle/PaddleNLP) | PaddleNLP Pipelines 产品路线图| -| :newspaper: [技术博客](https://github.com/PaddlePaddle/PaddleNLP) | 阅读 PaddleNLP Pipelines 系列技术文章| -| :vulcan_salute: [社区交流](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/pipelines#vulcan_salute-社区交流) | [官方微信群](https://github.com/PaddlePaddle/PaddleNLP#社区交流), [GitHub Discussions](https://github.com/PaddlePaddle/PaddleNLP/discussions) | +| | | +|------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------| +| :floppy_disk: [快速安装](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/pipelines#floppy_disk-安装) | 安装 PaddleNLP Pipelines | +| :beginner: [快速体验](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/pipelines#beginner-快速体验) | 基于 Pipelines 快速搭建语义检索/智能问答等产品系统 | +| :man_office_worker: [用户案例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/pipelines#man_office_worker-用户案例) | 各行业用户基于PaddleNLP Pipelinse 构建的产品案例 | +| :mortar_board: [Tutorials](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/pipelines#mortar_board-tutorials) | 像搭积木一样一步步构建 NLP 流水线系统教程 | +| :bar_chart: [Benchmarks](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/pipelines/benchmarks) | 针对各场景模型的性能、精度评测指标 | +| :telescope: [Roadmap](https://github.com/PaddlePaddle/PaddleNLP) | PaddleNLP Pipelines 产品路线图 | +| :newspaper: [技术博客](https://github.com/PaddlePaddle/PaddleNLP) | 阅读 PaddleNLP Pipelines 系列技术文章 | +| :vulcan_salute: [社区交流](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/pipelines#vulcan_salute-社区交流) | [官方微信群](https://github.com/PaddlePaddle/PaddleNLP#社区交流), [GitHub Discussions](https://github.com/PaddlePaddle/PaddleNLP/discussions) | ## :floppy_disk: 安装 Note: 因为 pipelines 依赖较多, 安装耗时大概 10 分钟左右,安装过程中请请耐心等待。 @@ -170,23 +170,23 @@ GPU 镜像下载大概耗时 15 分钟左右,容器启动成功后,等待1 对于国内用户,因为网络问题下载docker比较慢时,可使用百度提供的镜像: -| 环境 | 镜像 Tag | 运行平台 | -| :--------------------------: | :-------------------------------: | :-------------: | -| CPU | registry.baidubce.com/paddlepaddle/paddlenlp:2.4.0 | Linux | -| CPU | registry.baidubce.com/paddlepaddle/paddlenlp:2.4.0.windows.darwin | Windows&Macos | -| CUDA10.2 + cuDNN 7 | registry.baidubce.com/paddlepaddle/paddlenlp:2.4.0-gpu-cuda10.2-cudnn7 | Linux | -| CUDA11.2 + cuDNN 8 | registry.baidubce.com/paddlepaddle/paddlenlp:2.4.0-gpu-cuda11.2-cudnn8 | Linux | +| 环境 | 镜像 Tag | 运行平台 | +|:------------------:|:----------------------------------------------------------------------:|:-------------:| +| CPU | registry.baidubce.com/paddlepaddle/paddlenlp:2.4.0 | Linux | +| CPU | registry.baidubce.com/paddlepaddle/paddlenlp:2.4.0.windows.darwin | Windows&Macos | +| CUDA10.2 + cuDNN 7 | registry.baidubce.com/paddlepaddle/paddlenlp:2.4.0-gpu-cuda10.2-cudnn7 | Linux | +| CUDA11.2 + cuDNN 8 | registry.baidubce.com/paddlepaddle/paddlenlp:2.4.0-gpu-cuda11.2-cudnn8 | Linux | 如果您的机器不在中国大陆地区,我们推荐您使用DockerHub的镜像: -| 环境 | 镜像 Tag | 运行平台 | -| :--------------------------: | :-------------------------------: | :-------------: | -| CPU | paddlepaddle/paddlenlp:2.4.0 | Linux | -| CPU | paddlepaddle/paddlenlp:2.4.0.windows.darwin | Windows&Macos | -| CUDA10.2 + cuDNN 7 | paddlepaddle/paddlenlp:2.4.0-gpu-cuda10.2-cudnn7 | Linux | -| CUDA11.2 + cuDNN 8 | paddlepaddle/paddlenlp:2.4.0-gpu-cuda11.2-cudnn8 | Linux | +| 环境 | 镜像 Tag | 运行平台 | +|:------------------:|:------------------------------------------------:|:-------------:| +| CPU | paddlepaddle/paddlenlp:2.4.0 | Linux | +| CPU | paddlepaddle/paddlenlp:2.4.0.windows.darwin | Windows&Macos | +| CUDA10.2 + cuDNN 7 | paddlepaddle/paddlenlp:2.4.0-gpu-cuda10.2-cudnn7 | Linux | +| CUDA11.2 + cuDNN 8 | paddlepaddle/paddlenlp:2.4.0-gpu-cuda11.2-cudnn8 | Linux | -对于智能问答应用,请参考Docker文档[docker文档](./docker/README.md),只需做少量的修改,就可以完成智能问答应用的部署。 +对于智能问答应用,请参考Docker文档[docker文档](../docker/README.md),只需做少量的修改,就可以完成智能问答应用的部署。 #### REST API @@ -212,10 +212,10 @@ Pipelines可以服务化,通过HTTP接口的形式供其他程序进行调用 市面现已有的工程规范查询系统解决方案一直延续着传统关键字词匹配的查询方式,依赖用户对查询结果进行自行排序、筛选、鉴别,有时甚至还要再次由工程设计人员耗费一定时间精力人工查阅工程规范文件后,才能最终确认是否为想要查询的规范条款。传统规范查询系统至少需要进行 3~5 次查询才能找到用户想要的规范条款,而寻规系统是基于强大预训练模型构建起来的语义检索系统,针对 80% 的规范查询需求仅 **1 次查询** 就能精确命中查询意图,并返回真正符合工程设计人员查询意图的结果! ## :mortar_board: Tutorials -- Tutorial 1 - Pipelines [Windows视频安装教程](https://www.bilibili.com/video/BV1DY4y1M7HE/?zw) -- Tutorial 2 - 语义检索 Pipeline: [AIStudio notebook](https://aistudio.baidu.com/aistudio/projectdetail/4442670) | [Python](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/pipelines/examples/semantic-search/semantic_search_example.py) -- Tutorial 3 - 智能问答 Pipeline: [AIStudio notebook](https://aistudio.baidu.com/aistudio/projectdetail/4442857) | [Python](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/pipelines/examples/question-answering/dense_qa_example.py) -- Tutorial 4 - FAQ智能问答 Pipeline: [AIStudio notebook](https://aistudio.baidu.com/aistudio/projectdetail/4465498) | [Python](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/pipelines/examples/FAQ/dense_faq_example.py) +- Tutorial 1 - Pipelines [Windows视频安装教程](https://www.bilibili.com/video/BV1DY4y1M7HE) +- Tutorial 2 - 语义检索 Pipeline: [AIStudio notebook](https://aistudio.baidu.com/aistudio/projectdetail/4442670) | [Python](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/legacy/pipelines/examples/semantic-search/semantic_search_example.py) +- Tutorial 3 - 智能问答 Pipeline: [AIStudio notebook](https://aistudio.baidu.com/aistudio/projectdetail/4442857) | [Python](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/legacy/pipelines/examples/question-answering/dense_qa_example.py) +- Tutorial 4 - FAQ智能问答 Pipeline: [AIStudio notebook](https://aistudio.baidu.com/aistudio/projectdetail/4465498) | [Python](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/legacy/pipelines/examples/FAQ/dense_faq_example.py) - Tutorial 5 - Pipelines 快速上手二次开发教程: [AIStudio notebook](https://aistudio.baidu.com/aistudio/projectdetail/5011119) ## :vulcan_salute: 社区交流 微信扫描二维码并填写问卷之后,加入交流群与来自各行各业的小伙伴交流学习吧~ diff --git a/legacy/pipelines/examples/FAQ/README.md b/legacy/pipelines/examples/FAQ/README.md index 82ac186622a8..703052e46e51 100644 --- a/legacy/pipelines/examples/FAQ/README.md +++ b/legacy/pipelines/examples/FAQ/README.md @@ -6,7 +6,7 @@ ## 2. 产品功能介绍 -本项目提供了低成本搭建端到端FAQ智能问答的能力。用户只需要处理好自己的业务数据,就可以使用本项目预置的检索系统模型(召回模型、排序模型)快速搭建一个针对自己业务数据的问答系统,并可以提供 Web 化产品服务。以下是使用预置模型的教程,如果用户想训练并接入自己训练的模型,模型训练可以参考[FAQ Finance](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/question_answering/supervised_qa/faq_finance),模型的接入流程参考Pipelines语义检索中Neural Search模型接入流程即可。 +本项目提供了低成本搭建端到端FAQ智能问答的能力。用户只需要处理好自己的业务数据,就可以使用本项目预置的检索系统模型(召回模型、排序模型)快速搭建一个针对自己业务数据的问答系统,并可以提供 Web 化产品服务。以下是使用预置模型的教程,如果用户想训练并接入自己训练的模型,模型训练可以参考[FAQ Finance](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.8/applications/question_answering/supervised_qa/faq_finance),模型的接入流程参考Pipelines语义检索中Neural Search模型接入流程即可。
diff --git a/legacy/pipelines/examples/question-answering/README.md b/legacy/pipelines/examples/question-answering/README.md index cda8257233d5..4e46d864fed0 100644 --- a/legacy/pipelines/examples/question-answering/README.md +++ b/legacy/pipelines/examples/question-answering/README.md @@ -12,7 +12,7 @@ ## 2. 产品功能介绍 -本项目提供了低成本搭建端到端问答系统的能力。用户只需要处理好自己的业务数据,就可以使用本项目预置的问答系统模型(召回模型、排序模型、阅读理解模型)快速搭建一个针对自己业务数据的问答系统,并可以提供基于[Streamlit](https://streamlit.io/) 的 Web 可视化服务。以下是使用预置模型的教程,如果用户想训练并接入自己训练的模型,对于召回和排序模型训练可以参考[Neural Search](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/neural_search),对于其中的答案抽取模型,训练教程请参考[machine_reading_comprehension](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/machine_reading_comprehension/DuReader-robust),召回和排序模型接入流程参考语义检索的Neural Search接入流程即可,阅读理解模型只需要在加载模型的时候,把模型名称换成您的模型的路径即可。 +本项目提供了低成本搭建端到端问答系统的能力。用户只需要处理好自己的业务数据,就可以使用本项目预置的问答系统模型(召回模型、排序模型、阅读理解模型)快速搭建一个针对自己业务数据的问答系统,并可以提供基于[Streamlit](https://streamlit.io/) 的 Web 可视化服务。以下是使用预置模型的教程,如果用户想训练并接入自己训练的模型,对于召回和排序模型训练可以参考[Neural Search](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/applications/neural_search),对于其中的答案抽取模型,训练教程请参考[machine_reading_comprehension](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/examples/machine_reading_comprehension/DuReader-robust),召回和排序模型接入流程参考语义检索的Neural Search接入流程即可,阅读理解模型只需要在加载模型的时候,把模型名称换成您的模型的路径即可。
diff --git a/legacy/pipelines/examples/semantic-search/Multi_Recall.md b/legacy/pipelines/examples/semantic-search/Multi_Recall.md index 014f7bef233e..5627614090f2 100644 --- a/legacy/pipelines/examples/semantic-search/Multi_Recall.md +++ b/legacy/pipelines/examples/semantic-search/Multi_Recall.md @@ -54,7 +54,7 @@ cd PaddleNLP/pipelines 【注意】 -- Windows的安装复杂一点,教程请参考:[Windows视频安装教程](https://www.bilibili.com/video/BV1DY4y1M7HE/?zw) +- Windows的安装复杂一点,教程请参考:[Windows视频安装教程](https://www.bilibili.com/video/BV1DY4y1M7HE) - 以下的所有的流程都只需要在`pipelines`根目录下进行,不需要跳转目录 ### 3.2 数据说明 diff --git a/legacy/pipelines/examples/semantic-search/README.md b/legacy/pipelines/examples/semantic-search/README.md index e3295dd12a11..d2547ccc23d7 100644 --- a/legacy/pipelines/examples/semantic-search/README.md +++ b/legacy/pipelines/examples/semantic-search/README.md @@ -17,7 +17,7 @@ ## 2. 产品功能介绍 -本项目提供了低成本搭建端到端语义检索系统的能力。用户只需要处理好自己的业务数据,就可以使用本项目预置的语义检索系统模型(召回模型、排序模型)快速搭建一个针对自己业务数据的问答系统,并可以提供 Web 化产品服务。以下是使用预置模型的教程,如果用户想训练并接入自己训练的模型,模型训练可以参考[Neural Search](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/neural_search),接入流程可以参考[Neural Search的流程](./Neural_Search.md)。 +本项目提供了低成本搭建端到端语义检索系统的能力。用户只需要处理好自己的业务数据,就可以使用本项目预置的语义检索系统模型(召回模型、排序模型)快速搭建一个针对自己业务数据的问答系统,并可以提供 Web 化产品服务。以下是使用预置模型的教程,如果用户想训练并接入自己训练的模型,模型训练可以参考[Neural Search](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/applications/neural_search),接入流程可以参考[Neural Search的流程](./Neural_Search.md)。
diff --git a/legacy/pipelines/mkdocs.yml b/legacy/pipelines/mkdocs.yml index df7e9af0a261..585537d1a5f8 100644 --- a/legacy/pipelines/mkdocs.yml +++ b/legacy/pipelines/mkdocs.yml @@ -1,5 +1,5 @@ site_name: PaddleNLP-Pipelines -repo_url: https://github.com/PaddlePaddle/PaddleNLP/tree/develop/pipelines +repo_url: https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/pipelines repo_name: PaddleNLP-Pipelines site_url: https://paddlenlp-pipelines.readthedocs.io/zh-cn/latest/ site_description: provides an easy-to-use paddlenlp application tool suite. diff --git a/llm/README.md b/llm/README.md index c3009a1ceab2..805dbdd01940 100644 --- a/llm/README.md +++ b/llm/README.md @@ -19,17 +19,17 @@ ## 🛠️ 支持模型列表 🛠️ -| Model | Pretrain | SFT | LoRA | Prefix Tuning | DPO | Quantization | Weight convert | -| --- | --- | --- | --- | --- | --- | --- | --- | -| [LLaMA](./llama) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Qwen](./qwen) | ✅ | ✅ | ✅ | ✅ | ✅ | 🚧 | ✅ | -| [Mixtral](./mixtral) | ✅ | ✅ | ✅ | ❌ | 🚧 |🚧 | 🚧 | -| [Baichuan/Baichuan2](./llama) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [ChatGLM-6B](./chatglm) | ❌ | ✅ | ✅ | ✅ | 🚧 | ✅ | ❌ | -| [ChatGLM2/ChatGLM3](./chatglm2) | ❌ | ✅ | ✅ | ✅ | 🚧 | ✅ | ✅ | -| [Bloom](./bloom) | ❌ | ✅ | ✅ | ✅ |🚧 | ✅ | ✅ | -| [GPT-3](./gpt-3) | ✅ | ✅ | 🚧 | 🚧 |🚧 | 🚧 | ✅ | -| [OPT](./opt) | 🚧 | ✅ | ✅ | 🚧 | 🚧 |🚧 | ✅ | +| Model | Pretrain | SFT | LoRA | Prefix Tuning | DPO | Quantization | Weight convert | +|----------------------------------------|----------|-----|------|---------------|-----|--------------|----------------| +| [LLaMA](./config/llama) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [Qwen](./config/qwen) | ✅ | ✅ | ✅ | ✅ | ✅ | 🚧 | ✅ | +| [Mixtral](./config/mixtral) | ✅ | ✅ | ✅ | ❌ | 🚧 | 🚧 | 🚧 | +| [Baichuan/Baichuan2](./config/llama) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [ChatGLM-6B](./config/chatglm) | ❌ | ✅ | ✅ | ✅ | 🚧 | ✅ | ❌ | +| [ChatGLM2/ChatGLM3](./config/chatglm2) | ❌ | ✅ | ✅ | ✅ | 🚧 | ✅ | ✅ | +| [Bloom](./config/bloom) | ❌ | ✅ | ✅ | ✅ | 🚧 | ✅ | ✅ | +| [GPT-3](./config/gpt-3) | ✅ | ✅ | 🚧 | 🚧 | 🚧 | 🚧 | ✅ | +| [OPT](./config/opt) | 🚧 | ✅ | ✅ | 🚧 | 🚧 | 🚧 | ✅ | * ✅: Supported * 🚧: In Progress @@ -39,7 +39,7 @@ ## 🚀 快速开始 🚀 ### 1. 预训练 -PaddleNLP将飞桨4D并行策略加入到Trainer API中, 用户只需修改Trainer配置即可使用不同的分布式策略。目前工具链提供[LLaMA/LLaMA2](./llama)、[GPT-3](./gpt-3)、[Qwen](./qwen)、[Baichuan/Baichuan2](./llama)、[Mixtral](./mixtral) 等模型预训练功能,更多模型支持持续更新中。 +PaddleNLP将飞桨4D并行策略加入到Trainer API中, 用户只需修改Trainer配置即可使用不同的分布式策略。目前工具链提供[LLaMA/LLaMA2](./config/llama)、[GPT-3](./config/gpt-3)、[Qwen](./config/qwen)、[Baichuan/Baichuan2](./config/baichuan)、[Mixtral](./config/mixtral) 等模型预训练功能,更多模型支持持续更新中。
llm @@ -51,7 +51,7 @@ PaddleNLP将飞桨4D并行策略加入到Trainer API中, 用户只需修改Tra
-我们在此处提供了更详细的[预训练数据制作](),[分布式策略支持情况]( https://paddlenlp.readthedocs.io/zh/latest/llm/pretraining/index.html#model-capability),[性能测试报告文档](https://paddlenlp.readthedocs.io/zh/latest/llm/pretraining/index.html#model-performance),参见: https://paddlenlp.readthedocs.io/zh/latest/llm/pretraining/index.html. 大模型权重列表参见[此处](https://paddlenlp.readthedocs.io/zh/latest/llm/pretraining/index.html#model-weight) +我们在此处提供了更详细的[预训练数据制作](),[分布式策略支持情况](https://paddlenlp.readthedocs.io/zh/latest/llm/pretraining/index.html#model-capability),[性能测试报告文档](https://paddlenlp.readthedocs.io/zh/latest/llm/pretraining/index.html#model-performance),参见: https://paddlenlp.readthedocs.io/zh/latest/llm/pretraining/index.html. 大模型权重列表参见[此处](https://paddlenlp.readthedocs.io/zh/latest/llm/pretraining/index.html#model-weight) 此项目支持了LLaMA、GPT-3、BaiChuan、Qwen、Mixtral 等大模型的预训练。用户切换配置config文件,即可一键运行。 @@ -79,7 +79,7 @@ mv llama_openwebtext_100k.idx ./data ```shell # 编译自定义算子,可选 -cd ..legacy/model_zoo/gpt-3/external_ops/ && python3 setup.py install && cd - +cd ../legacy/model_zoo/gpt-3/external_ops/ && python3 setup.py install && cd - # 模型预训练参考 python -u -m paddle.distributed.launch --gpus "0,1,2,3,4,5,6,7" run_pretrain.py ./config/llama/pretrain_argument.json diff --git a/llm/config/baichuan/README.md b/llm/config/baichuan/README.md index 98bf760a6caa..8da936f0c1f9 100644 --- a/llm/config/baichuan/README.md +++ b/llm/config/baichuan/README.md @@ -4,12 +4,12 @@ **支持模型权重:** -| Model | -| ---------------------------------| -| baichuan-inc/Baichuan-7B | -| baichuan-inc/Baichuan-13B-Base | -| baichuan-inc/Baichuan-13B-Chat | -| baichuan-inc/Baichuan2-7B-Base | -| baichuan-inc/Baichuan2-7B-Chat | -| baichuan-inc/Baichuan2-13B-Base | -| baichuan-inc/Baichuan2-13B-Chat | +| Model | +|---------------------------------| +| baichuan-inc/Baichuan-7B | +| baichuan-inc/Baichuan-13B-Base | +| baichuan-inc/Baichuan-13B-Chat | +| baichuan-inc/Baichuan2-7B-Base | +| baichuan-inc/Baichuan2-7B-Chat | +| baichuan-inc/Baichuan2-13B-Base | +| baichuan-inc/Baichuan2-13B-Chat | diff --git a/llm/config/bloom/README.md b/llm/config/bloom/README.md index 52311561818a..9d214b47a356 100644 --- a/llm/config/bloom/README.md +++ b/llm/config/bloom/README.md @@ -6,17 +6,17 @@ BLOOM是一种自回归大型语言模型(LLM),在大量文本数据上训练从而生生成目标文本,同时它能够支持46种语言和13种编程语言的文本交互。BLOOM 主要基于文本生成任务训练而成,可以很好的完成文本续写任务,此外 BloomZ 系列模型加入了 Instruction Tuning。 **支持模型权重:** -| Model | -|----------------------------------| -| bigscience/bloom-560m | -| bigscience/bloom-560m-bf16 | -| bigscience/bloom-1b1/ | -| bigscience/bloom-3b | -| bigscience/bloom-7b1 | -| bigscience/bloomz-560m/ | -| bigscience/bloomz-1b1 | -| bigscience/bloomz-3b | -| bigscience/bloomz-7b1-mt | -| bigscience/bloomz-7b1-p3 | -| bigscience/bloomz-7b1 | -| bellegroup/belle-7b-2m | +| Model | +|----------------------------| +| bigscience/bloom-560m | +| bigscience/bloom-560m-bf16 | +| bigscience/bloom-1b1/ | +| bigscience/bloom-3b | +| bigscience/bloom-7b1 | +| bigscience/bloomz-560m/ | +| bigscience/bloomz-1b1 | +| bigscience/bloomz-3b | +| bigscience/bloomz-7b1-mt | +| bigscience/bloomz-7b1-p3 | +| bigscience/bloomz-7b1 | +| bellegroup/belle-7b-2m | diff --git a/llm/config/chatglm/README.md b/llm/config/chatglm/README.md index c8cfb4f8b28b..76c4998309f3 100644 --- a/llm/config/chatglm/README.md +++ b/llm/config/chatglm/README.md @@ -6,11 +6,11 @@ ChatGLM-6B 是一个开源的、支持中英双语问答的对话语言模型, **支持模型权重:** -| Model | -|----------------------------------| -| THUDM/chatglm-6b | -| THUDM/chatglm-6b-v1.1 | +| Model | +|-----------------------| +| THUDM/chatglm-6b | +| THUDM/chatglm-6b-v1.1 | ## 2. 模型协议 -ChatGLM-6B 模型的权重的使用需要遵循[License](../../paddlenlp/transformers/chatglm/LICENSE)。 +ChatGLM-6B 模型的权重的使用需要遵循[License](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/paddlenlp/transformers/chatglm/LICENSE)。 diff --git a/llm/config/chatglm2/README.md b/llm/config/chatglm2/README.md index 0929e7b20fac..bda73c055979 100644 --- a/llm/config/chatglm2/README.md +++ b/llm/config/chatglm2/README.md @@ -6,12 +6,12 @@ ChatGLM2-6B 是开源中英双语对话模型 [ChatGLM-6B](https://github.com/TH **支持模型权重:** -| Model | -|----------------------------------| -| THUDM/chatglm2-6b | -| THUDM/chatglm3-6b | +| Model | +|-------------------| +| THUDM/chatglm2-6b | +| THUDM/chatglm3-6b | ## 2. 模型协议 -ChatGLM2-6B 模型的权重的使用需要遵循[License](../../paddlenlp/transformers/chatglm_v2/LICENSE)。 +ChatGLM2-6B 模型的权重的使用需要遵循[License](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/paddlenlp/transformers/chatglm_v2/LICENSE)。 diff --git a/llm/config/gemma/README.md b/llm/config/gemma/README.md index 040e68f00132..d00688636912 100644 --- a/llm/config/gemma/README.md +++ b/llm/config/gemma/README.md @@ -7,7 +7,7 @@ **支持模型权重:** | Model | -| ------------------ | +|--------------------| | google/gemma-7b | | google/gemma-7b-it | | google/gemma-2b | @@ -15,4 +15,4 @@ ## 2. 模型精调 -请参考[LLM全流程工具介绍](../README.md) +请参考[LLM全流程工具介绍](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/llm) diff --git a/llm/config/llama/README.md b/llm/config/llama/README.md index bda1959533d7..881ac9f3e95d 100644 --- a/llm/config/llama/README.md +++ b/llm/config/llama/README.md @@ -4,38 +4,38 @@ **支持模型权重:** -| Model | -| ---------------------------------| -| facebook/llama-7b | -| facebook/llama-13b | -| facebook/llama-30b | -| facebook/llama-65b | -| meta-llama/Llama-2-7b | -| meta-llama/Llama-2-7b-chat | -| meta-llama/Llama-2-13b | -| meta-llama/Llama-2-13b-chat | -| meta-llama/Llama-2-70b | -| meta-llama/Llama-2-70b-chat | -|meta-llama/Meta-Llama-3-8B| -|meta-llama/Meta-Llama-3-8B-Instruct| -|meta-llama/Meta-Llama-3-70B| -|meta-llama/Meta-Llama-3-70B-Instruct| -| ziqingyang/chinese-llama-7b | -| ziqingyang/chinese-llama-13b | -| ziqingyang/chinese-alpaca-7b | -| ziqingyang/chinese-alpaca-13b | -| idea-ccnl/ziya-llama-13b-v1 | -| linly-ai/chinese-llama-2-7b | -| linly-ai/chinese-llama-2-13b | -| baichuan-inc/Baichuan-7B | -| baichuan-inc/Baichuan-13B-Base | -| baichuan-inc/Baichuan-13B-Chat | -| baichuan-inc/Baichuan2-7B-Base | -| baichuan-inc/Baichuan2-7B-Chat | -| baichuan-inc/Baichuan2-13B-Base | -| baichuan-inc/Baichuan2-13B-Chat | -| FlagAlpha/Llama2-Chinese-7b-Chat | -| FlagAlpha/Llama2-Chinese-13b-Chat | +| Model | +|--------------------------------------| +| facebook/llama-7b | +| facebook/llama-13b | +| facebook/llama-30b | +| facebook/llama-65b | +| meta-llama/Llama-2-7b | +| meta-llama/Llama-2-7b-chat | +| meta-llama/Llama-2-13b | +| meta-llama/Llama-2-13b-chat | +| meta-llama/Llama-2-70b | +| meta-llama/Llama-2-70b-chat | +| meta-llama/Meta-Llama-3-8B | +| meta-llama/Meta-Llama-3-8B-Instruct | +| meta-llama/Meta-Llama-3-70B | +| meta-llama/Meta-Llama-3-70B-Instruct | +| ziqingyang/chinese-llama-7b | +| ziqingyang/chinese-llama-13b | +| ziqingyang/chinese-alpaca-7b | +| ziqingyang/chinese-alpaca-13b | +| idea-ccnl/ziya-llama-13b-v1 | +| linly-ai/chinese-llama-2-7b | +| linly-ai/chinese-llama-2-13b | +| baichuan-inc/Baichuan-7B | +| baichuan-inc/Baichuan-13B-Base | +| baichuan-inc/Baichuan-13B-Chat | +| baichuan-inc/Baichuan2-7B-Base | +| baichuan-inc/Baichuan2-7B-Chat | +| baichuan-inc/Baichuan2-13B-Base | +| baichuan-inc/Baichuan2-13B-Chat | +| FlagAlpha/Llama2-Chinese-7b-Chat | +| FlagAlpha/Llama2-Chinese-13b-Chat | @@ -49,6 +49,6 @@ tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-chat") ## 2. 模型协议 -LLaMA 模型的权重的使用则需要遵循[License](../../paddlenlp/transformers/llama/LICENSE)。 +LLaMA 模型的权重的使用则需要遵循[License](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/paddlenlp/transformers/llama/LICENSE)。 -Llama2 模型的权重的使用则需要遵循[License](../../paddlenlp/transformers/llama/Llama2.LICENSE)。 +Llama2 模型的权重的使用则需要遵循[License](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/paddlenlp/transformers/llama/Llama2.LICENSE)。 diff --git a/llm/config/opt/README.md b/llm/config/opt/README.md index 3b77d6304b14..7f24e921d81d 100644 --- a/llm/config/opt/README.md +++ b/llm/config/opt/README.md @@ -5,15 +5,15 @@ [OPT: Open Pre-trained Transformer Language Models](https://arxiv.org/abs/2205.01068) 是以自回归填空作为训练目标的通用语言模型,可用于各类理解和生成任务。 **支持模型权重:** -| Model | -|----------------------------------| -|facebook/opt-125m| -|facebook/opt-350m | -|facebook/opt-1.3b | -|facebook/opt-2.7b | -|facebook/opt-6.7b| -|facebook/opt-13b | -|facebook/opt-30b | -|facebook/opt-66b | -|facebook/opt-iml-1.3b | -|opt-iml-max-1.3b | +| Model | +|-----------------------| +| facebook/opt-125m | +| facebook/opt-350m | +| facebook/opt-1.3b | +| facebook/opt-2.7b | +| facebook/opt-6.7b | +| facebook/opt-13b | +| facebook/opt-30b | +| facebook/opt-66b | +| facebook/opt-iml-1.3b | +| opt-iml-max-1.3b | diff --git a/llm/docs/chat_template.md b/llm/docs/chat_template.md index e8ad37167f26..8487c1601b43 100644 --- a/llm/docs/chat_template.md +++ b/llm/docs/chat_template.md @@ -1,6 +1,6 @@ # 多轮对话精调教程 -当前开源Chat 类型模型越来越多,PaddleNLP 已经集成了 [Llama](./llama/README.md)、[Qwen](./qwen/README.md)、[ChatGLM](./chatglm/README.md) 等系列模型,也支持[多轮对话 Prompt Template 推理](https://paddlenlp.readthedocs.io/zh/latest/get_started/chat_template.html),只需要调用`apply_chat_template` 函数即可构造将对话历史和用户最新 query 按照模型指定规则拼接到一起,实现不同模型的定制化 Prompt 规则推理。 +当前开源Chat 类型模型越来越多,PaddleNLP 已经集成了 [Llama](../config/llama)、[Qwen](../config/qwen)、[ChatGLM](../config/chatglm) 等系列模型,也支持[多轮对话 Prompt Template 推理](https://paddlenlp.readthedocs.io/zh/latest/get_started/chat_template.html),只需要调用`apply_chat_template` 函数即可构造将对话历史和用户最新 query 按照模型指定规则拼接到一起,实现不同模型的定制化 Prompt 规则推理。 此外多轮对话训练精调的应用场景也是越来越多,不同模型的多轮对话模板构造规则都不一致,为了在训练侧标准化前处理上的区别,设计了`chat_template`来解决此问题。 diff --git a/llm/docs/finetune.md b/llm/docs/finetune.md index b590a09739b7..0895265fe8d3 100644 --- a/llm/docs/finetune.md +++ b/llm/docs/finetune.md @@ -30,7 +30,7 @@ PEFT(Parameter-Efficient Fine-Tuning)相比于全量参数大大降低了所需 - **统一对话模板** -当前开源Chat 类型模型越来越多,PaddleNLP 已经集成了 [LLaMA/LLaMA2](../llama)、[Baichuan/Baichuan2](../llama)、[ChatGLM](../chatglm)、[ChatGLM2/ChatGLM3](./chatglm2)、[Qwen](../qwen)、[Bloom](../bloom)、[GPT-3](./gpt-3)等系列模型,也支持[多轮对话 Prompt Template 推理](https://paddlenlp.readthedocs.io/zh/latest/get_started/chat_template.html),只需要调用`apply_chat_template` 函数即可构造将对话历史和用户最新 query 按照模型指定规则拼接到一起,实现不同模型的定制化 Prompt 规则推理。 +当前开源Chat 类型模型越来越多,PaddleNLP 已经集成了 [LLaMA/LLaMA2](../config/llama)、[Baichuan/Baichuan2](../config/baichuan)、[ChatGLM](../config/chatglm)、[ChatGLM2/ChatGLM3](../config/chatglm2)、[Qwen](../config/qwen)、[Bloom](../config/bloom)、[GPT-3](../config/gpt-3)等系列模型,也支持[多轮对话 Prompt Template 推理](https://paddlenlp.readthedocs.io/zh/latest/get_started/chat_template.html),只需要调用`apply_chat_template` 函数即可构造将对话历史和用户最新 query 按照模型指定规则拼接到一起,实现不同模型的定制化 Prompt 规则推理。 此外多轮对话训练精调的应用场景也是越来越多,不同模型的多轮对话模板构造规则都不一致,为了在训练侧标准化前处理上的区别,设计了`chat_template`来解决此问题。只需要添加一个`chat_template` 的配置即可为该模型添加相应的多轮对话精调训练支持,具体的配置可看[多轮对话文档](./chat_template.md)。 diff --git a/llm/docs/inference.md b/llm/docs/inference.md index 9660778a22ef..c34f31e78101 100644 --- a/llm/docs/inference.md +++ b/llm/docs/inference.md @@ -54,17 +54,17 @@ python ./predict/predictor.py --model_name_or_path ./inference --data_file ./dat PaddleNLP 中已经添加高性能推理模型相关实现,支持: -| Model | Inference Model | PTuning | WINT8 | PTQ-A8W8 | -|-----------------------------|-----------------|---------|-------|-----| -| [LLaMA1/2](../llama) | ✅ | ✅ | ✅ | ✅ | -| [ChatGLM](../chatglm) | ✅ | ✅ | ✅ | ❌ | -| [ChatGLM2](../chatglm2) | ✅ | ❌ | ❌ | ❌ | -| [Bloom](../bloom) | ✅ | ✅ | ✅ | ❌ | -| [GPT-3](../gpt-3) | ✅ | ❌ | ❌ | ❌ | -| [Qwen](../qwen) | ✅ | ❌ | ❌ | ❌ | -| [BaiChuan-7B](../llama) | ✅ | ✅ | ✅ | 🚧 | -| [BaiChuan2-7B](../llama) | ✅ | ✅ | ✅ | 🚧 | -| [BaiChuan2-13B](../llama) | 🚧 | 🚧 | 🚧 | 🚧 | +| Model | Inference Model | PTuning | WINT8 | PTQ-A8W8 | +|----------------------------------|-----------------|---------|-------|----------| +| [LLaMA1/2](../config/llama) | ✅ | ✅ | ✅ | ✅ | +| [ChatGLM](../config/chatglm) | ✅ | ✅ | ✅ | ❌ | +| [ChatGLM2](../config/chatglm2) | ✅ | ❌ | ❌ | ❌ | +| [Bloom](../config/bloom) | ✅ | ✅ | ✅ | ❌ | +| [GPT-3](../config/gpt-3) | ✅ | ❌ | ❌ | ❌ | +| [Qwen](../config/qwen) | ✅ | ❌ | ❌ | ❌ | +| [BaiChuan-7B](../config/baichuan) | ✅ | ✅ | ✅ | 🚧 | +| [BaiChuan2-7B](../config/baichuan) | ✅ | ✅ | ✅ | 🚧 | +| [BaiChuan2-13B](../config/baichuan) | 🚧 | 🚧 | 🚧 | 🚧 | * ✅: Supported * 🚧: In Progress @@ -107,7 +107,7 @@ python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat -- python ./predict/predictor.py --model_name_or_path checkpoints/llama_ptq_ckpts --inference_model --dtype float16 ``` **Note**: -1. LoRA 模型在推理之前是需要合并参数,详细可见:[合并 LoRA 参数](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/merge_lora_params.py)。 +1. LoRA 模型在推理之前是需要合并参数,详细可见:[合并 LoRA 参数](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/tools/merge_lora_params.py)。 2. PrefixTuning推理需要传入相应的pre_cache,需要额外设置`export_precache`为`true`,并且传入对应的PrefixTuning参数保存路径`prefix_path`。 3. 使用Weight Only Int8 推理需要额外传入 `quant_type`。 @@ -127,7 +127,7 @@ python ./predict/export_model.py --model_name_or_path meta-llama/Llama-2-7b-chat python ./predict/export_model.py --model_name_or_path checkpoints/llama_ptq_ckpts --inference_model --output_path ./inference --dtype float16 ``` **Note**: -1. LoRA 模型在推理之前是需要合并参数,详细可见:[合并 LoRA 参数](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/merge_lora_params.py)。 +1. LoRA 模型在推理之前是需要合并参数,详细可见:[合并 LoRA 参数](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/tools/merge_lora_params.py)。 2. PrefixTuning推理需要传入相应的pre_cache,需要额外设置`export_precache`为`true`。 3. 使用Weight Only Int8 推理需要额外传入 `quant_type`。 4. A8W8推理传入的 `model_name_or_path` 为PTQ校准产出的量化模型。 @@ -152,7 +152,7 @@ export FLAGS_cache_inference_while_scope=1 python ./predict/predictor.py --model_name_or_path ./inference --inference_model --quant_type weight_only_int8 --dtype "float16" --mode "static" ``` **Note**: -1. LoRA 模型在推理之前是需要合并参数,详细可见:[合并 LoRA 参数](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/merge_lora_params.py)。 +1. LoRA 模型在推理之前是需要合并参数,详细可见:[合并 LoRA 参数](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/tools/merge_lora_params.py)。 2. PrefixTuning推理需要传入相应的pre_cache,需要额外设置`export_precache`为`true`,并且传入对应的PrefixTuning参数保存路径`prefix_path`。 3. 使用Weight Only Int8 推理需要额外传入 `quant_type`。 4. A8W8推理传入的 `model_name_or_path` 为PTQ校准产出的量化模型。 diff --git a/llm/docs/pretrain.rst b/llm/docs/pretrain.rst index d0fd203b97e3..4c746f2ea3a6 100644 --- a/llm/docs/pretrain.rst +++ b/llm/docs/pretrain.rst @@ -65,7 +65,7 @@ git clone 代码到本地,即可开始。 .. code-block:: bash # 编译自定义算子,可选 - cd ../model_zoo/gpt-3/external_ops/ && python3 setup.py install && cd - + cd ../legacy/model_zoo/gpt-3/external_ops/ && python3 setup.py install && cd - # llama 模型预训练 python -u -m paddle.distributed.launch --gpus "0,1,2,3,4,5,6,7" run_pretrain.py ./config/llama/pretrain_argument.json @@ -78,7 +78,7 @@ git clone 代码到本地,即可开始。 1. 建议使用paddle develop版本训练,需要安装 ``pip install tool_helpers visualdl==2.5.3`` 等相关缺失whl包。 2. ``use_flash_attention`` 需要在A100机器开启,建议使用cuda11.8环境。 -3. ``use_fused_rms_norm`` 需要安装 `此目录 `_ 下的自定义OP, `python setup.py install`。如果安装后仍然找不到算子,需要额外设置 ``PYTHONPATH``。 +3. ``use_fused_rms_norm`` 需要安装 `此目录 `_ 下的自定义OP, `python setup.py install`。如果安装后仍然找不到算子,需要额外设置 ``PYTHONPATH``。 4. ``continue_training`` 表示从现有的预训练模型加载训练。7b模型初始loss大概为2.xx, 随机初始化模型loss从11.x左右下降。 5. 当前脚本为sharding版本,需要4D并行训练(数据、sharding、张量、流水线并行)的用户,请参考 ``run_trainer_tp4pp2.sh`` 脚本。 6. 多机训练时,若各机器使用的训练数据文件位置相同(例如挂载共享硬盘情况),请指定 ``--share_folder true`` 使全局0号卡制作缓存数据。否则默认各台机器的0号卡独立制作缓存数据, diff --git a/llm/experimental/ernie-3.5-se/README.md b/llm/experimental/ernie-3.5-se/README.md index ad14040deba7..14aa55b9efd5 100644 --- a/llm/experimental/ernie-3.5-se/README.md +++ b/llm/experimental/ernie-3.5-se/README.md @@ -25,7 +25,7 @@ ## 2. 预训练 -预训练数据制作参考[此处](../../model_zoo/ernie-1.0/preprocess/docs/OpenWebText2.md) +预训练数据制作参考[此处](../../tools/preprocess/docs/OpenWebText2.md) 为了方便用户运行测试本模型,本项目提供了处理好的100k条doc的训练样本: ```shell @@ -89,7 +89,7 @@ python -u -m paddle.distributed.launch \ 1. 需要paddle develop版本训练,需要安装`pip install tool_helpers visualdl==2.5.3`等相关缺失whl包 2. `use_flash_attention` 需要在A100机器开启,否则loss可能不正常(很快变成0.00x,非常小不正常)。建议使用cuda11.8环境。 3. `continue_training` 表示从现有的预训练模型加载训练,如果需要从头开始预训练模型,则设置为0。 -4. `use_fused_ln` 需要安装[此目录](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/gpt-3/external_ops)下的自定义OP, `python setup.py install`。如果安装后仍然找不到算子,需要额外设置PYTHONPATH +4. `use_fused_ln` 需要安装[此目录](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/legacy/model_zoo/gpt-3/external_ops)下的自定义OP, `python setup.py install`。如果安装后仍然找不到算子,需要额外设置PYTHONPATH 5. 当前脚本为sharding版本,需要4D并行训练(数据、sharding、张量、流水线并行)的用户,可另外调整相关参数。 diff --git a/llm/tools/preprocess/README.md b/llm/tools/preprocess/README.md index 893eaad5cff7..d6ffc3f4b7ea 100644 --- a/llm/tools/preprocess/README.md +++ b/llm/tools/preprocess/README.md @@ -35,14 +35,14 @@ 飞桨是自主研发、功能完备、开源开放的产业级深度学习平台,集深度学习核心训练和推理框架、基础模型库、端到端开发套件和丰富的工具组件于一体 -|步骤|阶段                     |数据格式| 样例| -|-|-|-|-| -| 0️⃣初始状态 | -|原始数据:
**每个doc之间用空行间隔开**
- 中文,默认每句换行符,作为句子结束。
- 英文,默认使用nltk判断句子结束 | ```飞桨是功能完备、开源开放的产业级深度学习平台。```
```飞桨拥有核心训练和推理框架、基础模型库。```

```PaddleNLP是自然语言处理领域的优秀工具。``` | -|1️⃣原始数据转换
`trans_to_json.py`|预处理
输入:0️⃣初始状态
输出:jsonl|jsonl格式:每个doc对应一行json字符串| ```{"text": "飞桨是功能完备、开源开放的产业级深度学习平台。飞桨拥有..."}```
```{"text": "PaddleNLP是自然语言..."}``` -|❇️(**可选**)数据中文分词
`words_segmentation.py`|语料分词:中文WWM
输入:jsonl
输出:0️⃣初始状态| 将jsonl格式的数据,恢复成分词后的原始格式数据
| ```飞桨 是 功能 完备、开源 开放的 产业级 深度学习 平台。```
```飞桨 拥有 核心 训练和推理 框架、基础 模型库。```

```PaddleNLP 是 自然语言处理领域 的 优秀工具。``` -|2️⃣数据ID化
`create_pretrain_data.py`|预处理| bin格式:数据id化后的token id
idx格式:数据句子、文章位置索引 | - -|3️⃣训练index文件生成|训练启动|npy格式:
根据训练步数max_steps生成
train、valid、test的每个样本索引文件| - -|4️⃣token动态mask(可选)| Dataset取数据 | 无 |- +| 步骤 | 阶段                      | 数据格式 | 样例 | +|-----------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0️⃣初始状态 | - | 原始数据:
**每个doc之间用空行间隔开**
- 中文,默认每句换行符,作为句子结束。
- 英文,默认使用nltk判断句子结束 | ```飞桨是功能完备、开源开放的产业级深度学习平台。```
```飞桨拥有核心训练和推理框架、基础模型库。```

```PaddleNLP是自然语言处理领域的优秀工具。``` | +| 1️⃣原始数据转换
`trans_to_json.py` | 预处理
输入:0️⃣初始状态
输出:jsonl | jsonl格式:每个doc对应一行json字符串 | ```{"text": "飞桨是功能完备、开源开放的产业级深度学习平台。飞桨拥有..."}```
```{"text": "PaddleNLP是自然语言..."}``` | +| ❇️(**可选**)数据中文分词
`words_segmentation.py` | 语料分词:中文WWM
输入:jsonl
输出:0️⃣初始状态 | 将jsonl格式的数据,恢复成分词后的原始格式数据
| ```飞桨 是 功能 完备、开源 开放的 产业级 深度学习 平台。```
```飞桨 拥有 核心 训练和推理 框架、基础 模型库。```

```PaddleNLP 是 自然语言处理领域 的 优秀工具。``` | +| 2️⃣数据ID化
`create_pretrain_data.py` | 预处理 | bin格式:数据id化后的token id
idx格式:数据句子、文章位置索引 | - | +| 3️⃣训练index文件生成 | 训练启动 | npy格式:
根据训练步数max_steps生成
train、valid、test的每个样本索引文件 | - | +| 4️⃣token动态mask(可选) | Dataset取数据 | 无 | - | 注意: @@ -59,12 +59,12 @@ 针对目前开源的数据集,PaddleNLP提供了详细的数据教程,点击对应数据集的链接,即可开始进行数据制作: -| 名称 | 文本类型 | 纯文本大小 | 适配模型 -|-|-|-|-| -| [CLUECorpusSmall](./docs/CLUECorpusSmall.md)| 中文 | 14GB | Llama -| [OpenWebText2](./docs/OpenWebText2.md) | 英文 | 70GB | Llama -| [WuDaoCorpus2.0 Base](./docs/WuDaoCorpusBase.md)| 中文 | 200GB | Llama -| [CLUECorpus2020](./docs/CLUECorpus2020.md)| 中文 | 200GB | Llama +| 名称 | 文本类型 | 纯文本大小 | 适配模型 | +|--------------------------------------------------|----------|------------|----------| +| [CLUECorpusSmall](./docs/CLUECorpusSmall.md) | 中文 | 14GB | Llama | +| [OpenWebText2](./docs/OpenWebText2.md) | 英文 | 70GB | Llama | +| [WuDaoCorpus2.0 Base](./docs/WuDaoCorpusBase.md) | 中文 | 200GB | Llama | +| [CLUECorpus2020](./docs/CLUECorpus2020.md) | 中文 | 200GB | Llama | ## 预训练详细准备 @@ -128,7 +128,7 @@ optional arguments: -h, --help show this help message and exit --model_name MODEL_NAME What model to use. - 必须设置,如:idea-ccnl/ziya-llama-13b-v1, 可以参考已有的模型名称 https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/llama/README.md + 必须设置,如:idea-ccnl/ziya-llama-13b-v1, 可以参考已有的模型名称 https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm --tokenizer_name {LlamaTokenizer} What type of tokenizer to use. 模型对应的tokenizer, Llama模型需使用LlamaTokenizer @@ -245,8 +245,8 @@ mkdir data mv ./preprocess/baike_sample* ./data ``` -* llama预训练请参考[预训练](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/llama/README.md)。 -* ernie预训练请参考[预训练](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/model_zoo/ernie-1.0/pretraining_introduction.md)。 +* llama预训练请参考[预训练](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm)。 +* ernie预训练请参考[预训练](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/legacy/model_zoo/ernie-1.0/pretraining_introduction.md)。 代码说明: diff --git a/llm/tools/preprocess/docs/CLUECorpusSmall.md b/llm/tools/preprocess/docs/CLUECorpusSmall.md index 6af9876968f0..e1f0571325e1 100644 --- a/llm/tools/preprocess/docs/CLUECorpusSmall.md +++ b/llm/tools/preprocess/docs/CLUECorpusSmall.md @@ -67,7 +67,7 @@ python -u create_pretraining_data.py \ --workers 48 ``` -- model_name 可以更换为[其他模型](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/llama/README.md)。 +- model_name 可以更换为[其他模型](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm)。 - workers 表示转化的线程数目 数据共有文档`15702702`条左右,由于分词比较耗时,大概一小时左右可以完成。在当前目录下产出训练所需数据。 diff --git a/llm/tools/preprocess/docs/OpenWebText2.md b/llm/tools/preprocess/docs/OpenWebText2.md index 08b29ca7880a..26b46a659022 100644 --- a/llm/tools/preprocess/docs/OpenWebText2.md +++ b/llm/tools/preprocess/docs/OpenWebText2.md @@ -19,7 +19,7 @@ tar -xvf openwebtext2.json.zst.tar -C /path/to/openwebtext ## Llama训练数据制作 -然后使用[preprocess](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/ernie-1.0/preprocess) 工具下的`create_pretraining_data.py`脚本进行数据集制作: +然后使用`create_pretraining_data.py`脚本进行数据集制作: ``` python -u create_pretraining_data.py \ --model_name meta-llama/Llama-2-7b \ diff --git a/paddlenlp/datasets/hf_datasets/glue.py b/paddlenlp/datasets/hf_datasets/glue.py index a576b23c85b6..4b7106963c56 100644 --- a/paddlenlp/datasets/hf_datasets/glue.py +++ b/paddlenlp/datasets/hf_datasets/glue.py @@ -20,9 +20,8 @@ import os import textwrap -import numpy as np - import datasets +import numpy as np _GLUE_CITATION = """\ @inproceedings{wang2019glue, @@ -260,7 +259,7 @@ class Glue(datasets.GeneratorBasedBuilder): year={2017} }""" ), - url="http://ixa2.si.ehu.es/stswiki/index.php/STSbenchmark", + url="https://huggingface.co/datasets/mteb/stsbenchmark-sts", process_label=np.float32, ), GlueConfig( diff --git a/paddlenlp/ops/README.md b/paddlenlp/ops/README.md deleted file mode 100644 index 9fd8abee03b2..000000000000 --- a/paddlenlp/ops/README.md +++ /dev/null @@ -1,353 +0,0 @@ -# 文本生成高性能加速 - -## 子目录结构 - -以下是 FastGeneration 的高性能加速自定义 op 相关文件的目录结构。 - -```text -. -├── fast_transformer/ # 基于自定义 op FastGeneration 子路径 - ├── sample/ # 基于 FastGeneration 使用样例 - ├── src/ # 自定义 OP C++ CUDA 代码 - └── transformer/ # Python API 封装脚本 -└── patches # 自定义 op 第三方库自定义补丁代码 -``` - -## 使用环境说明 - -* 本项目依赖于 PaddlePaddle 2.1.0 及以上版本或适当的 develop 版本 -* CMake >= 3.10 -* CUDA 10.1 或 10.2(需要 PaddlePaddle 框架一致) -* gcc 版本需要与编译 PaddlePaddle 版本一致,比如使用 gcc8.2 -* 推荐使用 Python3 -* [FasterTransformer](https://github.com/NVIDIA/FasterTransformer/tree/v3.1#setup) 使用必要的环境 -* 环境依赖 - - attrdict - - pyyaml - ```shell - pip install attrdict pyyaml - ``` - -## 快速开始 - -我们实现了基于 FastGeneration 的自定义 op 的接入,用于加速文本生成模型在 GPU 上的预测性能。接下来,我们将分别介绍基于 Python 动态图和预测库使用 FastGeneration 自定义 op 的方式,包括 op 的编译与使用。 - -## Python 动态图使用自定义 op - -### JIT 自动编译 - -目前当基于动态图使用 FastGeneration 预测加速自定义 op 时,PaddleNLP 提供了 Just In Time 的自动编译,在一些 API 上,用户无需关注编译流程,可以直接执行对应的 API,程序会自动编译需要的第三方库。 - -以 Transformer 为例,可以直接调用 `TransformerGenerator()` 这个 API,程序会自动编译。 - -目前支持 JIT 的预测加速 API 有: -* `FasterTransformer()/TransformerGenerator()`: 支持 Transformer 模型的预测加速功能。使用示例可以参考 [Transformer 预测加速使用示例-sample](./fast_transformer/sample/decoding_sample.py),[Transformer 预测加速使用示例-机器翻译](../../examples/machine_translation/transformer/fast_transformer/)。 -* `FasterGPT()`: 支持 GPT 模型的预测加速功能。使用示例可以参考 [GPT 预测加速使用示例](../../model_zoo/gpt/fast_gpt/)。 -* `FasterUnifiedTransformer()`: 支持 UnifiedTransformer 模型的预测加速功能。使用示例可以参考 [UnifiedTransformer 预测加速使用示例](../../examples/dialogue/unified_transformer/) 以及 PLATO-XL 的使用示例可以参考 [PLATO-XL 11B 使用示例](../../examples/dialogue/plato-xl/)。 -* `FasterUNIMOText()`: 支持 UNIMOText 模型预测加速功能。 - * 使用示例可以参考 [UNIMOText 预测加速使用示例](../../fast_generation/samples/unimo_text_sample.py)。 - * 同样,我们提供了动转静以及 Paddle Inference 使用的示例,详细可以参考 [动转静导出](./fast_transformer/sample/unimo_text_export_model_sample.py) 和 [Paddle Inference 使用示例](./fast_transformer/sample/unimo_text_inference.py)。 -* `FasterBART()`: 支持 BART 模型预测加速功能。使用示例可以参考 [BART 预测加速使用示例-sample](./fast_transformer/sample/bart_decoding_sample.py),[BART 预测加速使用示例-文本摘要](../../examples/text_summarization/bart)。 - -具体使用方法可以参考 API 文档或是使用示例。 - -### 编译自定义OP - -除了自动编译外,如果需要自行编译,我们已经提供对应的 CMakeLists.txt,可以参考使用如下的方式完成编译。 - -#### PaddleNLP 准备 - -首先,如果需要从源码自行编译,可以直接使用 Python 的 package 下的 paddlenlp,或是可从 github 克隆一个 PaddleNLP,并重新编译: - -以下以从 github 上 clone 一个新版 PaddleNLP 为例: - -``` sh -git clone https://github.com/PaddlePaddle/PaddleNLP.git -``` - -其次,配置环境变量,让我们可以使用当前 clone 的 paddlenlp,并进入到自定义 OP 的路径,准备后续的编译操作: - -``` sh -export PYTHONPATH=$PWD/PaddleNLP/:$PYTHONPATH -cd PaddleNLP/paddlenlp/ops/ -``` - -#### 编译 - -编译之前,请确保安装的 PaddlePaddle 的版本高于 2.1.0 或是基于最新的 develop 分支的代码编译,并且正常可用。 - -编译自定义 OP 可以参照一下步骤: - -``` sh -mkdir build -cd build/ -cmake .. -DCMAKE_BUILD_TYPE=Release -DPY_CMD=python3.x -make -j -cd ../ -``` - -可以使用的编译选项包括: -* `-DPY_CMD`: 指定当前装有 PaddlePaddle 版本的 python 环境,比如 `-DPY_CMD=python3.7`。若未指定 `-DPY_CMD` 将会默认使用系统命令 `python` 对应的 Python。 -* `-DSM`: 是指的所用 GPU 的 compute capability,建议不使用该选项设置,未设置时将自动检测。如要设置,需根据 [compute capability](https://developer.nvidia.com/zh-cn/cuda-gpus#compute) 进行设置,如 V100 时设置 `-DSM=70` 或 T4 时设置 `-DSM=75`。 -* `-DWITH_GPT`: 是否编译带有 GPT 相关的 lib。若使用 GPT-2 高性能推理,需要加上 `-DWITH_GPT=ON`。默认为 OFF。 -* `-DWITH_UNIFIED`: 是否编译带有 Unified Transformer 或是 UNIMOText 相关的 lib。若使用,需要加上 `-DWITH_UNIFIED=ON`。默认为 ON。 -* `-DWITH_BART`: 是否编译带有 BART 支持的相关 lib。若使用,需要加上 `-DWITH_BART=ON`。默认为 ON。 -* `-DWITH_DECODER`: 是否编译带有 decoder 优化的 lib。默认为 ON。 - -最终,编译会在 `./build/lib/` 路径下,产出 `libdecoding_op.so`,即需要的 FastGeneration decoding 执行的库。 - -### 使用 Transformer decoding 高性能推理 - -编写 python 脚本的时候,调用 `FasterTransformer` API 即可实现 Transformer 模型的高性能预测。 - -若当前环境下没有需要的自定义 op 的动态库,将会使用 JIT 自动编译需要的动态库。如果需要自行编译自定义 op 所需的动态库,可以参考前文所述完成编译。编译好后,使用 `FasterTransformer(decoding_lib="/path/to/lib", ...)` 可以完成导入。 - -举例如下: - -``` python -from paddlenlp.ops import FasterTransformer - -transformer = FasterTransformer( - src_vocab_size=args.src_vocab_size, - trg_vocab_size=args.trg_vocab_size, - max_length=args.max_length + 1, - n_layer=args.n_layer, - n_head=args.n_head, - d_model=args.d_model, - d_inner_hid=args.d_inner_hid, - dropout=args.dropout, - weight_sharing=args.weight_sharing, - bos_id=args.bos_idx, - eos_id=args.eos_idx, - decoding_strategy=args.decoding_strategy, - beam_size=args.beam_size, - topk=args.topk, - topp=args.topp, - max_out_len=args.max_out_len, - decoding_lib=args.decoding_lib, - use_fp16_decoding=args.use_fp16_decoding) -``` - -更详细的例子可以参考 `./fast_transformer/sample/decoding_sample.py` 以及 `./sample/encoder_decoding_sample.py`,我们提供了更详细用例。 - -#### Transformer decoding 示例代码 - -使用 PaddlePaddle 仅执行 decoding 测试(float32): - -``` sh -export CUDA_VISIBLE_DEVICES=0 -export FLAGS_fraction_of_gpu_memory_to_use=0.1 -# 执行 decoding_gemm 目的是基于当前环境、配置,提前确定一个性能最佳的矩阵乘算法,不是必要的步骤 -./build/third-party/build/fastertransformer/bin/decoding_gemm 32 4 8 64 30000 32 512 0 -python ./fast_transformer/sample/decoding_sample.py --config ./fast_transformer/sample/config/decoding.sample.yaml --decoding_lib ./build/lib/libdecoding_op.so -``` - -使用 PaddlePaddle 仅执行 decoding 测试(float16): -执行 float16 的 decoding,需要在执行的时候,加上 `--use_fp16_decoding` 选项。 - -``` sh -export CUDA_VISIBLE_DEVICES=0 -export FLAGS_fraction_of_gpu_memory_to_use=0.1 -# 执行 decoding_gemm 目的是基于当前环境、配置,提前确定一个性能最佳的矩阵乘算法,不是必要的步骤 -./build/third-party/build/fastertransformer/bin/decoding_gemm 32 4 8 64 30000 32 512 1 -python ./fast_transformer/sample/decoding_sample.py --config ./fast_transformer/sample/config/decoding.sample.yaml --decoding_lib ./build/lib/libdecoding_op.so --use_fp16_decoding -``` - -其中,`decoding_gemm` 不同参数的意义可以参考 [FasterTransformer 文档](https://github.com/NVIDIA/FasterTransformer/tree/v3.1#execute-the-decoderdecoding-demos)。这里提前执行 `decoding_gemm`,可以在当前路径下生成一个 config 文件,里面会包含针对当前 decoding 部分提供的配置下,性能最佳的矩阵乘的算法,并在执行的时候读入这个数据。 - -### 使用 GPT-2 decoding 高性能推理 - -与 `FasterTransformer` API 类似,可以通过一下方式调用 GPT-2 相关优化: - -``` python -from paddlenlp.ops import FasterGPT -from paddlenlp.transformers import GPTModel, GPTForCausalLM - -MODEL_CLASSES = { - "gpt2-medium-en": (GPTForCausalLM, GPTTokenizer), -} - -model_class, tokenizer_class = MODEL_CLASSES[args.model_name] -tokenizer = tokenizer_class.from_pretrained(args.model_name) -model = model_class.from_pretrained(args.model_name) - -# Define model -gpt = FasterGPT( - model=model, - decoding_lib=args.decoding_lib, - use_fp16_decoding=args.use_fp16_decoding) -``` - -目前,GPT-2 的高性能预测接口 `FasterGPT()` 要求 batch 内输入的样本的长度都是相同的。并且,仅支持 topk-sampling 和 topp-sampling,不支持 beam-search。 - -若当前环境下没有需要的自定义 op 的动态库,将会使用 JIT 自动编译需要的动态库。如果需要自行编译自定义 op 所需的动态库,可以参考前文所述完成编译。编译好后,使用 `FasterGPT(decoding_lib="/path/to/lib", ...)` 可以完成导入。 - -更详细的例子可以参考 `./fast_transformer/sample/gpt_sample.py`,我们提供了更详细用例。 - -#### GPT-2 decoding 示例代码 - -使用 PaddlePaddle 仅执行 decoding 测试(float32): - -``` sh -export CUDA_VISIBLE_DEVICES=0 -python ./fast_transformer/sample/gpt_sample.py --model_name_or_path gpt2-medium-en --batch_size 1 --topk 4 --topp 0.0 --max_length 32 --start_token "<|endoftext|>" --end_token "<|endoftext|>" --temperature 1.0 -``` - -其中,各个选项的意义如下: -* `--model_name_or_path`: 预训练模型的名称或是路径。 -* `--decoding_lib`: 指向 `libdecoding_op.so` 的路径。需要包含 `libdecoding_op.so`。若不指定或是不存在则将自动进行 jit 编译产出该 lib。 -* `--batch_size`: 一个 batch 内,样本数目的大小。 -* `--topk`: 执行 topk-sampling 的时候的 `k` 的大小,默认是 4。 -* `--topp`: 执行 topp-sampling 的时候的阈值的大小,默认是 0.0 表示不执行 topp-sampling。 -* `--max_length`: 最长的生成长度。 -* `--start_token`: 字符串,表示任意生成的时候的开始 token。 -* `--end_token`: 字符串,生成的结束 token。 -* `--temperature`: temperature 的设定。 -* `--use_fp16_decoding`: 是否使用 fp16 进行推理。 - -若当前环境下没有需要的自定义 op 的动态库,将会使用 JIT 自动编译需要的动态库。如果需要自行编译自定义 op 所需的动态库,可以参考前文。编译好后,可以在执行 `gpt_sample.py` 时使用 `--decoding_lib ../../../../paddlenlp/ops/build/lib/libdecoding_op.so` 可以完成导入。 - -## C++ 预测库使用自定义 op - -### 编译自定义OP - -在 C++ 预测库使用自定义 OP 需要将实现的 C++、CUDA 代码**以及 C++ 预测的 demo**编译成一个可执行文件。因预测库支持方式与 Python 不同,这个过程将不会产生自定义 op 的动态库,将直接得到可执行文件。我们已经提供对应的 CMakeLists.txt ,可以参考使用如下的方式完成编译。并获取执行 demo。 - -#### PaddleNLP 准备 - -首先,因为需要基于当前环境重新编译,当前的 paddlenlp 的 python 包里面并不包含 FastGeneration 相关 lib,需要从源码自行编译,可以直接使用 Python 的 package 下的 paddlenlp,或是可从 github 克隆一个 PaddleNLP,并重新编译: - -以下以从 github 上 clone 一个新版 PaddleNLP 为例: - -``` sh -git clone https://github.com/PaddlePaddle/PaddleNLP.git -``` - -其次,让我们可以使用当前 clone 的 paddlenlp,并进入到自定义 OP 的路径,准备后续的编译操作: - -``` sh -cd PaddleNLP/paddlenlp/ops/ -``` - -#### 编译 - -编译之前,请确保安装的 PaddlePaddle 的版本高于 2.1.0 或是基于最新的 develop 分支的代码编译,并且正常可用。 - -编译自定义 OP 可以参照一下步骤: - -``` sh -mkdir build -cd build/ -cmake .. -DCMAKE_BUILD_TYPE=Release -DPADDLE_LIB=/path/to/paddle_inference_lib/ -DDEMO=./demo/transformer_e2e.cc -DON_INFER=ON -DWITH_MKL=ON -DWITH_ONNXRUNTIME=OFF -make -j -cd ../ -``` - -可以使用的编译选项包括: -* `-DPADDLE_LIB`: 需要指明使用的 PaddlePaddle 预测库的路径 `/path/to/paddle_inference_install_dir/`,需要使用的 PaddlePaddle 的 lib 可以选择自行编译或者直接从官网下载 [paddle_inference_linux_lib](https://paddleinference.paddlepaddle.org.cn/user_guides/download_lib.html#linux)。需要注意的是,在该路径下,预测库的组织结构满足: - ```text - . - ├── CMakeCache.txt - ├── paddle/ - ├── include/ - └── lib/ - ├── third_party/ - ├── cudaerror/ - ├── install/ - └── threadpool/ - └── version.txt - ``` -* `-DDEMO`: 说明预测库使用 demo 的位置。比如指定 -DDEMO=./demo/transformer_e2e.cc 或是 -DDEMO=./demo/gpt.cc。最好使用绝对路径,若使用相对路径,需要是相对于 `PaddleNLP/paddlenlp/ops/fast_transformer/src/` 的相对路径。 -* `-DSM`: 是指的所用 GPU 的 compute capability,建议不使用该选项设置,未设置时将自动检测。如要设置,需根据 [compute capability](https://developer.nvidia.com/zh-cn/cuda-gpus#compute) 进行设置,如 V100 时设置 `-DSM=70` 或 T4 时设置 `-DSM=75`。 -* `-DWITH_GPT`: 是否编译带有 GPT 相关的 lib。若使用 GPT-2 高性能推理,需要加上 `-DWITH_GPT=ON`。默认为 OFF。 -* `-DWITH_UNIFIED`: 是否编译带有 Unified Transformer 或是 UNIMOText 相关的 lib。若使用,需要加上 `-DWITH_UNIFIED=ON`。默认为 ON。 -* `-DWITH_BART`: 是否编译带有 BART 支持的相关 lib。若使用,需要加上 `-DWITH_BART=ON`。默认为 ON。 -* `-DWITH_DECODER`: 是否编译带有 decoder 优化的 lib。默认为 ON。 -* `-DWITH_MKL`: 若当前是使用的带有 MKL 的 Paddle lib,那么需要在编译时打开 MKL 以引入 MKL 相关的依赖。 -* `-DWITH_ONNXRUNTIME`: 若当前使用的是带有 ONNX 支持的 Paddle lib,那么需要在编译时打开 ONNX Runtime 以引入相关依赖。 -* `-DON_INFER`: 是否编译 paddle inference 预测库。 -* **当使用预测库的自定义 op 的时候,请务必开启 `-DON_INFER=ON` 选项,否则,不会得到预测库的可执行文件。** - -#### 执行 Transformer decoding on PaddlePaddle - -编译完成后,在 `build/bin/` 路径下将会看到 `transformer_e2e` 的一个可执行文件。通过设置对应的设置参数完成执行的过程。 - -``` sh -cd bin/ -./transformer_e2e -batch_size -gpu_id -model_dir -vocab_file -data_file -``` - -举例说明: - -``` sh -cd bin/ -# 执行 decoding_gemm 目的是基于当前环境、配置,提前确定一个性能最佳的矩阵乘算法,不是必要的步骤 -../third-party/build/fastertransformer/bin/decoding_gemm 8 5 8 64 38512 256 512 0 -./transformer_e2e -batch_size 8 -gpu_id 0 -model_dir ./infer_model/ -vocab_file DATA_HOME/WMT14ende/WMT14.en-de/wmt14_ende_data_bpe/vocab_all.bpe.33708 -data_file DATA_HOME/WMT14ende/WMT14.en-de/wmt14_ende_data_bpe/newstest2014.tok.bpe.33708.en -``` - -其中: -* `decoding_gemm` 不同参数的意义可以参考 [FasterTransformer 文档](https://github.com/NVIDIA/FasterTransformer/tree/v3.1#execute-the-decoderdecoding-demos)。这里提前执行 `decoding_gemm`,可以在当前路径下生成一个 config 文件,里面会包含针对当前 decoding 部分提供的配置下,性能最佳的矩阵乘的算法,并在执行的时候读入这个数据。 -* `DATA_HOME` 则是 `paddlenlp.utils.env.DATA_HOME` 返回的路径。 - -预测所需要的模型文件,可以通过 `PaddleNLP/examples/machine_translation/transformer/fast_transformer/README.md` 文档中所记述的方式导出。 - -#### 执行 GPT decoding on PaddlePaddle - -如果需要使用 Paddle Inference 预测库针对 GPT 进行预测,首先,需要导出预测模型,可以通过 `./fast_transformer/sample/gpt_export_model_sample.py` 脚本获取预测库用模型,执行方式如下所示: - -``` sh -python ./fast_transformer/sample/gpt_export_model_sample.py --model_name_or_path gpt2-medium-en --topk 4 --topp 0.0 --max_out_len 32 --start_token "<|endoftext|>" --end_token "<|endoftext|>" --temperature 1.0 --inference_model_dir ./infer_model/ -``` - -各个选项的意义与上文的 `gpt_sample.py` 的选项相同。额外新增一个 `--inference_model_dir` 选项用于指定保存的模型文件、词表等文件。 - -若当前环境下没有需要的自定义 op 的动态库,将会使用 JIT 自动编译需要的动态库。如果需要自行编译自定义 op 所需的动态库,可以参考前文。编译好后,可以在执行 `gpt_export_model_sample.py` 时使用 `--decoding_lib ../../../../paddlenlp/ops/build/lib/libdecoding_op.so` 可以完成导入。 - -注意:如果是自行编译的话,这里的 `libdecoding_op.so` 的动态库是参照前文中 **`Python 动态图使用自定义 op`** 编译出来的 lib,与 **`C++ 预测库使用自定义 op`** 编译产出不同。因此,在使用预测库前,还需要额外导出模型: - * 一次用于获取 Python 动态图下的 lib,用到 Python 端进行模型导出。 - * 一次获取编译的基于预测库的可执行文件 - -若是使用的模型是 gpt2-medium-en,保存之后,`./infer_model/` 目录下组织的结构如下: - -``` text -. -├── gpt.pdiparams # 保存的参数文件 -├── gpt.pdiparams.info # 保存的一些变量描述信息,预测不会用到 -├── gpt.pdmodel # 保存的模型文件 -├── merges.txt # bpe -└── vocab.txt # 词表 -``` - -同理,完成编译后,可以在 `build/bin/` 路径下将会看到 `gpt` 的一个可执行文件。通过设置对应的设置参数完成执行的过程。 - -``` sh -cd bin/ -./gpt -batch_size 1 -gpu_id 0 -model_dir path/to/model -vocab_file path/to/vocab -start_token "<|endoftext|>" -end_token "<|endoftext|>" -``` - -## FAQ - -**问题 1**:编译报错 `module not found: paddle` - -解决方式:编译自定义 op,默认使用系统命令 `python` 所指定的 Python 的版本,需要启动相应的 conda 或是 virtualenv,或是在编译时候指定 `-DPY_CMD=python3.7`。 - -**问题 2**:编译报错: - -``` shell -error: unrecognized command line option '-std=c++14' -``` - -解决方式:需要确认环境中是否有多个 `gcc8.2`。`nvcc` 默认使用系统默认的 `gcc`,所以需要将预期使用的 `gcc` 加入到相关环境变量中。 - -**问题 3**:编译自定义 op C++ Demo 报错,报错可能是但不限于: - -``` shell -undefined reference to paddle_infer::Predictor::GetInputNames() ... -undefined reference to paddle_infer::Predictor::GetOutputNames() ... -undefined reference to paddle::AnalysisConfig::SetModel(std::string const&, std::string const&) ... - -undefined reference to google::FlagRegisterer::FlagRegisterer ... -``` - -解决方式:PaddlePaddle 编译的时候如果使用了 CXX11 ABI,自行编写 demo 并编译自定义 OP 时候需要在 CMakeLists.txt 里面加 add_definitions(-D_GLIBCXX_USE_CXX11_ABI=1) 或是 cmake 时候加上对应选项。