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

7.1 KiB
Raw Blame History

LLaMA

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

概述

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

  • build.py 构建运行LLaMa模型所需的XTRT引擎
  • run.py 基于输入的文字进行推理

支持的矩阵

  • FP16
  • INT8 Weight-Only
  • Tensor Parallel

使用说明

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

构建XTRT引擎

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

XTRT-LLM LLaMA从HF checkpoint构建XTRT引擎。如果未指定checkpoint目录XTRT-LLM将使用伪权重构建引擎。

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

以下是一些示例:

# Build a single-XPU float16 engine from HF weights.
# use_gpt_attention_plugin is necessary in LLaMA.
# It is recommend to use --use_gpt_attention_plugin for better performance

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


# Build the LLaMA 7B model using a single XPU and apply INT8 weight-only quantization.
python build.py --model_dir ./downloads/llama-7b-hf/ \
                --dtype float16 \
                --use_gpt_attention_plugin float16 \
                --use_weight_only \
                --output_dir ./downloads/llama-7b-hf/trt_engines/weight_only/1-XPU/

# Build LLaMA 7B using 2-way tensor parallelism.
python build.py --model_dir ./downloads/llama-7b-hf/ \
                --dtype float16 \
                --use_gpt_attention_plugin float16 \
                --output_dir ./downloads/llama-7b-hf/trt_engines/fp16/2-XPU/ \
                --world_size 2 \
                --tp_size 2 \
                --parallel_build


# Build LLaMA 13B using 2-way tensor parallelism.
python build.py --model_dir ./downloads/llama13b/ \
                --dtype float16 \
                --use_gpt_attention_plugin float16 \
                --output_dir ./downloads/llama13b/trt_engines/fp16/2-XPU/ \
                --world_size 2 \
                --tp_size 2 \
                --parallel_build

LLaMA v2 更新

LLaMA v2-7B和13B模型与 LLaMA v1的实现是兼容的以上命令仍然有效。

对于LLaMA v2 70B张量并行性有一个限制即KV heads的数量必须可以被XPU的数量整除。例如由于70B模型有8个KV heads您可以使用2、4或8个XPU运行它。

# Build LLaMA 70B using 8-way tensor parallelism.
python build.py --model_dir ./downloads/llama2-70b/ \
                --dtype float16 \
                --use_gpt_attention_plugin float16 \
                --output_dir ./downloads/llama2-70b/trt_engines/fp16/8-XPU/ \
                --world_size 8 \
                --tp_size 8 \
                --parallel_build

相同的指令可以应用于LLaMA v2模型的微调版本例如7Bf或LLaMA-2-7b-chat

使用summarize.py进行测试:pip install nltk rouge_score

python summarize.py --test_trt_llm \
                    --hf_model_location ./downloads/llama-7b-hf \
                    --data_type fp16 \
                    --engine_dir ./downloads/llama-7b-hf/trt_engines/fp16/1-XPU

SmoothQuant

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

示例:

python3 hf_llama_convert.py -i ./downloads/llama-7b-hf -o ./downloads/smooth_llama_7B/sq0.8/ -sq 0.8 --tensor-parallelism 1 --storage-type fp16

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

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

为SmoothQuant 0.6的LLaMa 7B模型我们提供这些转换数据

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_model_dir=./downloads/smooth_llama_7B/sq0.8/1-XPU/ \
                 --use_smooth_quant \
                 --output_dir ./downloads/smooth_llama_7B/sq0.8/trt_engines/fp16/1-XPU/

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

运行

在运行示例之前,请确保设置环境变量:

export PYTORCH_NO_XPU_MEMORY_CACHING=0 # disable XPytorch cache XPU memory.
export XMLIR_D_XPU_L3_SIZE=0           # disable XPytorch use L3.

如果使用多个XPU且没有L3空间运行则可以通过设置BKCL_CCIX_BUFFER_GM=1以禁用L3。

使用build.py生成的引擎运行XTRT-LLM LLaMA模型

# With fp16 inference
python3 run.py --max_output_len=50 \
               --tokenizer_dir ./downloads/llama-7b-hf/ \
               --engine_dir=./downloads/llama-7b-hf/trt_engines/fp16/1-XPU/

# With fp16 inference, SmoothQuant
python3 run.py --max_output_len=50 \
               --tokenizer_dir ./downloads/llama-7b-hf/ \
               --engine_dir=./downloads/smooth_llama_7B/sq0.8/trt_engines/fp16/1-XPU/

使用LLaMA模型进行总结

# Run summarization using the LLaMA 7B model in FP16.
python summarize.py --test_trt_llm \
                    --hf_model_location ./downloads/llama-7b-hf/ \
                    --data_type fp16 \
                    --engine_dir ./downloads/llama-7b-hf/trt_engines/fp16/1-XPU/

# Run summarization using the LLaMA 7B model quantized to INT8.
python summarize.py --test_trt_llm \
                    --hf_model_location ./downloads/llama-7b-hf/ \
                    --data_type fp16 \
                    --engine_dir ./downloads/llama-7b-hf/trt_engines/weight_only/1-XPU/

# Run summarization using the LLaMA 7B model in FP16 using two XPUs.
mpirun -n 2 --allow-run-as-root \
    python summarize.py --test_trt_llm \
                        --hf_model_location ./downloads/llama-7b-hf/ \
                        --data_type fp16 \
                        --engine_dir ./downloads/llama-7b-hf/trt_engines/fp16/2-XPU/