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

132 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# BLOOM
本文档介绍了如何使用昆仑芯XTRT-LLM在单XPU和单节点多XPU上使用昆仑芯XTRT-LLM构建和运行BLOOM模型。
## 概述
XTRT-LLM BLOOM示例代码位于 [`examples/bloom`](./). 此文件夹中有以下几个主要文件:
* [`build.py`](./build.py) 构建运行BLOOM模型所需的XTRT引擎
* [`run.py`](./run.py) 基于输入的文字进行推理
* [`summarize.py`](./summarize.py) 使用此模型对[cnn_dailymail](https://huggingface.co/datasets/cnn_dailymail) 数据集中的文章进行总结
## 支持的矩阵
* 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
```bash
# 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。
以下为示例:
```bash
# 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权重在构建引擎之前需要进行预处理。
示例:
```bash
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`目前还不支持。
构建调用示例:
```bash
# 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。
### 运行
```bash
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/
```