ronnywang 87e4c4fa87 | 5 hours ago | |
---|---|---|
.. | ||
baichuan | 5 months ago | |
bloom | 5 months ago | |
chatglm | 5 months ago | |
chatglm2 | 5 months ago | |
docs | 1 month ago | |
ernie-3.5-se | 1 month ago | |
gemma | 1 month ago | |
glm | 7 months ago | |
gpt-3 | 1 month ago | |
llama | 5 hours ago | |
mixtral | 2 months ago | |
opt | 5 months ago | |
qwen | 1 month ago | |
tests | 5 months ago | |
.gitignore | 6 months ago | |
README.md | 2 weeks ago | |
argument.py | 1 month ago | |
benchmark.sh | 4 months ago | |
data.py | 3 weeks ago | |
export_model.py | 5 hours ago | |
finetune_generation.py | 5 days ago | |
flask_server.py | 4 months ago | |
fused_layers.py | 3 months ago | |
gradio_ui.py | 2 months ago | |
merge_lora_params.py | 4 months ago | |
merge_tp_and_pp_params.py | 1 month ago | |
predictor.py | 5 hours ago | |
quant.py | 4 months ago | |
request_flask_server.py | 4 months ago | |
run_pretrain.py | 3 weeks ago | |
utils.py | 1 week ago |
飞桨大模型套件秉承了一站式体验、性能极致、生态兼容的设计理念,旨在提供业界主流大模型预训练、精调(含SFT、PEFT)、量化、推理等统一流程, 帮助开发者低成本、低门槛、快速实现大语言模型定制化。
飞桨4D并行分布式策略。 PaddleNLP Trainer 封装支持飞桨4D并行配置(数据并行、张量并行、流水线并行、 分组参数切分并行),屏蔽多硬件编程复杂性,用户可以修改Trainer配置组合多种预训练或精调过程的分布式策略,充分组合大模型4D并行训练能力,能有效提升在多模型、多硬件下的训练性能。
高效精调策略。飞桨大模型套件提供SFT、PEFT等多种精调策略,搭载自研Zero Padding零填充优化策略有效减少训练数据中pad token的占比,提高模型训练效率。独创PEFT结合低比特和分布式并行策略,大幅降低大模型精调硬件门槛。
大模型无损量化。大模型套件内置了PaddleSlim团队自研的自适应Shift-SmoothQuant的A8W8量化算法和业界主流GPTQ的W4量化算法,实现了主流大模型的无损量化,有效加速模型推理。
高性能推理。大模型套件高性能推理模块内置动态插入和全环节算子融合策略,极大加快并行推理的速度。同时隐藏了底层实现的细节,实现了开箱即用高性能并行推理能力。
Model | Pretrain | SFT | LoRA | Prefix Tuning | Quantization | Weight convert |
---|---|---|---|---|---|---|
LLaMA/LLaMA2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Baichuan/Baichuan2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
ChatGLM-6B | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ |
ChatGLM2/ChatGLM3 | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
Qwen | ✅ | ✅ | ✅ | ✅ | 🚧 | ✅ |
Bloom | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
GPT-3 | ✅ | ✅ | 🚧 | 🚧 | 🚧 | ✅ |
OPT | 🚧 | ✅ | ✅ | 🚧 | 🚧 | ✅ |
GLM | ❌ | ✅ | ✅ | 🚧 | 🚧 | ✅ |
PaddleNLP将飞桨4D并行策略加入到Trainer API中, 用户只需修改Trainer配置即可使用不同的分布式策略。目前工具链提供LLaMA/LLaMA2、GPT-3、Qwen、Baichuan/Baichuan2 等模型预训练功能,更多模型支持持续更新中。
我们在此处提供了更详细的预训练数据制作,分布式策略支持情况,性能测试报告文档,参见: https://paddlenlp.readthedocs.io/zh/latest/llm/pretraining/index.html. 大模型权重列表参见此处
此项目支持了LLaMA、GPT-3、BaiChuan、Qwen 等大模型的预训练。用户切换配置config文件,即可一键运行。
数据详细制作流程可参考此处 : https://paddlenlp.readthedocs.io/zh/latest/llm/pretraining/dataset.html
为了方便用户运行测试本模型,本项目提供了处理好的100k条doc的训练样本:
# llama 模型数据下载
wget https://bj.bcebos.com/paddlenlp/models/transformers/llama/data/llama_openwebtext_100k_ids.npy
wget https://bj.bcebos.com/paddlenlp/models/transformers/llama/data/llama_openwebtext_100k_idx.npz
# gpt 模型数据下载
# wget https://bj.bcebos.com/paddlenlp/models/transformers/gpt/data/gpt_en_dataset_300m_ids.npy
# wget https://bj.bcebos.com/paddlenlp/models/transformers/gpt/data/gpt_en_dataset_300m_idx.npz
将所有预处理得到的文件统一放入一个文件夹中,以备训练使用:
mkdir data
mv llama_openwebtext_100k_ids.npy ./data
mv llama_openwebtext_100k_idx.npz ./data
# 编译自定义算子,可选
cd ../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 ./llama/pretrain-llama2_7b-tp2sd4_stage2.json
# Qwen 模型预训练
python -u -m paddle.distributed.launch --gpus "0,1,2,3,4,5,6,7" run_pretrain.py ./qwen/pretrain_argument_stage2.json
注意:
pip install tool_helpers visualdl==2.5.3
等相关缺失whl包use_flash_attention
需要在A100机器开启,建议使用cuda11.8环境。use_fused_rms_norm
需要安装此目录下的自定义OP, python setup.py install
。如果安装后仍然找不到算子,需要额外设置PYTHONPATHcontinue_training
表示从现有的预训练模型加载训练。7b模型初始loss大概为2.xx, 随机初始化模型loss从11.x左右下降。run_trainer_tp4pp2.sh
脚本。--share_folder true
使全局0号卡制作缓存数据。否则默认各台机器的0号卡独立制作缓存数据,index-cache/
,则额外指定的--data_cache
不生效,训练时优先加载默认缓存文件夹中的内容。PaddleNLP支持多个主流大模型的SFT、LoRA、Prefix Tuning等精调策略,提供统一、高效精调方案:
数据准备:
我们支持的精调数据格式是每行包含一个字典的json文件,每个字典包含以下字段:
src
: str, List(str)
, 模型的输入指令(instruction)、提示(prompt),模型应该执行的任务。tgt
: str, List(str)
, 模型的输出。样例数据:
{"src": "类型#裙*颜色#蓝色*风格#清新*图案#蝴蝶结", "tgt": "裙身处采用立体蝴蝶结装饰辅以蓝色条带点缀,令衣身造型饱满富有层次的同时为其注入一丝甜美气息。将女孩清新娇俏的一面衬托而出。"}
...
为了方便测试,我们也提供了广告生成数据集可以直接使用:
wget https://bj.bcebos.com/paddlenlp/datasets/examples/AdvertiseGen.tar.gz
tar -zxvf AdvertiseGen.tar.gz
全参精调:SFT
# 四卡llama SFT启动命令参考
python -u -m paddle.distributed.launch --gpus "0,1,2,3" finetune_generation.py ./llama/sft_argument.json
LoRA
# 单卡llama LoRA启动命令参考
python finetune_generation.py ./llama/lora_argument.json
Prefix Tuning
# 单卡llama Prefix Tuning启动命令参考
python finetune_generation.py ./llama/pt_argument.json
更多大模型精调分布式使用文档、训练细节和效果请参见大模型精调教程。
大模型量化将16位、32位浮点数的模型参数或激活量化为4位或8位整数能够有效降低模型存储空间和计算资源需求,同时加速推理速度。工具链量化算法包含:
PTQ。PaddleSlim 团队自研的自适应Shift-SmoothQuant量化算法,在SmoothQuant和Outlier Suppression+基础上
新增PieceWiseSearch参数搜索算法,对模型权重和激活分布进行调整,减少后续A8W8 PTQ量化损失。
GPTQ。GPTQ是业界主流的权重量化算法,可以将大模型权重进行4位整数无损量化,提高模型推理速度。
# PTQ 量化启动命令参考
python finetune_generation.py ./llama/ptq_argument.json
# GPTQ 量化启动命令参考
python finetune_generation.py ./llama/ptq_argument.json
更多技术细节和模型量化使用详见量化文档。
PaddleNLP除了提供常用模型推理外,还提供了高性能推理,内置动态插入和全环节算子融合策略,极大加快并行推理的速度。
# 动态图模型推理命令参考
python predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --data_file ./data/dev.json --dtype float16
# 静态图模型推理命令参考
# step1 : 静态图导出
python export_model.py --model_name_or_path meta-llama/Llama-2-7b-chat --output_path ./inference --dtype float16
# step2: 静态图推理
python predictor.py --model_name_or_path ./inference --data_file ./data/dev.json --dtype float16 --mode static
# 高性能动态图模型推理命令参考
python predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --dtype float16
# 高性能静态图模型推理命令参考
# step1 : 静态图导出
python export_model.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --output_path ./inference --dtype float16
# step2: 静态图推理
python predictor.py --model_name_or_path ./inference --inference_model --dtype "float16" --mode "static"
更多常用模型推理和高性能模型使用方法详见大模型推理文档。
我们提供了一套基于动态图推理的简单易用UI服务化部署脚本,用户可以快速部署服务化推理。
python -m paddle.distributed.launch --gpus "0,1,2,3,4,5,6,7" flask_server.py \
--model_name_or_path meta-llama/Llama-2-7b-chat \
--port 8010 \
--flask_port 8011 \
--dtype "float16"
port
: Gradio UI 服务端口号,默认8011。flask_port
: Flask服务端口号,默认8010。此外,如果想通过API脚本的方式跑推理,可参考:./request_flask_server.py
文件。
PaddleNLP 提供了可自动将 PyTorch 相关的权重转化为 Paddle 权重的接口,代码如下:
from paddlenlp.transformers import AutoModelForCausalLM
AutoModelForCausalLM.from_pretrained("/path/to/pytorch/model", convert_from_torch=True,dtype="float16")
更多细节请参考torch2paddle文档
👑 Easy-to-use and powerful NLP library with 🤗 Awesome model zoo, supporting wide-range of NLP tasks from research to industrial applications, including 🗂Text Classification, 🔍 Neural Search, ❓ Question Answering, ℹ️ Information Extraction, 📄 Documen
https://paddlenlp.readthedocs.io/
Python C++ Cuda Shell Markdown other
Dear OpenI User
Thank you for your continuous support to the Openl Qizhi Community AI Collaboration Platform. In order to protect your usage rights and ensure network security, we updated the Openl Qizhi Community AI Collaboration Platform Usage Agreement in January 2024. The updated agreement specifies that users are prohibited from using intranet penetration tools. After you click "Agree and continue", you can continue to use our services. Thank you for your cooperation and understanding.
For more agreement content, please refer to the《Openl Qizhi Community AI Collaboration Platform Usage Agreement》