diff --git a/README.md b/README.md index e879cf8e8877..c2f65650c4ca 100644 --- a/README.md +++ b/README.md @@ -127,6 +127,18 @@ Unified Checkpoint 大模型存储格式在模型参数分布上支持动态扩 | Yuan2 | ✅ | ✅ | ✅ | 🚧 | 🚧 | 🚧 | 🚧 | ✅ | ------------------------------------------------------------------------------------------ +* [大模型推理](./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 | +|:--------------------------------------------:|:---------:|:-----:|:-----:|:---------:|:--------:|:-----------:| +| [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 60e8705e5a62..9b169115e40a 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多种推理方式。
llm @@ -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/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/inference.md b/llm/docs/inference.md deleted file mode 100644 index a28ab9f0a86b..000000000000 --- a/llm/docs/inference.md +++ /dev/null @@ -1,262 +0,0 @@ -# 大模型推理教程 - -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 -#DCU设备安装自定义算子 -cd ./paddlenlp/csrc && python setup_hip.py install -``` - -### 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 - -#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" - -# 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 - -# 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" - -# 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" - -#Cpu使用avx指令静态图推理参考 -python ./predict/predictor.py --model_name_or_path ./inference --inference_model --avx_mode --avx_type "fp16" --dtype "float32" --mode "static" --device "cpu" - -# 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矩阵乘的算法选择以获得更快的推理速度,打开之后第一次执行会执行算法选择从而导致速度较慢。 -# 开启后会在计算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" -``` -**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_type dynamic -``` - -#### 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_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校准表。 - - -## 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_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..0c50455e2de8 --- /dev/null +++ b/llm/docs/predict/inference.md @@ -0,0 +1,190 @@ +# 大模型推理教程 + +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](../cpu_install.md)等 + +- 提供面向服务器场景的部署服务,支持连续批处理(continuous batching)、流式输出等功能,支持gRPC、HTTP协议的服务接口 + + +## 1. 模型支持 + +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`, `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 | Hopper| 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`则必须传入`dtype`参数。 + +- `lora_path`: LoRA参数和配置路径,对LoRA参数进行初始化,默认为None。 + +- `prefix_path`: Prefix Tuning参数和配置路径,对Prefix Tuning参数进行初始化,默认为None。 + +- `batch_size`: 批处理大小,默认为1。该参数越大,占用显存越高;该参数越小,占用显存越低。 + +- `data_file`: 待推理json文件,默认为None。样例数据: + + ```json + {"tgt":"", "src": "写一个300字的小说大纲,内容是李白穿越到现代,最后成为公司文职人员的故事"} + {"tgt":"", "src": "我要采访一位科幻作家,创建一个包含5个问题的列表"} + ``` + +- `output_file`: 保存推理结果文件,默认为output.json。 + +- `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推理教程](../cpu_install.md)。 + +- `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 环境准备 + +参考[安装教程](./installation.md)。 + +### 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) + +更多硬件大模型推理教程: + +- [昆仑XPU](../../xpu/llama/README.md) +- [昇腾NPU](../../npu/llama/README.md) +- [海光K100](../dcu_install.md) +- [燧原GCU](../../gcu/llama/README.md) +- [X86 CPU](../cpu_install.md) + +## 致谢 + +我们参考[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)的实现和优化思路。 + diff --git a/llm/docs/predict/installation.md b/llm/docs/predict/installation.md new file mode 100644 index 000000000000..e88fb5b551f6 --- /dev/null +++ b/llm/docs/predict/installation.md @@ -0,0 +1,35 @@ +# 安装 + +git clone 代码到本地: + +```shell +git clone https://github.com/PaddlePaddle/PaddleNLP.git +export PYTHONPATH=/path/to/PaddleNLP:$PYTHONPATH +``` + +PaddleNLP 针对于Transformer 系列编写了高性能自定义算子,提升模型在推理和解码过程中的性能,使用之前需要预先安装自定义算子库: + +```shell +#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 +``` + +大模型推理教程: + +- [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 new file mode 100644 index 000000000000..331f4e318ff0 --- /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..ea5d07e8731e --- /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 +# 动态图推理 +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 + +# 动转静导出模型 +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 + +# 静态图推理 +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..27273d276485 --- /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 +```