From 21b824d094b288985da7e3b1bc2bdbd6314f31e0 Mon Sep 17 00:00:00 2001
From: Sunny-bot1 <592045536@qq.com>
Date: Wed, 21 Aug 2024 15:03:18 +0800
Subject: [PATCH 1/9] update inference docs
---
llm/docs/inference.md | 246 +++++++++++++++++++++++-------------------
1 file changed, 134 insertions(+), 112 deletions(-)
diff --git a/llm/docs/inference.md b/llm/docs/inference.md
index 4af8379d74e5..655edd377be4 100644
--- a/llm/docs/inference.md
+++ b/llm/docs/inference.md
@@ -1,39 +1,34 @@
# 大模型推理教程
-PaddleNLP除了提供常用模型推理外,还提供了高性能推理,内置动态插入和全环节算子融合策略,极大加快并行推理的速度。
+PaddleNLP以一站式体验、极致性能为设计理念,实现大模型的快速推理:
-git clone 代码到本地,即可开始。
+* 提供常用模型推理,方便用户快速验证模型推理效果。
+* 提供高性能推理,内置动态插入和全环节算子融合策略,极大加快并行推理的速度。
+* 实现BlockAttention,在保持高性能推理和动态插入的基础上可以动态地为CacheKV分配存储空间,极大地节省显存。
-```bash
- git clone https://github.com/PaddlePaddle/PaddleNLP.git
- # pip install ./PaddleNLP 使用develop版本
- cd PaddleNLP/llm
- # 到达运行目录
-```
-## 1. 常用模型推理
-PaddleNLP 提供了动态图推理和静态图推理两种方式,方便用户快速验证模型推理效果(包含LoRA、PrefixTuning)
+## 1. 常用推理
-### 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`,详见推理参数减少。
+PaddleNLP 为常用模型提供了动态图推理和静态图推理两种方式(包含LoRA、PrefixTuning),用户能够根据自己的需求灵活的选择最适合的推理方式,从而快速验证模型的推理效果。命令参数详情请参考模型页面介绍。
-### 1.2 静态图推理
+### 1.1 动态图推理
-```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
-```
+动态图推理是一种灵活的推理方式:
+
+- 即时执行:每个操作都会立即执行,便于调试和可视化。
+- 灵活性高:支持动态变化的网络结构。
+
+### **1.2 静态图推理**
+
+静态图推理是一种高效的推理方式(在运行静态图之前需将动态图转为静态图):
+
+- 预先编译:整个计算图在执行前被完整编译,有利于全局优化,性能通常优于动态图。
+- 部署便利:更适合产品化部署,特别是在对性能要求较高的场景。
-## 2. 高性能模型推理
+## 2. 高性能推理
+
+PaddleNLP提供了常用模型的高性能推理,在推理过程中动态地插入或调整计算图中的节点或操作,同时在推理过程的各个阶段实现了算子融合技术,减少内存访问和计算开销,从而全面提升推理性能。高性能推理的内置动态插入和全环节算子融合策略,隐藏了底层实现的细节,实现了开箱即用高性能并行推理能力。同时为了进一步提升推理的吞吐,我们基于PageAttention的思想设计并实现了BlockAttention,将 KV 缓存划分为固定大小的块(blocks),从而可以更灵活的分配cachekv。在保持高性能推理和动态插入的基础上可以动态地为cachekv分配存储空间,极大地节省显存,从而在同一时刻处理更多的query以获得吞吐的提升。
-高性能推理内置动态插入和全环节算子融合策略,隐藏了底层实现的细节,实现了开箱即用高性能并行推理能力。
@@ -52,126 +47,150 @@ python ./predict/predictor.py --model_name_or_path ./inference --data_file ./dat
+### 2.1 模型支持
+
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) | 🚧 | 🚧 | 🚧 | 🚧 |
+| Model | FP16/BF16 | WINT8 | INT8-A8W8C16 | FP8-A8W8C16 | INT8-A8W8C8 | FP8-A8W8C8 |
+|----------------------------------|-----------|-------|--------------|-------------|-------------|------------|
+| [LLaMA1/2/3/3.1](../config/llama)| ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
+| [Qwen1.5/2](../config/qwen) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
+| [Qwen-Moe]() | ✅ | 🚧 | ❌ | ❌ | ❌ | ❌ |
+| [Mixtral]() | ✅ | 🚧 | ❌ | ❌ | ❌ | ❌ |
+| [ChatGLM](../config/chatglm) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
+| [ChatGLM2](../config/chatglm2) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
+| [Bloom](../config/bloom) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
+| [GPT-3](../config/gpt-3) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
+| [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进行高性能推理的命令参考。
+* INT8-A8W8C16:指使用PTQ对线性层的激活和权重都量化为INT8的模型。
+* FP8-A8W8C16:指使用PTQ对线性层的激活和权重都量化为FP8的模型。
+* INT8-A8W8C8:指使用PTQ对Cache KV、线性层的激活和权重都量化为INT8的模型。
+* FP8-A8W8C8:指使用PTQ对Cache KV、线性层的激活和权重都量化为FP8的模型。
-### 2.2 环境准备
+### 2.2 硬件&精度支持
-- PaddleNLP develop
-- PaddlePaddle develop
+PaddleNLP 提供了多种硬件平台和精度支持,包括:
-PaddleNLP 针对于Transformer 系列编写了高性能自定义算子,提升模型在推理和解码过程中的性能,使用之前需要预先安装自定义算子库:
+| Precision | Ada | Ampere | Turing | Volta | x86 CPU | XPU |
+|----------------|-----|--------|--------|-------|---------|-----|
+| FP32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
+| FP16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
+| BF16 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
+| INT8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅|
+| INT4 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
+| FP8 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
-```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.4 性能优化选项
-#### 2.3.1 动态图推理
+#### Inference Model
+`--inference_model` : 开启高性能推理模式
-```shell
-# 动态图模型推理命令参考
-python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --dtype float16
+#### Block Attention
+`--block_attn` : 为了进一步提升推理的吞吐,我们基于PageAttention的思想设计并实现了BlockAttention,在保持高性能推理和动态插入的基础上可以动态地为cachekv分配存储空间,极大地节省显存,从而在同一时刻处理更多的query以获得吞吐的提升。
-#Cpu设备使用avx指令动态图推理参考
-python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --dtype float32 --avx_mode --avx_type "fp16" --device "cpu"
+#### Weight Only
+`--quant_type weight_only_int8` : 即对权重进行INT8量化的模型。
-# 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
+`--quant_type a8w8` :
-# 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
+#### Cache KV Quantization
+`--quant_type a8w8c8` :
-# Cpu动转静avx指令动转静参考
-python ./predict/export_model.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --output_path ./inference --dtype float32 --avx_mode --avx_type "fp16" --device "cpu"
+`--cachekv_int8_type` : cachekv量化类型,支持dynamic和static两种模式。
-# 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
+### 2.5 性能分析选项
-# PTQ-A8W8动转静命令参考
-python ./predict/export_model.py --model_name_or_path checkpoints/llama_ptq_ckpts --inference_model --output_path ./inference --dtype float16
+#### benchmark
+
+`--benchmark` : 开启性能分析模式
+
+#### src_length & max_length
+
+`--src_length`: 模型输入上下文最大token长度,默认为1024。
+
+`--max_length`:模型输入(上下文+生成内容)的最大token长度, 默认为2048。
+
+#### batch_size
+
+`--batch_size` : 批处理大小,默认为8。该参数越大,占用显存越高;该参数越小,占用显存越低。
+
+
+
+
+
+## 3. 环境准备
+- [PaddlePaddle develop](https://github.com/PaddlePaddle/Paddle)
+- PaddleNLP develop
+
+git clone 代码到本地,即可开始。
+
+```bash
+git clone https://github.com/PaddlePaddle/PaddleNLP.git
+# pip install ./PaddleNLP 使用develop版本
+cd PaddleNLP/llm
+# 到达运行目录
```
-**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:静态图推理**
+PaddleNLP 针对于Transformer 系列编写了高性能自定义算子,提升模型在推理和解码过程中的性能,如需使用高性能推理模式需要预先安装自定义算子库:
+
```shell
-# 静态图推理命令参考
-python ./predict/predictor.py --model_name_or_path ./inference --inference_model --quant_type weight_only_int8 --dtype "float16" --mode "static"
+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
+```
-#Cpu使用avx指令静态图推理参考
-python ./predict/predictor.py --model_name_or_path ./inference --inference_model --avx_mode --avx_type "fp16" --dtype "float32" --mode "static" --device "cpu"
+## 4. 快速开始
+安装PaddleNLP
-# 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
+```bash
+cd PaddleNLP
+python setup.py install
+```
-# 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
+到达运行目录
+```bash
+cd PaddleNLP/llm
+```
-# PTQ-A8W8静态图推理命令参考
-# 以下环境变量用于开启int8矩阵乘的算法选择以获得更快的推理速度,打开之后第一次执行会执行算法选择从而导致速度较慢。
-# 开启后会在计算int8 matmul时启用cuBLASLt全局搜索找寻最优配置
-export FLAGS_enable_blaslt_global_search=1
-# 开启后会在离线文件中加载int8 matmul配置(使用方式可参考https://github.com/PaddlePaddle/Paddle/pull/66132描述)
-export FLAGS_cublaslt_device_best_config=/path/to/file
-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"
+### 4.1. 常用推理
+#### 4.1.1 动态图推理
+```shell
+# 动态图模型推理命令参考
+python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --data_file ./data/dev.json --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`。
-4. A8W8推理传入的 `model_name_or_path` 为PTQ校准产出的量化模型。
+对于LoRA、PrefixTuning 模型只需额外传入相应的lora_path或prefix_path即可,如:--lora_path ./checkpoints/llama_lora_ckpts或--prefix_path ./checkpoints/llama_prefix_ckpts,详见推理参数介绍。
-### 2.4 打开BlockAttention的高性能推理
+#### 4.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.4.1 动态图推理
+### 4.2 高性能推理
+#### 4.2.1 动态图推理
```shell
# 动态图模型推理命令参考
@@ -190,7 +209,7 @@ python ./predict/predictor.py --model_name_or_path checkpoints/llama_ptq_ckpts -
python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --dtype float16 --block_attn --cachekv_int8_type dynamic
```
-#### 2.4.2 静态图推理
+#### 4.2.2 静态图推理
**step1:动转静**
```shell
# 动转静命令参考
@@ -237,7 +256,10 @@ python ./predict/predictor.py --model_name_or_path ./inference --inference_mode
3. `cachekv_int8_type`可选`dynamic`和`static`两种,`static`需要额外的cache kv的scale校准表。
-## 3. 推理参数介绍
+
+更多模型推理教程,参考[examples](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples)
+
+## 5. 推理参数介绍
- `model_name_or_path`: 必须,预训练模型名称或者本地的模型路径,用于热启模型和分词器,默认为None。
- `batch_size`: 批处理大小,默认为8。该参数越大,占用显存越高;该参数越小,占用显存越低。
From 1c0b0567812bf27152cffc1b4898461af46675a4 Mon Sep 17 00:00:00 2001
From: Sunny-bot1 <592045536@qq.com>
Date: Wed, 21 Aug 2024 15:11:48 +0800
Subject: [PATCH 2/9] update
---
llm/docs/inference.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/llm/docs/inference.md b/llm/docs/inference.md
index 655edd377be4..0acdf500bd76 100644
--- a/llm/docs/inference.md
+++ b/llm/docs/inference.md
@@ -7,7 +7,7 @@ PaddleNLP以一站式体验、极致性能为设计理念,实现大模型的
* 实现BlockAttention,在保持高性能推理和动态插入的基础上可以动态地为CacheKV分配存储空间,极大地节省显存。
-## 1. 常用推理
+## 1. 常用模型推理
PaddleNLP 为常用模型提供了动态图推理和静态图推理两种方式(包含LoRA、PrefixTuning),用户能够根据自己的需求灵活的选择最适合的推理方式,从而快速验证模型的推理效果。命令参数详情请参考模型页面介绍。
@@ -25,7 +25,7 @@ PaddleNLP 为常用模型提供了动态图推理和静态图推理两种方式
- 预先编译:整个计算图在执行前被完整编译,有利于全局优化,性能通常优于动态图。
- 部署便利:更适合产品化部署,特别是在对性能要求较高的场景。
-## 2. 高性能推理
+## 2. 高性能模型推理
PaddleNLP提供了常用模型的高性能推理,在推理过程中动态地插入或调整计算图中的节点或操作,同时在推理过程的各个阶段实现了算子融合技术,减少内存访问和计算开销,从而全面提升推理性能。高性能推理的内置动态插入和全环节算子融合策略,隐藏了底层实现的细节,实现了开箱即用高性能并行推理能力。同时为了进一步提升推理的吞吐,我们基于PageAttention的思想设计并实现了BlockAttention,将 KV 缓存划分为固定大小的块(blocks),从而可以更灵活的分配cachekv。在保持高性能推理和动态插入的基础上可以动态地为cachekv分配存储空间,极大地节省显存,从而在同一时刻处理更多的query以获得吞吐的提升。
From 3a0d2e6feebf360abbb3dd15460c64571a15fe96 Mon Sep 17 00:00:00 2001
From: Sunny-bot1 <592045536@qq.com>
Date: Mon, 26 Aug 2024 20:54:19 +0800
Subject: [PATCH 3/9] update
---
README.md | 12 ++
docs/llm/docs/inference.md | 2 +-
llm/README.md | 25 +--
llm/docs/inference.md | 282 -----------------------------
llm/docs/predict/best_practices.md | 21 +++
llm/docs/predict/inference.md | 216 ++++++++++++++++++++++
llm/docs/predict/installation.md | 26 +++
llm/docs/predict/llama.md | 120 ++++++++++++
llm/docs/predict/mixtral.md | 100 ++++++++++
llm/docs/predict/qwen.md | 94 ++++++++++
10 files changed, 595 insertions(+), 303 deletions(-)
delete mode 100644 llm/docs/inference.md
create mode 100644 llm/docs/predict/best_practices.md
create mode 100644 llm/docs/predict/inference.md
create mode 100644 llm/docs/predict/installation.md
create mode 100644 llm/docs/predict/llama.md
create mode 100644 llm/docs/predict/mixtral.md
create mode 100644 llm/docs/predict/qwen.md
diff --git a/README.md b/README.md
index e879cf8e8877..1e1e08dd7387 100644
--- a/README.md
+++ b/README.md
@@ -127,6 +127,18 @@ Unified Checkpoint 大模型存储格式在模型参数分布上支持动态扩
| Yuan2 | ✅ | ✅ | ✅ | 🚧 | 🚧 | 🚧 | 🚧 | ✅ |
------------------------------------------------------------------------------------------
+* 大模型推理已支持 LLaMA 系列、Qwen 系列、Mistral 系列、ChatGLM 系列、Bloom 系列和Baichuan 系列,支持Weight Only INT8及INT4推理,支持WAC(权重、激活、Cache KV)进行INT8、FP8量化的推理,【LLM】模型推理支持列表如下:
+
+| 模型名称/量化类型支持 | FP16/BF16 | WINT8 | WINT4 | INT8-A8W8 | FP8-A8W8 | INT8-A8W8C8 |
+|:--------------------------------------------:|:---------:|:-----:|:-----:|:---------:|:--------:|:-----------:|
+| [LLaMA](./llm/docs/predict/llama.md) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
+| [Qwen](./llm/docs/predict/qwen.md) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
+| [Qwen-Moe](./llm/docs/predict/qwen.md) | ✅ | ✅ | ✅ | 🚧 | 🚧 | 🚧 |
+| [Mixtral](./llm/docs/predict/mixtral.md) | ✅ | ✅ | ✅ | 🚧 | 🚧 | 🚧 |
+| ChatGLM | ✅ | ✅ | ✅ | 🚧 | 🚧 | 🚧 |
+| Bloom | ✅ | ✅ | ✅ | 🚧 | 🚧 | 🚧 |
+| BaiChuan | ✅ | ✅ | ✅ | ✅ | ✅ | 🚧 |
+
## 安装
### 环境依赖
diff --git a/docs/llm/docs/inference.md b/docs/llm/docs/inference.md
index a2bd9deb8d77..7304fb84dd90 120000
--- a/docs/llm/docs/inference.md
+++ b/docs/llm/docs/inference.md
@@ -1 +1 @@
-../../../llm/docs/inference.md
\ No newline at end of file
+../../../llm/docs/predict/inference.md
\ No newline at end of file
diff --git a/llm/README.md b/llm/README.md
index 6b43c59482a0..e2aa6f7d7ee1 100644
--- a/llm/README.md
+++ b/llm/README.md
@@ -226,22 +226,7 @@ python run_finetune.py ./config/llama/ptq_argument.json
### 5. 推理
-PaddleNLP 除了提供常用模型推理外,还提供了高性能推理,内置动态插入和全环节算子融合策略,极大加快并行推理的速度。
-
-- **常用模型推理**:PaddleNLP 提供了动态图推理和静态图推理两种方式,方便用户快速验证模型推理效果(包含 LoRA、PrefixTuning)。
-
-```shell
-# 动态图模型推理命令参考
-python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --data_file ./data/dev.json --dtype float16
-
-# 静态图模型推理命令参考
-# 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
-```
-
-- **InferenceModel 高性能推理**:PaddleNLP 还提供了高性能推理模型加快并行推理的速度,同时支持 FP16、Prefix Tuning、WINT8、A8W8多种推理方式。
+PaddleNLP 提供高性能推理,内置动态插入和全环节算子融合策略,极大加快并行推理的速度,同时支持 FP16/BF16、WINT8、WINT4、A8W8、A8W8C8多种推理方式。

@@ -253,17 +238,17 @@ python ./predict/predictor.py --model_name_or_path ./inference --data_file ./dat
```shell
-# 高性能动态图模型推理命令参考
+# 动态图模型推理命令参考
python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --dtype float16
-# 高性能静态图模型推理命令参考
+# 静态图模型推理命令参考
# step1 : 静态图导出
python ./predict/export_model.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --output_path ./inference --dtype float16
# step2: 静态图推理
python ./predict/predictor.py --model_name_or_path ./inference --inference_model --dtype "float16" --mode "static"
```
-更多常用模型推理和高性能模型使用方法详见[大模型推理文档](./docs/inference.md)。
+更多模型推理使用方法详见[大模型推理文档](./docs/predict/inference.md)。
### 6. 服务化部署
@@ -287,7 +272,7 @@ python -m paddle.distributed.launch --gpus "0,1,2,3,4,5,6,7" ./predict/flask_ser
- `port`: Gradio UI 服务端口号,默认8011。
- `flask_port`: Flask 服务端口号,默认8010。
-- 其他参数请参见[推理文档](./docs/inference.md)中推理参数配置。
+- 其他参数请参见[推理文档](./docs/predict/inference.md)中推理参数配置。
此外,如果想通过 API 脚本的方式跑推理,可参考:`./predict/request_flask_server.py` 文件。
diff --git a/llm/docs/inference.md b/llm/docs/inference.md
deleted file mode 100644
index 0acdf500bd76..000000000000
--- a/llm/docs/inference.md
+++ /dev/null
@@ -1,282 +0,0 @@
-# 大模型推理教程
-
-PaddleNLP以一站式体验、极致性能为设计理念,实现大模型的快速推理:
-
-* 提供常用模型推理,方便用户快速验证模型推理效果。
-* 提供高性能推理,内置动态插入和全环节算子融合策略,极大加快并行推理的速度。
-* 实现BlockAttention,在保持高性能推理和动态插入的基础上可以动态地为CacheKV分配存储空间,极大地节省显存。
-
-
-## 1. 常用模型推理
-
-PaddleNLP 为常用模型提供了动态图推理和静态图推理两种方式(包含LoRA、PrefixTuning),用户能够根据自己的需求灵活的选择最适合的推理方式,从而快速验证模型的推理效果。命令参数详情请参考模型页面介绍。
-
-### 1.1 动态图推理
-
-动态图推理是一种灵活的推理方式:
-
-- 即时执行:每个操作都会立即执行,便于调试和可视化。
-- 灵活性高:支持动态变化的网络结构。
-
-### **1.2 静态图推理**
-
-静态图推理是一种高效的推理方式(在运行静态图之前需将动态图转为静态图):
-
-- 预先编译:整个计算图在执行前被完整编译,有利于全局优化,性能通常优于动态图。
-- 部署便利:更适合产品化部署,特别是在对性能要求较高的场景。
-
-## 2. 高性能模型推理
-
-PaddleNLP提供了常用模型的高性能推理,在推理过程中动态地插入或调整计算图中的节点或操作,同时在推理过程的各个阶段实现了算子融合技术,减少内存访问和计算开销,从而全面提升推理性能。高性能推理的内置动态插入和全环节算子融合策略,隐藏了底层实现的细节,实现了开箱即用高性能并行推理能力。同时为了进一步提升推理的吞吐,我们基于PageAttention的思想设计并实现了BlockAttention,将 KV 缓存划分为固定大小的块(blocks),从而可以更灵活的分配cachekv。在保持高性能推理和动态插入的基础上可以动态地为cachekv分配存储空间,极大地节省显存,从而在同一时刻处理更多的query以获得吞吐的提升。
-
-
-

-
-
-
- 飞桨高性能推理算子融合示意图
-
-
-
-
-

-
-
-
- 动态插入图解 & 飞桨高性能模型推理性能图
-
-
-
-### 2.1 模型支持
-
-PaddleNLP 中已经添加高性能推理模型相关实现,支持:
-
-| Model | FP16/BF16 | WINT8 | INT8-A8W8C16 | FP8-A8W8C16 | INT8-A8W8C8 | FP8-A8W8C8 |
-|----------------------------------|-----------|-------|--------------|-------------|-------------|------------|
-| [LLaMA1/2/3/3.1](../config/llama)| ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
-| [Qwen1.5/2](../config/qwen) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
-| [Qwen-Moe]() | ✅ | 🚧 | ❌ | ❌ | ❌ | ❌ |
-| [Mixtral]() | ✅ | 🚧 | ❌ | ❌ | ❌ | ❌ |
-| [ChatGLM](../config/chatglm) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
-| [ChatGLM2](../config/chatglm2) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
-| [Bloom](../config/bloom) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
-| [GPT-3](../config/gpt-3) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
-| [BaiChuan-7B](../config/baichuan) | ✅ | ✅ | 🚧 | ❌ | ❌ | ❌ |
-| [BaiChuan2-7B](../config/baichuan) | ✅ | ✅ | 🚧 | ❌ | ❌ | ❌ |
-| [BaiChuan2-13B](../config/baichuan) | 🚧 | 🚧 | 🚧 | ❌ | ❌ | ❌ |
-
-* ✅: Supported
-
-* 🚧: In Progress
-
-* ❌: Not Supported
-
-* WINT8:指Weight-Only Quantization INT8,即对权重进行INT8量化的模型。
-
-* INT8-A8W8C16:指使用PTQ对线性层的激活和权重都量化为INT8的模型。
-* FP8-A8W8C16:指使用PTQ对线性层的激活和权重都量化为FP8的模型。
-* INT8-A8W8C8:指使用PTQ对Cache KV、线性层的激活和权重都量化为INT8的模型。
-* FP8-A8W8C8:指使用PTQ对Cache KV、线性层的激活和权重都量化为FP8的模型。
-
-### 2.2 硬件&精度支持
-
-PaddleNLP 提供了多种硬件平台和精度支持,包括:
-
-| Precision | Ada | Ampere | Turing | Volta | x86 CPU | XPU |
-|----------------|-----|--------|--------|-------|---------|-----|
-| FP32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
-| FP16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
-| BF16 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
-| INT8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅|
-| INT4 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
-| FP8 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
-
-
-### 2.4 性能优化选项
-
-#### Inference Model
-`--inference_model` : 开启高性能推理模式
-
-#### Block Attention
-`--block_attn` : 为了进一步提升推理的吞吐,我们基于PageAttention的思想设计并实现了BlockAttention,在保持高性能推理和动态插入的基础上可以动态地为cachekv分配存储空间,极大地节省显存,从而在同一时刻处理更多的query以获得吞吐的提升。
-
-#### Weight Only
-`--quant_type weight_only_int8` : 即对权重进行INT8量化的模型。
-
-
-#### PTQ
-`--quant_type a8w8` :
-
-
-#### Cache KV Quantization
-`--quant_type a8w8c8` :
-
-`--cachekv_int8_type` : cachekv量化类型,支持dynamic和static两种模式。
-
-
-### 2.5 性能分析选项
-
-#### benchmark
-
-`--benchmark` : 开启性能分析模式
-
-#### src_length & max_length
-
-`--src_length`: 模型输入上下文最大token长度,默认为1024。
-
-`--max_length`:模型输入(上下文+生成内容)的最大token长度, 默认为2048。
-
-#### batch_size
-
-`--batch_size` : 批处理大小,默认为8。该参数越大,占用显存越高;该参数越小,占用显存越低。
-
-
-
-
-
-## 3. 环境准备
-- [PaddlePaddle develop](https://github.com/PaddlePaddle/Paddle)
-- PaddleNLP develop
-
-git clone 代码到本地,即可开始。
-
-```bash
-git clone https://github.com/PaddlePaddle/PaddleNLP.git
-# pip install ./PaddleNLP 使用develop版本
-cd PaddleNLP/llm
-# 到达运行目录
-```
-
-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
-```
-
-## 4. 快速开始
-安装PaddleNLP
-
-```bash
-cd PaddleNLP
-python setup.py install
-```
-
-到达运行目录
-```bash
-cd PaddleNLP/llm
-```
-
-
-### 4.1. 常用推理
-#### 4.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,详见推理参数介绍。
-
-
-#### 4.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
-```
-
-### 4.2 高性能推理
-#### 4.2.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_type dynamic
-```
-
-#### 4.2.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_type dynamic
-```
-
-**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 动态量化int8静态图推理命令参考
-python ./predict/predictor.py --model_name_or_path ./inference --inference_model --dtype "float16" --mode "static" --cachekv_int8_type dynamic --block_attn
-```
-**Note**:
-1. `quant_type`可选的数值有`weight_only_int8`,`weight_only_int4`,`a8w8`, `a8w8c8`。
-2. `a8w8`推理传入的 `model_name_or_path` 为PTQ校准产出的量化模型,需要额外的act和weight的scale校准表。
-3. `cachekv_int8_type`可选`dynamic`和`static`两种,`static`需要额外的cache kv的scale校准表。
-
-
-
-更多模型推理教程,参考[examples](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples)
-
-## 5. 推理参数介绍
-
-- `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_type`: 是否使用cachekv int8量化用于节省显存,可以是动态或者静态,默认值为None。
diff --git a/llm/docs/predict/best_practices.md b/llm/docs/predict/best_practices.md
new file mode 100644
index 000000000000..c5cb66ced82b
--- /dev/null
+++ b/llm/docs/predict/best_practices.md
@@ -0,0 +1,21 @@
+# 最佳实践
+
+PaddleNLP 提供了多种环境变量,用于优化推理性能和资源使用。下面提供一些调整 PaddleNLP 推理性能的最佳实践。
+
+**GEMM 优化**
+
+- `FLAGS_enable_blaslt_global_search`:int8 gemm是否开启全局调优,默认值为0,表示不开启。设置为1,PaddleNLP 会在推理过程中使用`FLAGS_cublaslt_device_best_config`中记录的最优GEMM配置。
+
+- `FLAGS_cublaslt_device_best_config`:指向性能最优的int8 gemm配置文件,默认值为""。配置文件可以通过`PaddleNLP/csrc/generation/test_tune_cublaslt_gemm.py`产出,该脚本会自动搜索当前输入大小下cuBLASLt提供的最优gemm配置并将结果记录下来。
+
+**GQA 优化**
+
+- `FLAGS_use_xqa_optim`:gpa是否开启xqa优化,默认值为0,表示不开启。gqa模型(如llama3/3.1、qwen2)设为1性能会更好。
+
+**显存优化**
+
+- `FLAGS_allocator_strategy`:显存管理策略,默认值为 `auto_growth`。可优先设为`naive_best_fit`,若显存oom可配置为`auto_growth`。
+
+- `FLAGS_fraction_of_gpu_memory_to_use`:GPU显存使用率,默认值为0.9。设置为0.9即可。
+
+- `FLAGS_gemm_use_half_precision_compute_type`:是否使用半精度浮点数计算,默认值为0。设置为0即可。
diff --git a/llm/docs/predict/inference.md b/llm/docs/predict/inference.md
new file mode 100644
index 000000000000..7fb852c6d97b
--- /dev/null
+++ b/llm/docs/predict/inference.md
@@ -0,0 +1,216 @@
+# 大模型推理教程
+
+PaddleNLP以一站式体验、极致性能为设计理念,实现大模型的快速推理。
+
+PaddleNLP大模型推理构建了高性能推理方案:
+
+- 内置动态插入和全环节算子融合策略
+
+- 支持PageAttention、FlashDecoding优化
+
+- 支持Weight Only INT8及INT4推理,支持权重、激活、Cache KV进行INT8、FP8量化的推理
+
+- 提供动态图推理和静态图推理两种方式
+
+
+PaddleNLP大模型推理提供压缩、推理、服务全流程体验 :
+
+- 提供多种PTQ技术,提供WAC(权重/激活/缓存)灵活可配的量化能力,支持INT8、FP8、4Bit量化能力
+
+- 支持多硬件大模型推理,包括[昆仑XPU](../../xpu/llama/README.md)、[昇腾NPU](../../npu/llama/README.md)、[海光K100](../dcu_install.md)、[燧原GCU](../../gcu/llama/README.md)、[X86 CPU](../../../csrc/cpu/README.md)等
+
+- 提供面向服务器场景的部署服务,支持连续批处理(continuous batching)、流式输出等功能,支持HTTP、RPC、RESTful多种Clent端形式
+
+
+PaddleNLP大模型推理支持如下主流开源大模型:
+
+- 基于Transformer的大模型(如Llama、Qwen)
+
+- 混合专家大模型(如Mixtral)
+
+
+## 1. 模型支持
+
+PaddleNLP 中已经添加高性能推理模型相关实现,支持:
+| Models | Example Models |
+|--------|----------------|
+|Llama 3.1, Llama 3, Llama 2|`meta-llama/Meta-Llama-3-8B`, `meta-llama/Meta-Llama-3.1-8B`, `meta-llama/Meta-Llama-3.1-405B`, etc.|
+|Qwen 2| `Qwen/Qwen2-1.5B`, `Qwen/Qwen2-7B`, `Qwen/Qwen2-72B`, etc|
+|Qwen-Moe| `Qwen/Qwen1.5-MoE-A2.7B`, etc|
+|Mixtral| `mistralai/Mixtral-8x7B-Instruct-v0.1`, etc|
+|ChatGLM 3, ChatGLM 2| `THUDM/chatglm3-6b`, `THUDM/chatglm2-6b`, etc|
+|Baichuan 3, Baichuan 2, Baichuan|`baichuan-inc/Baichuan2-7B-Base`, `baichuan-inc/Baichuan2-7B-Chat` , etc|
+|Bloom|`bigscience/bloom-560m`, `bigscience/bloom-1b1`, `bigscience/bloom-3b`, etc|
+
+
+## 2. 硬件&精度支持
+
+PaddleNLP 提供了多种硬件平台和精度支持,包括:
+
+| Precision | Ada | Ampere | Turing | Volta | 昆仑XPU | 昇腾NPU | 海光K100 | 燧原GCU | x86 CPU |
+|----------------|-----|--------|--------|-------|--------|---------|---------|--------|---------|
+| FP32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
+| FP16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
+| BF16 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
+| INT8 | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ |
+| FP8 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
+
+
+## 3. 推理参数
+
+PaddleNLP 提供了多种参数,用于配置推理模型和优化推理性能。
+
+### 3.1 常规参数
+
+- `model_name_or_path`: 必需,预训练模型名称或者本地的模型路径,用于热启模型和分词器,默认为None。
+
+- `dtype`: 必需,模型参数dtype,默认为None。如果没有传入`lora_path`、`prefix_path`则必须传入。
+
+- `lora_path`: LoRA参数和配置路径,对LoRA参数进行初始化,默认为None。
+
+- `prefix_path`: Prefix Tuning参数和配置路径,对Prefix Tuning参数进行初始化,默认为None。
+
+- `batch_size`: 批处理大小,默认为1。该参数越大,占用显存越高;该参数越小,占用显存越低。
+
+- `data_file`: 待推理json文件,默认为None。
+
+- `output_file`: 保存推理结果文件,默认为output.json。
+
+- `device`: 运行环境,默认为gpu。可选的数值有`cpu`, `gpu`, `xpu`。
+
+- `model_type`: 初始化不同类型模型,gpt-3: GPTForCausalLM; ernie-3.5-se: Ernie35ForCausalLM; 默认为 None。
+
+- `mode`: 使用动态图或者静态图推理,可选值有`dynamic`、 `static`,默认为`dynamic`。
+
+- `avx_model`: 当使用CPU推理时,是否使用AvxModel,默认为False。参考[CPU推理教程]()。
+
+- `avx_type`: avx计算类型,默认为None。可选的数值有`fp16`、 `bf16`。
+
+- `src_length`: 模型输入上下文最大token长度,默认为1024。
+
+- `max_length`:模型输入(上下文+生成内容)的最大token长度, 默认为2048。
+
+
+### 3.2 性能优化参数
+
+- `inference_model`: 是否使用 Inference Model 推理,默认值为 False。Inference Model 内置动态插入和全环节算子融合策略,开启后性能更优。
+
+- `block_attn`: 是否使用 Block Attention 推理, 默认值为False。Block Attention 是基于 PageAttention 的思想设计并实现的,在保持高性能推理和动态插入的基础上可以动态地为 cachekv 分配存储空间,极大地节省显存并提升推理的吞吐。
+
+- `block_size`: 如果使用 Block Attention 推理,指定一个 Block 可以存储的 token 数量,默认值为64。
+
+
+### 3.3 量化参数
+
+PaddleNLP 提供了多种量化策略,支持Weight Only INT8及INT4推理,支持WAC(权重、激活、Cache KV)进行INT8、FP8量化的推理
+
+- `quant_type`: 是否使用量化推理,默认值为None。可选的数值有`weight_only_int8`、`weight_only_int4`、`a8w8`和`a8w8_fp8`。`a8w8`与`a8w8_fp8`需要额外的act和weight的scale校准表,推理传入的 `model_name_or_path` 为PTQ校准产出的量化模型。量化模型导出参考[大模型量化教程](../quantization.md)。
+
+- `cachekv_int8_type`: 是否使用cachekv int8量化,默认值为None。可选`dynamic`和`static`两种,`static`需要额外的cache kv的scale校准表,传入的 `model_name_or_path` 为PTQ校准产出的量化模型。量化模型导出参考[大模型量化教程](../quantization.md)。
+
+
+### 3.4 解码策略参数
+
+- `decode_strategy`: 推理解码策略,默认值为`sampling`,可选的数值有`greedy_search`、`beam_search`和`sampling`。
+
+- `top_k`: “采样”策略中为 top-k 过滤保留的最高概率标记的数量。默认值为1,等价于贪心策略。
+
+- `top_p`:“采样”策略中 top-p 过滤的累积概率。默认值为1.0,表示不起作用。
+
+- `temperature`:“采样”策略中会对输出logit除以temperature。默认值为1.0,表示不起作用。
+
+### 3.4 性能分析参数
+
+- `benchmark`: 是否开启性能分析,默认值为False。如果设为true,会将模型输入填充为src_length并强制解码到max_length,并计算模型推理吞吐量、记录推理时间。
+
+
+## 4. 快速开始
+
+### 4.1 环境准备
+
+git clone 代码到本地:
+
+```shell
+git clone https://github.com/PaddlePaddle/PaddleNLP.git
+export PYTHONPATH=/path/to/PaddleNLP:$PYTHONPATH
+```
+
+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
+#DCU设备安装自定义算子
+cd ./paddlenlp/csrc && python setup_hip.py install
+```
+
+到达运行目录,即可开始:
+
+```shell
+cd PaddleNLP/llm
+```
+
+### 4.2 推理示例
+
+下面给出Llama2-7B的动态图推理示例:
+
+```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 --quant_type a8w8
+
+# PTQ-A8W8C8推理命令参考
+python ./predict/predictor.py --model_name_or_path checkpoints/llama_ptq_ckpts --inference_model --dtype float16 --block_attn --quant_type a8w8 --cachekv_int8_type static
+
+# CacheKV 动态量化推理命令参考
+python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --inference_model --dtype float16 --block_attn --cachekv_int8_type dynamic
+```
+
+**Note:**
+
+1. `quant_type`可选的数值有`weight_only_int8`、`weight_only_int4`、`a8w8`和`a8w8_fp8`。
+2. `a8w8`与`a8w8_fp8`需要额外的act和weight的scale校准表,推理传入的 `model_name_or_path` 为PTQ校准产出的量化模型。量化模型导出参考[大模型量化教程](../quantization.md)。
+3. `cachekv_int8_type`可选`dynamic`和`static`两种,`static`需要额外的cache kv的scale校准表,传入的 `model_name_or_path` 为PTQ校准产出的量化模型。量化模型导出参考[大模型量化教程](../quantization.md)。
+
+更多大模型推理教程,参考:
+
+- [llama](./llama.md)
+- [qwen](./qwen.md)
+- [mixtral](./mixtral.md)
+
+环境准备,参考:
+
+- [安装教程](./installation.md)
+
+获取最佳推理性能:
+
+- [最佳实践](./best_practices.md)
+
+更多压缩、服务化推理体验:
+
+- [大模型量化教程](../quantization.md)
+- [服务化部署教程](https://github.com/PaddlePaddle/FastDeploy/blob/develop/README_CN.md)
+
+更多硬件大模型推理教程:
+
+- [X86 CPU](../../../csrc/cpu/README.md)
+- [昆仑XPU](../../../csrc/xpu/README.md)
+- [昇腾NPU](../../npu/llama/README.md)
+- [海光DCU](../dcu_install.md)
+- [海光K100]()
+- [燧原GCU]()
+
+
+
diff --git a/llm/docs/predict/installation.md b/llm/docs/predict/installation.md
new file mode 100644
index 000000000000..3135e1ab8f0f
--- /dev/null
+++ b/llm/docs/predict/installation.md
@@ -0,0 +1,26 @@
+# 安装
+
+git clone 代码到本地:
+
+```shell
+git clone https://github.com/PaddlePaddle/PaddleNLP.git
+export PYTHONPATH=/path/to/PaddleNLP:$PYTHONPATH
+```
+
+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
+#DCU设备安装自定义算子
+cd PaddleNLP/csrc && python setup_hip.py install
+```
+
+到达运行目录,即可开始:
+
+```shell
+cd PaddleNLP/llm
+```
\ No newline at end of file
diff --git a/llm/docs/predict/llama.md b/llm/docs/predict/llama.md
new file mode 100644
index 000000000000..f3659cccb22e
--- /dev/null
+++ b/llm/docs/predict/llama.md
@@ -0,0 +1,120 @@
+# LLaMA
+
+本文档展示了如何在 PaddleNLP中构建和运行[LLaMA](https://llama.meta.com/) 系列大模型。
+
+## 模型介绍
+
+LLaMA 系列大模型是由 Meta AI 发布的一个开放且高效的大型基础语言模型。
+
+* [LLaMA 2](https://llama.meta.com/llama2/):2023年7月,Meta发布了LLaMA 2系列,有7B、13B、34B和70B四个版本。该版本实现了开源商用,降低了初创公司创建类似ChatGPT聊天机器人的成本。
+
+* [LLaMA 3](https://llama.meta.com/):2024年4月19日,Meta推出了Llama 3系列,包括8B和70B两个版本,400B的Llama-3还在训练中。该版本在多个基准测试中取得了全面进步,性能优异。
+
+* [LLaMA 3.1](https://llama.meta.com/):2024年7月23日,Meta发布了LLAMA 3.1 8B、70B、405B模型,进一步提升了模型的性能和效率。
+
+## 模型支持
+
+| Model |
+| :----------------------------: |
+| meta-llama/Llama-2-7b(-chat) |
+| meta-llama/Llama-2-13b(-chat) |
+| meta-llama/Llama-2-70b(-chat) |
+| meta-llama/Meta-Llama-3-8B(-Instruct) |
+| meta-llama/Meta-Llama-3-70B(-Instruct) |
+| meta-llama/Meta-Llama-3.1-8B(-Instruct) |
+| meta-llama/Meta-Llama-3.1-70B(-Instruct) |
+| meta-llama/Meta-Llama-3.1-405B(-Instruct) |
+
+
+## 模型推理
+
+以meta-llama/Meta-Llama-3-8B-Instruct单卡和meta-llama/Meta-Llama-3.1-405B-Instruct多卡为例。
+
+BF16推理
+
+```shell
+# 动态图模型推理
+python ./predict/predictor.py --model_name_or_path meta-llama/Meta-Llama-3-8B-Instruct --dtype bfloat16 --mode dynamic --inference_model 1 --block_attn 1
+
+# 动转静导出模型
+python predict/export_model.py --model_name_or_path meta-llama/Meta-Llama-3-8B-Instruct --output_path /path/to/exported_model --dtype bfloat16 --inference_model 1 --block_attn 1
+
+# 静态图推理
+python predict/predictor.py --model_name_or_path /path/to/exported_model --dtype bfloat16 --mode static --inference_model 1 --block_attn 1
+
+```
+
+WINT8推理
+
+```shell
+# 动态图
+python predict/predictor.py --model_name_or_path meta-llama/Meta-Llama-3-8B-Instruct --dtype bfloat16 --mode dynamic --inference_model 1 --block_attn 1 --quant_type weight_only_int8
+
+# 动转静导出模型
+python predict/export_model.py --model_name_or_path meta-llama/Meta-Llama-3-8B-Instruct --output_path /path/to/exported_model --dtype bfloat16 --inference_model 1 --block_attn 1 --quant_type weight_only_int8
+
+# 静态图推理
+python predict/predictor.py --model_name_or_path /path/to/exported_model --dtype bfloat16 --mode static --inference_model 1 --block_attn 1 --quant_type weight_only_int8
+```
+
+下面量化推理所需要的模型需要根据[大模型量化教程](../quantization.md)产出。
+
+INT8-A8W8推理
+
+```shell
+# 动态图推理
+python predict/predictor.py --model_name_or_path checkpoints/llama_ptq_ckpts --dtype bfloat16 --mode dynamic --inference_model 1 --block_attn 1 --quant_type a8w8
+
+# 动转静导出模型
+python predict/export_model.py --model_name_or_path checkpoints/llama_ptq_ckpts --output_path /path/to/exported_model --dtype bfloat16 --inference_model 1 --block_attn 1 --quant_type a8w8
+
+# 静态图推理
+python predict/predictor.py --model_name_or_path /path/to/exported_model --dtype bfloat16 --mode static --inference_model 1 --block_attn 1 --quant_type a8w8
+```
+
+INT8-A8W8C8推理
+
+```shell
+# 动态图
+python predict/predictor.py --model_name_or_path checkpoints/llama_ptq_ckpts --dtype bfloat16 --mode dynamic --inference_model 1 --block_attn 1 --quant_type a8w8 --cachekv_int8_type static
+
+# 动转静导出模型
+python predict/export_model.py --model_name_or_path checkpoints/llama_ptq_ckpts --output_path /path/to/exported_model --dtype bfloat16 --inference_model 1 --block_attn 1 --quant_type a8w8 --cachekv_int8_type static
+
+# 静态图推理
+python predict/predictor.py --model_name_or_path /path/to/exported_model --dtype bfloat16 --mode static --inference_model 1 --block_attn 1 --quant_type a8w8 --cachekv_int8_type static
+```
+
+FP8-A8W8推理
+```shell
+# 动态图
+python predict/predictor.py --model_name_or_path checkpoints/llama_ptq_ckpts --dtype bfloat16 --mode dynamic --inference_model 1 --block_attn 1 --quant_type a8w8_fp8
+
+# 动转静导出模型
+python predict/export_model.py --model_name_or_path checkpoints/llama_ptq_ckpts --output_path /path/to/exported_model --dtype bfloat16 --inference_model 1 --block_attn 1 --quant_type a8w8_fp8
+
+# 静态图推理
+python predict/predictor.py --model_name_or_path /path/to/exported_model --dtype bfloat16 --mode static --inference_model 1 --block_attn 1 --quant_type a8w8_fp8
+```
+
+405B INT8-A8W8C8 TP8推理
+
+```shell
+# 由于模型较大,可执行如下脚本预先下载模型
+from paddlenlp.transformers import AutoModelForCausalLM, AutoTokenizer
+from paddlenlp.generation import GenerationConfig
+model = AutoModelForCausalLM.from_pretrained("meta-llama/Meta-Llama-3.1-405B-Instruct")
+tokenizer = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3.1-405B-Instruct")
+generation_config = GenerationConfig.from_pretrained("meta-llama/Meta-Llama-3.1-405B-Instruct")
+```
+
+这里通过--use_fake_parameter使用fake parameters,如需要推理正确的量化模型,请自行参考[大模型量化教程](../quantization.md)进行量化。
+
+```shell
+# 导出模型 (可在predict/export_model.py中设置paddle.set_device("cpu"),通过内存导出模型)
+python -m paddle.distributed.launch --gpus "0,1,2,3,4,5,6,7" predict/export_model.py --model_name_or_path meta-llama/Meta-Llama-3.1-405B-Instruct --output_path /path/to/a8w8c8_tp8 --inference_model 1 --block_attn 1 --dtype bfloat16 --quant_type a8w8 --cachekv_int8_type static --use_fake_parameter 1
+
+# 推理
+python -m paddle.distributed.launch --gpus "0,1,2,3,4,5,6,7" predict/predictor.py --model_name_or_path /path/to/a8w8c8_tp8 --mode static --inference_model 1 --block_attn 1 --dtype bfloat16 --quant_type a8w8 --cachekv_int8_type static
+```
+
diff --git a/llm/docs/predict/mixtral.md b/llm/docs/predict/mixtral.md
new file mode 100644
index 000000000000..0e6c56d7c3e3
--- /dev/null
+++ b/llm/docs/predict/mixtral.md
@@ -0,0 +1,100 @@
+# Mixtral
+
+本文档展示了如何在 PaddleNLP中构建和运行 [Mxtral](https://huggingface.co/mistralai/Mixtral-8x7B-Instruct-v0.1) 模型。
+
+## 模型介绍
+
+
+* [Mistral系列](https://arxiv.org/abs/2310.06825) 是Mistral AI研发的基座大模型,使用了分组查询注意力和滑动窗口注意力机制来提高模型性能表现和推理速度,包括7B不同规模的Base和Instruct模型。
+* [Mixtral系列](https://arxiv.org/abs/2401.04088) 是Mistral AI采用MoE(Mixture of Experts)架构设计的基座大模型,在大多数基准测试中优于同级别的llama模型,MoE结合了多个专家模型的优势来解决问题,在推理中仅需激活少量专家就可以达到非常好的效果,相比于传统大模型减少了较多的计算量;目前开源模型包括8x7B和8x22B两种不同规模的Base和Instruct模型。
+
+## 模型支持
+
+| Model |
+| :-----------------------------: |
+| mistralai/Mixtral-8x7B-v0.1(-Instruct) |
+
+
+## 模型推理
+
+下面以Mixtral-8x7B-Instruct-v0.1两卡为例介绍整体推理流程。
+
+BF16推理
+
+```shell
+# 动态图模型推理命令参考
+export DEVICES=0,1
+python -m paddle.distributed.launch \
+ --gpus ${DEVICES} \
+ ./predict/predictor.py \
+ --model_name_or_path mistralai/Mixtral-8x7B-Instruct-v0.1 \
+ --dtype bfloat16 \
+ --mode "dynamic" \
+ --inference_model \
+ --block_attn
+
+# 动转静命令参考
+export DEVICES=0,1
+python -m paddle.distributed.launch \
+ --gpus ${DEVICES} \
+ ./predict/export_model.py \
+ --model_name_or_path mistralai/Mixtral-8x7B-Instruct-v0.1 \
+ --output_path ./inference \
+ --dtype bfloat16 \
+ --inference_model \
+ --block_attn
+
+# 静态图推理命令参考
+# 需要设置下面的环境变量,否则会导致多卡推理阻塞
+export FLAGS_dynamic_static_unified_comm=false
+export DEVICES=0,1
+python -m paddle.distributed.launch \
+ --gpus ${DEVICES} \
+ predict/predictor.py \
+ --model_name_or_path ./inference \
+ --dtype bfloat16 \
+ --mode "static" \
+ --inference_model \
+ --block_attn
+
+```
+
+WINT8推理
+```shell
+# Weight Only Int8 动态图推理参考
+export DEVICES=0,1
+python -m paddle.distributed.launch \
+ --gpus ${DEVICES} \
+ ./predict/predictor.py \
+ --model_name_or_path mistralai/Mixtral-8x7B-Instruct-v0.1 \
+ --dtype bfloat16 \
+ --quant_type "weight_only_int8" \
+ --mode "dynamic" \
+ --inference_model \
+ --block_attn
+
+# Weight Only Int8 动转静命令参考
+export DEVICES=0,1
+python -m paddle.distributed.launch \
+ --gpus ${DEVICES} \
+ ./predict/export_model.py \
+ --model_name_or_path mistralai/Mixtral-8x7B-Instruct-v0.1 \
+ --output_path ./inference \
+ --dtype bfloat16 \
+ --quant_type weight_only_int8 \
+ --inference_model \
+ --block_attn
+
+# Weight Only Int8 静态图推理命令参考
+export FLAGS_dynamic_static_unified_comm=false
+export DEVICES=0,1
+python -m paddle.distributed.launch \
+ --gpus ${DEVICES} \
+ predict/predictor.py \
+ --model_name_or_path ./inference \
+ --dtype bfloat16 \
+ --quant_type weight_only_int8 \
+ --mode "static" \
+ --inference_model \
+ --block_attn
+```
\ No newline at end of file
diff --git a/llm/docs/predict/qwen.md b/llm/docs/predict/qwen.md
new file mode 100644
index 000000000000..8811c800c08b
--- /dev/null
+++ b/llm/docs/predict/qwen.md
@@ -0,0 +1,94 @@
+# Qwen
+
+本文档展示了如何在 PaddleNLP中构建和运行[Qwen](https://huggingface.co/Qwen) 系列大模型。
+
+## 模型介绍
+
+* [通义千问(Qwen)](https://arxiv.org/abs/2205.01068) 是阿里云研发的通义千问大模型系列的模型, 包括 Qwen-1.8B、Qwen-7B、Qwen-14B和Qwen-72B等4个规模。Qwen 是基于 Transformer 的大语言模型, 在超大规模的预训练数据上进行训练得到。预训练数据类型多样,覆盖广泛,包括大量网络文本、专业书籍、代码等。
+
+* [通义千问(Qwen1.5)](https://qwenlm.github.io/blog/qwen1.5/) 是阿里云研发的通义千问系列模型升级版。Qwen1.5包括0.5B、1.8B、4B、7B、14B、32B、72B和110B共计8个不同规模的Base和Chat模型。
+
+* [通义千问(Qwen2)](https://qwenlm.github.io/blog/qwen2/) 是阿里云研发的通义千问系列模型升级版。Qwen2包括Qwen2-0.5B、Qwen2-1.5B、Qwen2-7B、Qwen2-57B-A14B 以及Qwen2-72B 共计5个不同规模的 Base 和 Instruct 模型。
+
+* [通义千问(Qwen-MoE)](https://qwenlm.github.io/blog/qwen2/) 是阿里云研发的通义千问系列模型升级版。Qwen-MoE包括Qwen1.5-MoE-A2.7B 以及 Qwen2-57B-A14B 共计2个不同规模的 Base、Chat 和 Instruct 模型。
+
+## 模型支持
+
+| Model |
+| :----------------------------: |
+| Qwen/Qwen2-0.5B(-Instruct) |
+| Qwen/Qwen2-1.5B(-Instruct) |
+| Qwen/Qwen2-7B(-Instruct) |
+| Qwen/Qwen1.5-MoE-A2.7B(-Chat) |
+
+
+## 模型推理
+
+以Qwen/Qwen2-1.5B-Instruct为例。
+
+BF16推理
+
+```shell
+# 动态图模型推理
+python ./predict/predictor.py --model_name_or_path Qwen/Qwen2-1.5B-Instruct --dtype bfloat16 --mode dynamic --inference_model 1 --block_attn 1
+
+# 动转静导出模型
+python predict/export_model.py --model_name_or_path Qwen/Qwen2-1.5B-Instruct --output_path /path/to/exported_model --dtype bfloat16 --inference_model 1 --block_attn 1
+
+# 静态图推理
+python predict/predictor.py --model_name_or_path /path/to/exported_model --dtype bfloat16 --mode static --inference_model 1 --block_attn 1
+
+```
+
+WINT8推理
+
+```shell
+# 动态图
+python predict/predictor.py --model_name_or_path Qwen/Qwen2-1.5B-Instruct --dtype bfloat16 --mode dynamic --inference_model 1 --block_attn 1 --quant_type weight_only_int8
+
+# 动转静导出模型
+python predict/export_model.py --model_name_or_path Qwen/Qwen2-1.5B-Instruct --output_path /path/to/exported_model --dtype bfloat16 --inference_model 1 --block_attn 1 --quant_type weight_only_int8
+
+# 静态图推理
+python predict/predictor.py --model_name_or_path /path/to/exported_model --dtype bfloat16 --mode static --inference_model 1 --block_attn 1 --quant_type weight_only_int8
+```
+
+下面量化推理所需要的模型需要根据[大模型量化教程](../quantization.md)产出。
+
+INT8-A8W8推理
+
+```shell
+# 动态图推理
+python predict/predictor.py --model_name_or_path checkpoints/qwen_ptq_ckpts --dtype bfloat16 --mode dynamic --inference_model 1 --block_attn 1 --quant_type a8w8
+
+# 动转静导出模型
+python predict/export_model.py --model_name_or_path checkpoints/qwen_ptq_ckpts --output_path /path/to/exported_model --dtype bfloat16 --inference_model 1 --block_attn 1 --quant_type a8w8
+
+# 静态图推理
+python predict/predictor.py --model_name_or_path /path/to/exported_model --dtype bfloat16 --mode static --inference_model 1 --block_attn 1 --quant_type a8w8
+```
+
+INT8-A8W8C8推理
+
+```shell
+# 动态图
+python predict/predictor.py --model_name_or_path checkpoints/qwen_ptq_ckpts --dtype bfloat16 --mode dynamic --inference_model 1 --block_attn 1 --quant_type a8w8 --cachekv_int8_type static
+
+# 动转静导出模型
+python predict/export_model.py --model_name_or_path checkpoints/qwen_ptq_ckpts --output_path /path/to/exported_model --dtype bfloat16 --inference_model 1 --block_attn 1 --quant_type a8w8 --cachekv_int8_type static
+
+# 静态图推理
+python predict/predictor.py --model_name_or_path /path/to/exported_model --dtype bfloat16 --mode static --inference_model 1 --block_attn 1 --quant_type a8w8 --cachekv_int8_type static
+```
+
+FP8-A8W8推理
+```shell
+# 动态图
+python predict/predictor.py --model_name_or_path checkpoints/qwen_ptq_ckpts --dtype bfloat16 --mode dynamic --inference_model 1 --block_attn 1 --quant_type a8w8_fp8
+
+# 动转静导出模型
+python predict/export_model.py --model_name_or_path checkpoints/qwen_ptq_ckpts --output_path /path/to/exported_model --dtype bfloat16 --inference_model 1 --block_attn 1 --quant_type a8w8_fp8
+
+# 静态图推理
+python predict/predictor.py --model_name_or_path /path/to/exported_model --dtype bfloat16 --mode static --inference_model 1 --block_attn 1 --quant_type a8w8_fp8
+```
From de7883fb7a38094343c2ed5990c3153e31e5d159 Mon Sep 17 00:00:00 2001
From: Sunny-bot1 <592045536@qq.com>
Date: Mon, 26 Aug 2024 21:02:41 +0800
Subject: [PATCH 4/9] update
---
llm/docs/dcu_install.md | 2 +-
llm/docs/predict/inference.md | 9 ++++-----
2 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/llm/docs/dcu_install.md b/llm/docs/dcu_install.md
index a484adf08d6d..578688761770 100644
--- a/llm/docs/dcu_install.md
+++ b/llm/docs/dcu_install.md
@@ -64,4 +64,4 @@ cd -
```
### 高性能推理:
-海光的推理命令与GPU推理命令一致,请参考[大模型推理教程](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/docs/inference.md).
\ No newline at end of file
+海光的推理命令与GPU推理命令一致,请参考[大模型推理教程](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/docs/predict/inference.md).
\ No newline at end of file
diff --git a/llm/docs/predict/inference.md b/llm/docs/predict/inference.md
index 7fb852c6d97b..bf038c6b7c20 100644
--- a/llm/docs/predict/inference.md
+++ b/llm/docs/predict/inference.md
@@ -205,12 +205,11 @@ python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --
更多硬件大模型推理教程:
-- [X86 CPU](../../../csrc/cpu/README.md)
-- [昆仑XPU](../../../csrc/xpu/README.md)
+- [昆仑XPU](../../xpu/llama/README.md)
- [昇腾NPU](../../npu/llama/README.md)
-- [海光DCU](../dcu_install.md)
-- [海光K100]()
-- [燧原GCU]()
+- [海光K100](../dcu_install.md)
+- [燧原GCU](../../gcu/llama/README.md)
+- [X86 CPU](../../../csrc/cpu/README.md)
From 595626db68e378fa12b389e04b1863c7e1c2196d Mon Sep 17 00:00:00 2001
From: Sunny-bot1 <592045536@qq.com>
Date: Mon, 26 Aug 2024 21:37:27 +0800
Subject: [PATCH 5/9] update
---
llm/docs/predict/llama.md | 10 +++++-----
llm/docs/predict/mixtral.md | 12 ++++++------
llm/docs/predict/qwen.md | 8 ++++----
3 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/llm/docs/predict/llama.md b/llm/docs/predict/llama.md
index f3659cccb22e..8f0016f0f047 100644
--- a/llm/docs/predict/llama.md
+++ b/llm/docs/predict/llama.md
@@ -4,7 +4,7 @@
## 模型介绍
-LLaMA 系列大模型是由 Meta AI 发布的一个开放且高效的大型基础语言模型。
+* LLaMA 系列大模型是由 Meta AI 发布的一个开放且高效的大型基础语言模型。
* [LLaMA 2](https://llama.meta.com/llama2/):2023年7月,Meta发布了LLaMA 2系列,有7B、13B、34B和70B四个版本。该版本实现了开源商用,降低了初创公司创建类似ChatGPT聊天机器人的成本。
@@ -33,7 +33,7 @@ LLaMA 系列大模型是由 Meta AI 发布的一个开放且高效的大型基
BF16推理
```shell
-# 动态图模型推理
+# 动态图推理
python ./predict/predictor.py --model_name_or_path meta-llama/Meta-Llama-3-8B-Instruct --dtype bfloat16 --mode dynamic --inference_model 1 --block_attn 1
# 动转静导出模型
@@ -47,7 +47,7 @@ python predict/predictor.py --model_name_or_path /path/to/exported_model --dtype
WINT8推理
```shell
-# 动态图
+# 动态图推理
python predict/predictor.py --model_name_or_path meta-llama/Meta-Llama-3-8B-Instruct --dtype bfloat16 --mode dynamic --inference_model 1 --block_attn 1 --quant_type weight_only_int8
# 动转静导出模型
@@ -75,7 +75,7 @@ python predict/predictor.py --model_name_or_path /path/to/exported_model --dtype
INT8-A8W8C8推理
```shell
-# 动态图
+# 动态图推理
python predict/predictor.py --model_name_or_path checkpoints/llama_ptq_ckpts --dtype bfloat16 --mode dynamic --inference_model 1 --block_attn 1 --quant_type a8w8 --cachekv_int8_type static
# 动转静导出模型
@@ -87,7 +87,7 @@ python predict/predictor.py --model_name_or_path /path/to/exported_model --dtype
FP8-A8W8推理
```shell
-# 动态图
+# 动态图推理
python predict/predictor.py --model_name_or_path checkpoints/llama_ptq_ckpts --dtype bfloat16 --mode dynamic --inference_model 1 --block_attn 1 --quant_type a8w8_fp8
# 动转静导出模型
diff --git a/llm/docs/predict/mixtral.md b/llm/docs/predict/mixtral.md
index 0e6c56d7c3e3..ea5d07e8731e 100644
--- a/llm/docs/predict/mixtral.md
+++ b/llm/docs/predict/mixtral.md
@@ -22,7 +22,7 @@
BF16推理
```shell
-# 动态图模型推理命令参考
+# 动态图推理
export DEVICES=0,1
python -m paddle.distributed.launch \
--gpus ${DEVICES} \
@@ -33,7 +33,7 @@ python -m paddle.distributed.launch \
--inference_model \
--block_attn
-# 动转静命令参考
+# 动转静导出模型
export DEVICES=0,1
python -m paddle.distributed.launch \
--gpus ${DEVICES} \
@@ -44,7 +44,7 @@ python -m paddle.distributed.launch \
--inference_model \
--block_attn
-# 静态图推理命令参考
+# 静态图推理
# 需要设置下面的环境变量,否则会导致多卡推理阻塞
export FLAGS_dynamic_static_unified_comm=false
export DEVICES=0,1
@@ -61,7 +61,7 @@ python -m paddle.distributed.launch \
WINT8推理
```shell
-# Weight Only Int8 动态图推理参考
+# 动态图推理
export DEVICES=0,1
python -m paddle.distributed.launch \
--gpus ${DEVICES} \
@@ -73,7 +73,7 @@ python -m paddle.distributed.launch \
--inference_model \
--block_attn
-# Weight Only Int8 动转静命令参考
+# 动转静导出模型
export DEVICES=0,1
python -m paddle.distributed.launch \
--gpus ${DEVICES} \
@@ -85,7 +85,7 @@ python -m paddle.distributed.launch \
--inference_model \
--block_attn
-# Weight Only Int8 静态图推理命令参考
+# 静态图推理
export FLAGS_dynamic_static_unified_comm=false
export DEVICES=0,1
python -m paddle.distributed.launch \
diff --git a/llm/docs/predict/qwen.md b/llm/docs/predict/qwen.md
index 8811c800c08b..27273d276485 100644
--- a/llm/docs/predict/qwen.md
+++ b/llm/docs/predict/qwen.md
@@ -29,7 +29,7 @@
BF16推理
```shell
-# 动态图模型推理
+# 动态图推理
python ./predict/predictor.py --model_name_or_path Qwen/Qwen2-1.5B-Instruct --dtype bfloat16 --mode dynamic --inference_model 1 --block_attn 1
# 动转静导出模型
@@ -43,7 +43,7 @@ python predict/predictor.py --model_name_or_path /path/to/exported_model --dtype
WINT8推理
```shell
-# 动态图
+# 动态图推理
python predict/predictor.py --model_name_or_path Qwen/Qwen2-1.5B-Instruct --dtype bfloat16 --mode dynamic --inference_model 1 --block_attn 1 --quant_type weight_only_int8
# 动转静导出模型
@@ -71,7 +71,7 @@ python predict/predictor.py --model_name_or_path /path/to/exported_model --dtype
INT8-A8W8C8推理
```shell
-# 动态图
+# 动态图推理
python predict/predictor.py --model_name_or_path checkpoints/qwen_ptq_ckpts --dtype bfloat16 --mode dynamic --inference_model 1 --block_attn 1 --quant_type a8w8 --cachekv_int8_type static
# 动转静导出模型
@@ -83,7 +83,7 @@ python predict/predictor.py --model_name_or_path /path/to/exported_model --dtype
FP8-A8W8推理
```shell
-# 动态图
+# 动态图推理
python predict/predictor.py --model_name_or_path checkpoints/qwen_ptq_ckpts --dtype bfloat16 --mode dynamic --inference_model 1 --block_attn 1 --quant_type a8w8_fp8
# 动转静导出模型
From 85a8ae7730fae265041e0c7ca9b44caa1581c834 Mon Sep 17 00:00:00 2001
From: Sunny-bot1 <592045536@qq.com>
Date: Tue, 27 Aug 2024 09:42:56 +0800
Subject: [PATCH 6/9] fix comments
---
README.md | 2 +-
llm/docs/predict/inference.md | 38 ++++++++---------------------------
2 files changed, 9 insertions(+), 31 deletions(-)
diff --git a/README.md b/README.md
index 1e1e08dd7387..c2f65650c4ca 100644
--- a/README.md
+++ b/README.md
@@ -127,7 +127,7 @@ Unified Checkpoint 大模型存储格式在模型参数分布上支持动态扩
| Yuan2 | ✅ | ✅ | ✅ | 🚧 | 🚧 | 🚧 | 🚧 | ✅ |
------------------------------------------------------------------------------------------
-* 大模型推理已支持 LLaMA 系列、Qwen 系列、Mistral 系列、ChatGLM 系列、Bloom 系列和Baichuan 系列,支持Weight Only INT8及INT4推理,支持WAC(权重、激活、Cache KV)进行INT8、FP8量化的推理,【LLM】模型推理支持列表如下:
+* [大模型推理](./llm/docs/predict/inference.md)已支持 LLaMA 系列、Qwen 系列、Mistral 系列、ChatGLM 系列、Bloom 系列和Baichuan 系列,支持Weight Only INT8及INT4推理,支持WAC(权重、激活、Cache KV)进行INT8、FP8量化的推理,【LLM】模型推理支持列表如下:
| 模型名称/量化类型支持 | FP16/BF16 | WINT8 | WINT4 | INT8-A8W8 | FP8-A8W8 | INT8-A8W8C8 |
|:--------------------------------------------:|:---------:|:-----:|:-----:|:---------:|:--------:|:-----------:|
diff --git a/llm/docs/predict/inference.md b/llm/docs/predict/inference.md
index bf038c6b7c20..838212b7e3c6 100644
--- a/llm/docs/predict/inference.md
+++ b/llm/docs/predict/inference.md
@@ -17,7 +17,7 @@ PaddleNLP大模型推理提供压缩、推理、服务全流程体验 :
- 提供多种PTQ技术,提供WAC(权重/激活/缓存)灵活可配的量化能力,支持INT8、FP8、4Bit量化能力
-- 支持多硬件大模型推理,包括[昆仑XPU](../../xpu/llama/README.md)、[昇腾NPU](../../npu/llama/README.md)、[海光K100](../dcu_install.md)、[燧原GCU](../../gcu/llama/README.md)、[X86 CPU](../../../csrc/cpu/README.md)等
+- 支持多硬件大模型推理,包括[昆仑XPU](../../xpu/llama/README.md)、[昇腾NPU](../../npu/llama/README.md)、[海光K100](../dcu_install.md)、[燧原GCU](../../gcu/llama/README.md)、[X86 CPU](../cpu_install.md)等
- 提供面向服务器场景的部署服务,支持连续批处理(continuous batching)、流式输出等功能,支持HTTP、RPC、RESTful多种Clent端形式
@@ -52,7 +52,7 @@ PaddleNLP 提供了多种硬件平台和精度支持,包括:
| FP32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| FP16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| BF16 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
-| INT8 | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ |
+| INT8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
| FP8 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
@@ -106,7 +106,7 @@ PaddleNLP 提供了多种量化策略,支持Weight Only INT8及INT4推理,
- `quant_type`: 是否使用量化推理,默认值为None。可选的数值有`weight_only_int8`、`weight_only_int4`、`a8w8`和`a8w8_fp8`。`a8w8`与`a8w8_fp8`需要额外的act和weight的scale校准表,推理传入的 `model_name_or_path` 为PTQ校准产出的量化模型。量化模型导出参考[大模型量化教程](../quantization.md)。
-- `cachekv_int8_type`: 是否使用cachekv int8量化,默认值为None。可选`dynamic`和`static`两种,`static`需要额外的cache kv的scale校准表,传入的 `model_name_or_path` 为PTQ校准产出的量化模型。量化模型导出参考[大模型量化教程](../quantization.md)。
+- `cachekv_int8_type`: 是否使用cachekv int8量化,默认值为None。可选`dynamic`(已不再维护,不建议使用)和`static`两种,`static`需要额外的cache kv的scale校准表,传入的 `model_name_or_path` 为PTQ校准产出的量化模型。量化模型导出参考[大模型量化教程](../quantization.md)。
### 3.4 解码策略参数
@@ -128,31 +128,7 @@ PaddleNLP 提供了多种量化策略,支持Weight Only INT8及INT4推理,
### 4.1 环境准备
-git clone 代码到本地:
-
-```shell
-git clone https://github.com/PaddlePaddle/PaddleNLP.git
-export PYTHONPATH=/path/to/PaddleNLP:$PYTHONPATH
-```
-
-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
-#DCU设备安装自定义算子
-cd ./paddlenlp/csrc && python setup_hip.py install
-```
-
-到达运行目录,即可开始:
-
-```shell
-cd PaddleNLP/llm
-```
+参考[安装教程](./installation.md)。
### 4.2 推理示例
@@ -182,7 +158,7 @@ python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --
1. `quant_type`可选的数值有`weight_only_int8`、`weight_only_int4`、`a8w8`和`a8w8_fp8`。
2. `a8w8`与`a8w8_fp8`需要额外的act和weight的scale校准表,推理传入的 `model_name_or_path` 为PTQ校准产出的量化模型。量化模型导出参考[大模型量化教程](../quantization.md)。
-3. `cachekv_int8_type`可选`dynamic`和`static`两种,`static`需要额外的cache kv的scale校准表,传入的 `model_name_or_path` 为PTQ校准产出的量化模型。量化模型导出参考[大模型量化教程](../quantization.md)。
+3. `cachekv_int8_type`可选`dynamic`(已不再维护,不建议使用)和`static`两种,`static`需要额外的cache kv的scale校准表,传入的 `model_name_or_path` 为PTQ校准产出的量化模型。量化模型导出参考[大模型量化教程](../quantization.md)。
更多大模型推理教程,参考:
@@ -209,7 +185,9 @@ python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --
- [昇腾NPU](../../npu/llama/README.md)
- [海光K100](../dcu_install.md)
- [燧原GCU](../../gcu/llama/README.md)
-- [X86 CPU](../../../csrc/cpu/README.md)
+- [X86 CPU](../cpu_install.md)
+
+## 致谢
From 0efaae04f5f10618ec50741a76c0d298ea452d5d Mon Sep 17 00:00:00 2001
From: Sunny-bot1 <592045536@qq.com>
Date: Tue, 27 Aug 2024 13:21:21 +0800
Subject: [PATCH 7/9] fix comments
---
llm/docs/predict/inference.md | 31 ++++++++++++++++++-------------
llm/docs/predict/installation.md | 13 +++++++++++--
llm/docs/predict/llama.md | 6 +++---
3 files changed, 32 insertions(+), 18 deletions(-)
diff --git a/llm/docs/predict/inference.md b/llm/docs/predict/inference.md
index 838212b7e3c6..2fffd3e1a3ca 100644
--- a/llm/docs/predict/inference.md
+++ b/llm/docs/predict/inference.md
@@ -34,13 +34,13 @@ PaddleNLP大模型推理支持如下主流开源大模型:
PaddleNLP 中已经添加高性能推理模型相关实现,支持:
| Models | Example Models |
|--------|----------------|
-|Llama 3.1, Llama 3, Llama 2|`meta-llama/Meta-Llama-3-8B`, `meta-llama/Meta-Llama-3.1-8B`, `meta-llama/Meta-Llama-3.1-405B`, etc.|
-|Qwen 2| `Qwen/Qwen2-1.5B`, `Qwen/Qwen2-7B`, `Qwen/Qwen2-72B`, etc|
-|Qwen-Moe| `Qwen/Qwen1.5-MoE-A2.7B`, etc|
-|Mixtral| `mistralai/Mixtral-8x7B-Instruct-v0.1`, etc|
-|ChatGLM 3, ChatGLM 2| `THUDM/chatglm3-6b`, `THUDM/chatglm2-6b`, etc|
-|Baichuan 3, Baichuan 2, Baichuan|`baichuan-inc/Baichuan2-7B-Base`, `baichuan-inc/Baichuan2-7B-Chat` , etc|
-|Bloom|`bigscience/bloom-560m`, `bigscience/bloom-1b1`, `bigscience/bloom-3b`, etc|
+|Llama 3.1, Llama 3, Llama 2|`meta-llama/Meta-Llama-3.1-8B`, `meta-llama/Meta-Llama-3.1-8B-Instruct`, `meta-llama/Meta-Llama-3.1-405B`, `meta-llama/Meta-Llama-3.1-405B-Instruct`,`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`, etc.|
+|Qwen 2| `Qwen/Qwen2-0.5B`, `Qwen/Qwen2-0.5B-Instruct`, `Qwen/Qwen2-1.5B`, `Qwen/Qwen2-1.5B-Instruct`, `Qwen/Qwen2-7B`, `Qwen/Qwen2-7B-Instruct`, `Qwen/Qwen2-72B`, `Qwen/Qwen2-72B-Instruct`, `Qwen/Qwen2-57B-A14B`, `Qwen/Qwen2-57B-A14B-Instruct`, etc.|
+|Qwen-Moe| `Qwen/Qwen1.5-MoE-A2.7B`, `Qwen/Qwen1.5-MoE-A2.7B-Chat`, `Qwen/Qwen2-57B-A14B`, `Qwen/Qwen2-57B-A14B-Instruct`, etc.|
+|Mixtral| `mistralai/Mixtral-8x7B-Instruct-v0.1`, etc.|
+|ChatGLM 3, ChatGLM 2| `THUDM/chatglm3-6b`, `THUDM/chatglm2-6b`, etc.|
+|Baichuan 3, Baichuan 2, Baichuan|`baichuan-inc/Baichuan2-7B-Base`, `baichuan-inc/Baichuan2-7B-Chat` , etc.|
+|Bloom|`bigscience/bloom-560m`, `bigscience/bloom-1b1`, `bigscience/bloom-3b`, etc.|
## 2. 硬件&精度支持
@@ -48,7 +48,7 @@ PaddleNLP 中已经添加高性能推理模型相关实现,支持:
PaddleNLP 提供了多种硬件平台和精度支持,包括:
| Precision | Ada | Ampere | Turing | Volta | 昆仑XPU | 昇腾NPU | 海光K100 | 燧原GCU | x86 CPU |
-|----------------|-----|--------|--------|-------|--------|---------|---------|--------|---------|
+|:--------------:|:---:|:------:|:------:|:-----:|:------:|:-------:|:-------:|:------:|:-------:|
| FP32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| FP16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| BF16 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
@@ -64,7 +64,7 @@ PaddleNLP 提供了多种参数,用于配置推理模型和优化推理性能
- `model_name_or_path`: 必需,预训练模型名称或者本地的模型路径,用于热启模型和分词器,默认为None。
-- `dtype`: 必需,模型参数dtype,默认为None。如果没有传入`lora_path`、`prefix_path`则必须传入。
+- `dtype`: 必需,模型参数dtype,默认为None。如果没有传入`lora_path`或`prefix_path`则必须传入`dtype`参数。
- `lora_path`: LoRA参数和配置路径,对LoRA参数进行初始化,默认为None。
@@ -72,17 +72,22 @@ PaddleNLP 提供了多种参数,用于配置推理模型和优化推理性能
- `batch_size`: 批处理大小,默认为1。该参数越大,占用显存越高;该参数越小,占用显存越低。
-- `data_file`: 待推理json文件,默认为None。
+- `data_file`: 待推理json文件,默认为None。样例数据:
+
+ ```json
+ {"tgt":"", "src": "写一个300字的小说大纲,内容是李白穿越到现代,最后成为公司文职人员的故事"}
+ {"tgt":"", "src": "我要采访一位科幻作家,创建一个包含5个问题的列表"}
+ ```
- `output_file`: 保存推理结果文件,默认为output.json。
-- `device`: 运行环境,默认为gpu。可选的数值有`cpu`, `gpu`, `xpu`。
+- `device`: 运行环境,默认为gpu,可选的数值有gpu、[cpu](../cpu_install.md)、[xpu](../../xpu/llama/README.md)、[npu](../../npu/llama/README.md)、[gcu](../../gcu/llama/README.md)等([dcu](../dcu_install.md)与gpu推理命令一致)。
- `model_type`: 初始化不同类型模型,gpt-3: GPTForCausalLM; ernie-3.5-se: Ernie35ForCausalLM; 默认为 None。
- `mode`: 使用动态图或者静态图推理,可选值有`dynamic`、 `static`,默认为`dynamic`。
-- `avx_model`: 当使用CPU推理时,是否使用AvxModel,默认为False。参考[CPU推理教程]()。
+- `avx_model`: 当使用CPU推理时,是否使用AvxModel,默认为False。参考[CPU推理教程](../cpu_install.md)。
- `avx_type`: avx计算类型,默认为None。可选的数值有`fp16`、 `bf16`。
@@ -160,7 +165,7 @@ python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --
2. `a8w8`与`a8w8_fp8`需要额外的act和weight的scale校准表,推理传入的 `model_name_or_path` 为PTQ校准产出的量化模型。量化模型导出参考[大模型量化教程](../quantization.md)。
3. `cachekv_int8_type`可选`dynamic`(已不再维护,不建议使用)和`static`两种,`static`需要额外的cache kv的scale校准表,传入的 `model_name_or_path` 为PTQ校准产出的量化模型。量化模型导出参考[大模型量化教程](../quantization.md)。
-更多大模型推理教程,参考:
+更多大模型推理教程:
- [llama](./llama.md)
- [qwen](./qwen.md)
diff --git a/llm/docs/predict/installation.md b/llm/docs/predict/installation.md
index 3135e1ab8f0f..e88fb5b551f6 100644
--- a/llm/docs/predict/installation.md
+++ b/llm/docs/predict/installation.md
@@ -10,7 +10,6 @@ export PYTHONPATH=/path/to/PaddleNLP:$PYTHONPATH
PaddleNLP 针对于Transformer 系列编写了高性能自定义算子,提升模型在推理和解码过程中的性能,使用之前需要预先安装自定义算子库:
```shell
-git clone https://github.com/PaddlePaddle/PaddleNLP
#GPU设备安装自定义算子
cd PaddleNLP/csrc && python setup_cuda.py install
#XPU设备安装自定义算子
@@ -23,4 +22,14 @@ cd PaddleNLP/csrc && python setup_hip.py install
```shell
cd PaddleNLP/llm
-```
\ No newline at end of file
+```
+
+大模型推理教程:
+
+- [llama](./llama.md)
+- [qwen](./qwen.md)
+- [mixtral](./mixtral.md)
+
+获取最佳推理性能:
+
+- [最佳实践](./best_practices.md)
\ No newline at end of file
diff --git a/llm/docs/predict/llama.md b/llm/docs/predict/llama.md
index 8f0016f0f047..331f4e318ff0 100644
--- a/llm/docs/predict/llama.md
+++ b/llm/docs/predict/llama.md
@@ -6,11 +6,11 @@
* LLaMA 系列大模型是由 Meta AI 发布的一个开放且高效的大型基础语言模型。
-* [LLaMA 2](https://llama.meta.com/llama2/):2023年7月,Meta发布了LLaMA 2系列,有7B、13B、34B和70B四个版本。该版本实现了开源商用,降低了初创公司创建类似ChatGPT聊天机器人的成本。
+* [Llama 2](https://llama.meta.com/llama2/):2023年7月,Meta发布了Llama 2系列,有7B、13B、34B和70B四个版本。该版本实现了开源商用,降低了初创公司创建类似ChatGPT聊天机器人的成本。
-* [LLaMA 3](https://llama.meta.com/):2024年4月19日,Meta推出了Llama 3系列,包括8B和70B两个版本,400B的Llama-3还在训练中。该版本在多个基准测试中取得了全面进步,性能优异。
+* [Llama 3](https://llama.meta.com/):2024年4月19日,Meta推出了Llama 3系列,包括8B和70B两个版本,400B的Llama-3还在训练中。该版本在多个基准测试中取得了全面进步,性能优异。
-* [LLaMA 3.1](https://llama.meta.com/):2024年7月23日,Meta发布了LLAMA 3.1 8B、70B、405B模型,进一步提升了模型的性能和效率。
+* [Llama 3.1](https://llama.meta.com/):2024年7月23日,Meta发布了Llama 3.1 8B、70B、405B模型,进一步提升了模型的性能和效率。
## 模型支持
From 9dae2acbbab7b52a8afd12c673b6db0856b5a4de Mon Sep 17 00:00:00 2001
From: Sunny-bot1 <592045536@qq.com>
Date: Tue, 27 Aug 2024 13:38:34 +0800
Subject: [PATCH 8/9] fix comments
---
llm/docs/predict/inference.md | 11 ++---------
1 file changed, 2 insertions(+), 9 deletions(-)
diff --git a/llm/docs/predict/inference.md b/llm/docs/predict/inference.md
index 2fffd3e1a3ca..32a4ef13acce 100644
--- a/llm/docs/predict/inference.md
+++ b/llm/docs/predict/inference.md
@@ -19,14 +19,7 @@ PaddleNLP大模型推理提供压缩、推理、服务全流程体验 :
- 支持多硬件大模型推理,包括[昆仑XPU](../../xpu/llama/README.md)、[昇腾NPU](../../npu/llama/README.md)、[海光K100](../dcu_install.md)、[燧原GCU](../../gcu/llama/README.md)、[X86 CPU](../cpu_install.md)等
-- 提供面向服务器场景的部署服务,支持连续批处理(continuous batching)、流式输出等功能,支持HTTP、RPC、RESTful多种Clent端形式
-
-
-PaddleNLP大模型推理支持如下主流开源大模型:
-
-- 基于Transformer的大模型(如Llama、Qwen)
-
-- 混合专家大模型(如Mixtral)
+- 提供面向服务器场景的部署服务,支持连续批处理(continuous batching)、流式输出等功能,支持gRPC、HTTP协议的服务接口
## 1. 模型支持
@@ -194,5 +187,5 @@ python ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-7b-chat --
## 致谢
-
+我们参考[PageAttention](https://github.com/vllm-project/vllm)的page分块的思想实现了generation阶段的block attention。基于[Flash Decoding](https://github.com/Dao-AILab/flash-attention)的KV分块思想实现了长sequence场景下的推理加速。基于[Flash Attention2](https://github.com/Dao-AILab/flash-attention)实现了prefill阶段的attention加速。FP8 GEMM基于[CUTLASS](https://github.com/NVIDIA/cutlass)的高性能模板库实现。有部分算子如gemm_dequant参考了[TensorRT-LLM](https://github.com/NVIDIA/TensorRT-LLM)和[FasterTransformer](https://github.com/NVIDIA/FasterTransformer.git)的实现和优化思路。
From 32232fba407812c901800f31296a9f013da3811f Mon Sep 17 00:00:00 2001
From: Sunny-bot1 <68891411+Sunny-bot1@users.noreply.github.com>
Date: Tue, 27 Aug 2024 16:16:06 +0800
Subject: [PATCH 9/9] update inference.md
---
llm/docs/predict/inference.md | 29 ++++++++++++++---------------
1 file changed, 14 insertions(+), 15 deletions(-)
diff --git a/llm/docs/predict/inference.md b/llm/docs/predict/inference.md
index 32a4ef13acce..0c50455e2de8 100644
--- a/llm/docs/predict/inference.md
+++ b/llm/docs/predict/inference.md
@@ -24,29 +24,28 @@ PaddleNLP大模型推理提供压缩、推理、服务全流程体验 :
## 1. 模型支持
-PaddleNLP 中已经添加高性能推理模型相关实现,支持:
+PaddleNLP 中已经添加高性能推理模型相关实现,已验证过的模型如下:
| Models | Example Models |
|--------|----------------|
-|Llama 3.1, Llama 3, Llama 2|`meta-llama/Meta-Llama-3.1-8B`, `meta-llama/Meta-Llama-3.1-8B-Instruct`, `meta-llama/Meta-Llama-3.1-405B`, `meta-llama/Meta-Llama-3.1-405B-Instruct`,`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`, etc.|
-|Qwen 2| `Qwen/Qwen2-0.5B`, `Qwen/Qwen2-0.5B-Instruct`, `Qwen/Qwen2-1.5B`, `Qwen/Qwen2-1.5B-Instruct`, `Qwen/Qwen2-7B`, `Qwen/Qwen2-7B-Instruct`, `Qwen/Qwen2-72B`, `Qwen/Qwen2-72B-Instruct`, `Qwen/Qwen2-57B-A14B`, `Qwen/Qwen2-57B-A14B-Instruct`, etc.|
-|Qwen-Moe| `Qwen/Qwen1.5-MoE-A2.7B`, `Qwen/Qwen1.5-MoE-A2.7B-Chat`, `Qwen/Qwen2-57B-A14B`, `Qwen/Qwen2-57B-A14B-Instruct`, etc.|
-|Mixtral| `mistralai/Mixtral-8x7B-Instruct-v0.1`, etc.|
-|ChatGLM 3, ChatGLM 2| `THUDM/chatglm3-6b`, `THUDM/chatglm2-6b`, etc.|
-|Baichuan 3, Baichuan 2, Baichuan|`baichuan-inc/Baichuan2-7B-Base`, `baichuan-inc/Baichuan2-7B-Chat` , etc.|
-|Bloom|`bigscience/bloom-560m`, `bigscience/bloom-1b1`, `bigscience/bloom-3b`, etc.|
+|Llama 3.1, Llama 3, Llama 2|`meta-llama/Meta-Llama-3.1-8B`, `meta-llama/Meta-Llama-3.1-8B-Instruct`, `meta-llama/Meta-Llama-3.1-405B`, `meta-llama/Meta-Llama-3.1-405B-Instruct`,`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`, `meta-llama/Llama-Guard-3-8B`, `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`|
+|Qwen 2| `Qwen/Qwen2-0.5B`, `Qwen/Qwen2-0.5B-Instruct`, `Qwen/Qwen2-1.5B`, `Qwen/Qwen2-1.5B-Instruct`, `Qwen/Qwen2-7B`, `Qwen/Qwen2-7B-Instruct`, `Qwen/Qwen2-72B`, `Qwen/Qwen2-72B-Instruct`, `Qwen/Qwen2-57B-A14B`, `Qwen/Qwen2-57B-A14B-Instruct`|
+|Qwen-Moe| `Qwen/Qwen1.5-MoE-A2.7B`, `Qwen/Qwen1.5-MoE-A2.7B-Chat`, `Qwen/Qwen2-57B-A14B`, `Qwen/Qwen2-57B-A14B-Instruct`|
+|Mixtral| `mistralai/Mixtral-8x7B-Instruct-v0.1`|
+|ChatGLM 3, ChatGLM 2| `THUDM/chatglm3-6b`, `THUDM/chatglm2-6b`|
+|Baichuan 2, Baichuan|`baichuan-inc/Baichuan2-7B-Base`, `baichuan-inc/Baichuan2-7B-Chat`, `baichuan-inc/Baichuan2-13B-Base`, `baichuan-inc/Baichuan2-13B-Chat`, `baichuan-inc/Baichuan-7B`, `baichuan-inc/Baichuan-13B-Base`, `baichuan-inc/Baichuan-13B-Chat`|
## 2. 硬件&精度支持
PaddleNLP 提供了多种硬件平台和精度支持,包括:
-| Precision | Ada | Ampere | Turing | Volta | 昆仑XPU | 昇腾NPU | 海光K100 | 燧原GCU | x86 CPU |
-|:--------------:|:---:|:------:|:------:|:-----:|:------:|:-------:|:-------:|:------:|:-------:|
-| FP32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
-| FP16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
-| BF16 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
-| INT8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
-| FP8 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
+| Precision | Hopper| Ada | Ampere | Turing | Volta | 昆仑XPU | 昇腾NPU | 海光K100 | 燧原GCU | x86 CPU |
+|:--------------:|:-----:|:---:|:------:|:------:|:-----:|:------:|:-------:|:-------:|:------:|:-------:|
+| FP32 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
+| FP16 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
+| BF16 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
+| INT8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
+| FP8 | 🚧 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
## 3. 推理参数