PaddleNLP简介
PaddleNLP是基于飞桨(PaddlePaddle)深度学习框架开发的自然语言处理(NLP)开发库。它具备以下特点:
- 简单易用的文本领域API
- 覆盖多种NLP应用场景的示例
- 支持高性能分布式训练
PaddleNLP的目标是提升开发者在NLP领域的开发和建模效率,支持从学术研究到产业应用的全流程开发。
主要特性
🔧 多硬件训练推理一体化
PaddleNLP支持在多种硬件上进行大模型的训练和推理,包括:
- NVIDIA GPU
- 昆仑芯XPU
- 华为昇腾NPU
- 燧原科技GCU
- 海光DCU
套件接口支持快速切换不同硬件,大幅降低了硬件切换带来的开发成本。
🚀 高效易用的预训练
PaddleNLP支持4D高性能训练策略:
- 纯数据并行
- 分组参数切片的数据并行
- 张量模型并行
- 流水线模型并行
Trainer支持分布式策略配置化,降低了复杂分布式组合的使用成本。
Unified Checkpoint大模型存储格式支持模型参数分布的动态扩缩容训练,降低了硬件切换带来的迁移成本。
🤗 高效精调
PaddleNLP的精调算法深度结合了零填充数据流和FlashMask高性能算子,可以降低训练中的无效数据填充和计算,大幅提升精调训练的吞吐量。
🎛️ 无损压缩和高性能推理
PaddleNLP的大模型套件中的高性能推理模块内置了动态插入和全环节算子融合策略,可以极大加快并行推理速度。底层实现细节被封装,实现了开箱即用的高性能并行推理能力。
模型支持
PaddleNLP支持丰富的预训练语言模型,包括:
- LLaMA系列
- Baichuan系列
- Bloom系列
- ChatGLM系列
- Gemma系列
- Mistral系列
- OPT系列
- Qwen系列
等主流大语言模型。
同时支持这些模型的4D并行训练、高效精调(SFT、PEFT等)、模型对齐、模型量化等全流程能力。
快速开始
安装
PaddleNLP的安装非常简单,只需要执行:
pip install --upgrade paddlenlp
大模型文本生成示例
下面是使用PaddleNLP加载Qwen模型并进行文本生成的简单示例:
from paddlenlp.transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-0.5B")
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-0.5B", dtype="float16")
input_features = tokenizer("你好!请自我介绍一下。", return_tensors="pd")
outputs = model.generate(**input_features, max_length=128)
print(tokenizer.batch_decode(outputs[0]))
输出:
['我是一个AI语言模型,我可以回答各种问题,包括但不限于:天气、新闻、历史、文化、科学、教育、娱乐等。请问您有什么需要了解的吗?']
大模型预训练
PaddleNLP提供了便捷的大模型预训练脚本:
mkdir -p llm/data && cd llm/data
wget https://bj.bcebos.com/paddlenlp/models/transformers/llama/data/llama_openwebtext_100k.bin
wget https://bj.bcebos.com/paddlenlp/models/transformers/llama/data/llama_openwebtext_100k.idx
cd .. # change folder to PaddleNLP/llm
python -u -m paddle.distributed.launch --gpus "0,1,2,3,4,5,6,7" run_pretrain.py ./config/llama/pretrain_argument.json
大模型SFT精调
同样可以方便地进行SFT精调:
mkdir -p llm/data && cd llm/data
wget https://bj.bcebos.com/paddlenlp/datasets/examples/AdvertiseGen.tar.gz && tar -zxvf AdvertiseGen.tar.gz
cd .. # change folder to PaddleNLP/llm
python -u -m paddle.distributed.launch --gpus "0,1,2,3,4,5,6,7" run_finetune.py ./config/llama/sft_argument.json
社区交流
欢迎加入PaddleNLP的开发者社区,与众多NLP爱好者交流讨论:
总结
PaddleNLP作为一个功能强大且易用的NLP开发库,为开发者提供了从模型训练到部署的全流程解决方案。无论是学术研究还是工业应用,PaddleNLP都能满足开发者的各种需求。我们期待看到更多基于PaddleNLP开发的优秀NLP应用!