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

5.2 KiB
Raw Permalink Blame History

BLOOM

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

概述

XTRT-LLM BLOOM示例代码位于 examples/bloom. 此文件夹中有以下几个主要文件:

支持的矩阵

  • FP16
  • INT8 Weight-Only
  • Tensor Parallel

使用说明

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

构建XTRT引擎

需要先按照下面的指南准备HF BLOOM checkpointhttps://huggingface.co/docs/transformers/main/en/model_doc/bloom

举例安装BLOOM-560M

# Setup git-lfs
git lfs install
rm -rf ./downloads/bloom/560M/
mkdir -p ./downloads/bloom/560M/ && git clone https://huggingface.co/bigscience/bloom-560m ./downloads/bloom/560M/

XTRT-LLM BLOOM从HF checkpoint构建XTRT引擎。

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

以下为示例:

# Build a single-XPU float16 engine from HF weights.
# Try use_gemm_plugin to prevent accuracy issue. TODO check this holds for BLOOM

# Single XPU on BLOOM 560M
python build.py --model_dir ./downloads/bloom/560M/ \
                --dtype float16 \
                --use_gpt_attention_plugin float16 \
                --output_dir ./downloads/bloom/560M/trt_engines/fp16/1-XPU/

# Build the BLOOM 560M using a single XPU and apply INT8 weight-only quantization.
python build.py --model_dir ./downloads/bloom/560M/ \
                --dtype float16 \
                --use_gpt_attention_plugin float16 \
                --use_weight_only \
                --weight_only_precision int8 \
                --output_dir ./downloads/bloom/560M/trt_engines/int8_weight_only/1-XPU/

# Use 2-way tensor parallelism on BLOOM 560M
python build.py --model_dir ./downloads/bloom/560M/ \
                --dtype float16 \
                --use_gpt_attention_plugin float16 \
                --output_dir ./downloads/bloom/560M/trt_engines/fp16/2-XPU/ \
                --world_size 2

SmoothQuant

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

示例:

python3 hf_bloom_convert.py -i ./downloads/bloom/560M/ -o ./downloads/bloom-smooth/560M --smoothquant 0.5 --tensor-parallelism 1 --storage-type float16

注意使用PyTorch运行hf_bloom_convert.py,并且

  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 --bin_model_dir=./downloads/bloom-smooth/560M/1-XPU \
                 --use_smooth_quant \
                 --use_gpt_attention_plugin float16 \
                 --output_dir ./downloads/bloom-smooth/560M/trt_engines/fp16/1-XPU/

注意目前SmoothQuant需要启用GPT attention插件。

注意:我们使用--bin_model_dir而不是--model_dir因为SmoothQuant模型需要INT8权重和二进制文件中的各种scales。

运行

python ../summarize.py --test_trt_llm \
                       --hf_model_dir ./downloads/bloom/560M/ \
                       --data_type fp16 \
                       --engine_dir ./downloads/bloom/560M/trt_engines/fp16/1-XPU/

python ../summarize.py --test_trt_llm \
                       --hf_model_dir ./downloads/bloom/560M/ \
                       --data_type fp16 \
                       --engine_dir ./downloads/bloom/560M/trt_engines/int8_weight_only/1-XPU/

python run.py --tokenizer_dir ./downloads/bloom/560M/ \
              --max_output_len=50 \
              --engine_dir ./downloads/bloom/560M/trt_engines/fp16/1-XPU/

python run.py --tokenizer_dir ./downloads/bloom/560M/ \
              --max_output_len=50 \
              --engine_dir ./downloads/bloom/560M/trt_engines/int8_weight_only/1-XPU/

python run.py --tokenizer_dir ./downloads/bloom/560M/ \
              --max_output_len=50 \
              --engine_dir ./downloads/bloom-smooth/560M/trt_engines/fp16/1-XPU/

mpirun -n 2 --allow-run-as-root \
    python run.py --tokenizer_dir ./downloads/bloom/560M/ \
                  --max_output_len=50 \
                  --engine_dir ./downloads/bloom/560M/trt_engines/fp16/2-XPU/