Files
r200_8f_xtrt_llm/examples/qwen/README_CN.md
2025-08-06 15:49:14 +08:00

6.9 KiB
Raw Blame History

Qwen

本文档描述了如何使用昆仑芯XTRT-LLM中在单XPU和单节点多XPU上构建和运行Qwen模型。

概述

XTRT-LLM Qwen 示例代码的位置在文件夹examples/qwen下,此文件夹下有一个主要文件:

  • build.py 构建运行Qwen模型所需的XTRT-LLM引擎

除此之外,还有两个可以用来推理和评估的共享文件在父节点 examples 下:

支持的矩阵

  • FP16
  • INT8 Weight-Only
  • Tensor Parallel

使用说明

XTRT-LLM Qwen 示例代码位于 qwen。它使用HF权重作为输入并且构建对应的XTRT引擎。XTRT引擎的数量取决于为了运行推理而使用的XPU个数。

构建XTRT引擎

需要先按照下面的指南准备HF Qwen checkpoint Qwen-7B-ChatQwen-14B-Chat

创建一个 downloads 目录用来存储自Huggingface社区下载的权重。

mkdir -p ./downloads

将Qwen-7B-Chat和Qwen-14B-Chat分开存储。

  • 存储 Qwen-7B-Chat
mv Qwen-7B-Chat ./downloads/qwen-7b/
  • 存储 Qwen-14B-Chat
mv Qwen-14B-Chat ./downloads/qwen-14b/

XTRT-LLM从HFcheckpoint构建XTRT引擎。

通常build.py只需要一个XPU但如果您在推理时已经获得了所需的所有XPU则可以通过添加--parallel_build参数来启用并行构建,从而加快引擎构建过程。请注意,当前并行构建功能仅支持单个节点。

请注意:在构建阶段执行安装命令pip install transformers-stream-generator

以下是一些示例:

# Build a single-XPU float16 engine from HF weights.
# use_gpt_attention_plugin is necessary in Qwen.
# Try use_gemm_plugin to prevent accuracy issue.
# It is recommend to use  --use_gpt_attention_plugin for better performance

# Build the Qwen 7B model using a single XPU and FP16.
python build.py --hf_model_dir ./downloads/qwen-7b \
                --dtype float16 \
                --use_gpt_attention_plugin float16 \
                --output_dir ./downloads/qwen-7b/trt_engines/fp16/1-XPU/


# Build the Qwen 7B model using a single XPU and apply INT8 weight-only quantization.
python build.py --hf_model_dir ./downloads/qwen-7b/ \
                --dtype float16 \
                --use_gpt_attention_plugin float16 \
                --use_weight_only \
                --weight_only_precision int8 \
                --output_dir ./downloads/qwen-7b/trt_engines/int8_weight_only/1-XPU/

# Build Qwen 7B using 2-way tensor parallelism.
python build.py --hf_model_dir ./downloads/qwen-7b/ \
                --dtype float16 \
                --use_gpt_attention_plugin float16 \
                --output_dir ./downloads/qwen-7b/trt_engines/fp16/2-XPU/ \
                --world_size 2 \
                --tp_size 2


# Build Qwen 14B using 2-way tensor parallelism.
python build.py --hf_model_dir ./downloads/qwen-14b/ \
                --dtype float16 \
                --use_gpt_attention_plugin float16 \
                --output_dir ./downloads/qwen-14b/trt_engines/fp16/2-XPU/ \
                --world_size 2 \
                --tp_size 2

SmoothQuant

SmootQuant同时支持Qwen v1和Qwen v2。与FP16的HF权重可以直接被处理并加载到XTRT-LLM不同SmoothQuant需要加载INT8权重而INT8权重在构建引擎之前需要进行预处理。

示例:

python3 hf_qwen_convert.py -i ./downloads/qwen-7b/ -o ./downloads/qwen-7b/sq0.5/ -sq 0.5 --tensor-parallelism 1 --storage-type float16

注意:hf_qwen_convert.py使用pytorch运行并且

  1. 'torch-cpu' 通常比XPyTorch精度更高
  2. XPyTorch 通常使用超过32GB的GM因此需要更多的XPU来完成它。
  3. 使用XPyTorch运行时请添加-p=1

build.py增加了新的选项来支持SmoothQuant模型的INT8推理。

--use_smooth_quant 是INT8推理的起点。默认情况下它将以--per-token模式运行模型。 --per-token--per-channel目前还不支持。

构建调用示例:

# Build model for SmoothQuant in the _per_tensor_ mode.
python3 build.py --ft_dir_path=./downloads/qwen-7b/sq0.5/1-XPU/ \
                 --use_smooth_quant \
                 --hf_model_dir ./downloads/qwen-7b/ \
                 --output_dir ./downloads/qwen-7b/trt_engines/sq0.5/1-XPU/
  • 运行
python3 ../run.py --input_text "你好,请问你叫什么?" \
                  --max_output_len=50 \
                  --tokenizer_dir ./downloads/qwen-7b/ \
                  --engine_dir=./downloads/qwen-7b/trt_engines/sq0.5/1-XPU/
  • 总结
python ../summarize.py --test_trt_llm \
                       --tokenizer_dir ./downloads/qwen-7b/ \
                       --data_type fp16 \
                       --engine_dir=./downloads/qwen-7b/trt_engines/sq0.5/1-XPU/ \
                       --max_input_length 2048 \
                       --output_len 2048

运行

注意:在运行阶段执行安装命令pip install tiktoken

要使用build.py生成的引擎运行XTRT-LLM Qwen模型请执行以下操作

# With fp16 inference
python3 ../run.py --input_text "你好,请问你叫什么?" \
                  --max_output_len=50 \
                  --tokenizer_dir ./downloads/qwen-7b/ \
                  --engine_dir=./downloads/qwen-7b/trt_engines/fp16/1-XPU/


# With int8 weight only inference
python3 ../run.py --input_text "你好,请问你叫什么?" \
                  --max_output_len=50 \
                  --tokenizer_dir ./downloads/qwen-7b/ \
                  --engine_dir=./downloads/qwen-7b/trt_engines/int8_weight_only/1-XPU/

# Run Qwen 7B model in FP16 using two XPUs.
mpirun -n 2 --allow-run-as-root \
    python ../run.py  --input_text "你好,请问你叫什么?" \
                      --tokenizer_dir  ./downloads/qwen-7b/ \
                      --max_output_len=50 \
                      --engine_dir ./downloads/qwen-7b/trt_engines/fp16/2-XPU/

run.py的演示输出:

python3 ../run.py --input_text "你好,请问你叫什么?" \
                  --max_output_len=50 \
                  --tokenizer_dir ./downloads/qwen-7b/  \
                  --engine_dir ./downloads/qwen-7b/trt_engines/fp16/1-XPU/
Loading engine from ./downloads/qwen-7b/trt_engines/fp16/1-XPU/qwen_float16_tp1_rank0.engine
Input: "<|im_start|>system
You are a helpful assistant.<|im_end|>
<|im_start|>user
你好,请问你叫什么?<|im_end|>
<|im_start|>assistant
"
Output: "我是来自阿里云的大规模语言模型,我叫通义千问。"