输入“/”快速插入内容

NVIDIA TensorRT 推理加速

2024年7月25日修改
2023年12月22日创建
本文讨论了如何使用TensorRT-LLM加速ChatGLM3-6B模型的推理过程,包括获取代码、构建镜像、配置参数等步骤,并给出了代码执行示例和效果。关键要点包括:
1.
TensorRT-LLM介绍:为用户提供易于使用的Python API,用于定义大型语言模型并构建TensorRT引擎,可在NVIDIA GPU上高效执行推理。
2.
配置步骤:获取TensorRT-LLM代码,构建并运行docker镜像,构建引擎时需注意参数设置,如max_output_len和max_input_len的总和需低于8192。
3.
参数设置:可配置多个参数,如使用--use_gpt_attention_plugin等配置插件,使用--enable_context_fmha等开启FMHA kernels,使用--use_weight_only开启Weight-Only量化。
4.
推理执行:使用TensorRT-LLM Python Runtime进行推理,执行代码时需指定模型名称、目录等参数。
5.
代码执行效果:展示了代码执行过程中的详细信息,包括内存使用情况、加载权重时间等。
6.
模型性能:构建好的模型质量虽有一定下降,但总体性价比较高,且仍能很好地支持Function Call功能。
本章节将带领开发者使用 TensorRT-LLM 加速推理ChatGLM3-6B模型
本章节具有一定的技术门槛,请保持耐心,备份数据。
chatglm 官方团队同学完成本章节内容的平均时间超过12小时。
什么是 TensorRT-LLM
TensorRT-LLM为用户提供了一个易于使用的Python API,用于定义大型语言模型(LLMs)并构建包含最新优化的TensorRT引擎,以便在NVIDIA GPU上高效地执行推理。TensorRT-LLM还包含创建执行这些TensorRT引擎的Python和C++运行时的组件。它还包括一个用于与NVIDIA Triton推理服务器集成的后端;一个用于服务LLMs的生产质量系统。使用TensorRT-LLM构建的模型可以在从单个GPU到多个节点的多个GPU的各种配置上执行。
请配合以下代码库中微调部分代码进行上手练习
配置 TensorRT-LLM
首先,获取 TensorRT-LLM 代码
# TensorRT-LLM 代码需要使用 git-lfs 拉取
apt-get update && apt-get -y install git git-lfs
git clone https://github.com/NVIDIA/TensorRT-LLM.git
cd TensorRT-LLM
# 本流程将使用 v0.7.0 Release 版本
git checkout tags/v0.7.0 -b release/0.7.0
git submodule update --init --recursive
git lfs install
git lfs pull
构建docker镜像并安装TensorRT-LLM:
make -C docker release_build
运行docker镜像:
make -C docker release_run
该部分内容会涉及
访问境外源(Ubuntu 官方源)
访问 github
请注意,如果你处于无法访问到这些内容的地区,你可能需要修改英伟达官方的dockerfile。
构建引擎
接着,将 chatglm3-6b 模型 构建为 TensorRT-LLM 的推理引擎
代码参数解释
model_dir: 模型的Huggingface地址 / TensorRT 地址。
output_dir: 转换后模型引擎的地址。
max_output_len: 支持的最大输出长度
max_input_len: 支持的最大长度输出。
remove_input_padding: 移除输入的padding功能,fp16不要使用。
注意:
1.
max_output_lenmax_input_len的长度相加总和需要低于8192
2.
由于引擎为静态构造,这部分的内容是固定的,如果你需要改变任何一个设置,你需要重构引擎。
请注意不要将这两个参数调整太大,由于转换的时候会使用 FP32 的格式,因此,如果你的显卡显存不足,会出现这个错误。
Internal Error (Internal error: plugin node PLUGIN_V2_GPTAttention_1 requires 25422738560 bytes of scratch space, but only 25393692672 is available. Try increasing the workspace size with IBuilderConfig::setMemoryPoolLimit().
经过测试,一张 24GB 的显存的显卡在执行这个操作的时候,最多只能承受
max_output_len+ max_input_len <= 4096
如果超过这个值,将会出现这种错误