TensorRT-LLM保姆级教程(一)-快速入门

随着大模型的爆火,投入到生产环境的模型参数量规模也变得越来越大(从数十亿参数到千亿参数规模),从而导致大模型的推理成本急剧增加。因此,市面上也出现了很多的推理框架,用于降低模型推理延迟以及提升模型吞吐量。

本系列将针对TensorRT-LLM推理进行讲解。本文为该系列第一篇,将简要概述TensorRT-LLM的基本特性。

另外,我撰写的大模型相关的博客及配套代码 均整理放置在Github:llm-action,有需要的朋友自取。

TensorRT-LLM 诞生的背景

第一、大模型参数量大,推理成本高。以10B参数规模的大模型为例,使用FP16数据类型进行部署至少需要20GB以上(模型权重+KV缓存等)。

第二、纯TensorRT使用较复杂,ONNX存在内存限制。深度学习模型通常使用各种框架(如PyTorch、TensorFlow、Keras等)进行训练和部署,而每个框架都有自己的模型表示和存储格式。因此,开发者通常使用 ONNX 解决深度学习模型在不同框架之间的互操作性问题。比如:TensorRT 就需要先将 PyTorch 模型转成 ONNX,然后再将 ONNX 转成 TensorRT。除此之外,一般还需要做数据对齐,因此需要编写 plugin,通过修改 ONNX 来适配 TensorRT plugin。另外, ONNX 使用Protobuf作为其模型文件的序列化格式。Protobuf是一种轻量级的、高效的数据交换格式,但它在序列化和反序列化大型数据时有一个默认的大小限制。在Protobuf中,默认的大小限制是2GB。这意味着单个序列化的消息不能超过2GB的大小。当你尝试加载或修改超过2GB的ONNX模型时,就会收到相关的限制提示。

第三、 纯FastTransformer使用门槛高。FastTransformer 是用 C++ 实现的;同时,它的接口和文档相对较少,用户可能需要更深入地了解其底层实现和使用方式,这对于初学者来说可能会增加学习和使用的难度。并且 FastTransformer 的生态较小,可用的资源和支持较少,这也会增加使用者在理解和应用 FastTransformer 上的困难。因此,与 Python 应用程序的部署和集成相比,它可能涉及到更多的技术细节和挑战。这可能需要用户具备更多的系统级编程知识和经验,以便将 FastTransformer 与其他系统或应用程序进行无缝集成。

综上所述,TensorRT-LLM 诞生了。

TensorRT-LLM 简介

TensorRT-LLM 为用户提供了易于使用的 Python API 来定义大语言模型 (LLM) 并构建 TensorRT 引擎,以便在 NVIDIA GPU 上高效地执行推理。 TensorRT-LLM 还包含用于创建执行这些 TensorRT 引擎的 Python 和 C++ 运行时组件。 此外,它还包括一个用于与 NVIDIA Triton 推理服务集成的后端;

同时, 使用 TensorRT-LLM 构建的模型可以使用使用张量并行和流水线并行在单 GPU 或者多机多 GPU 上执行。

TensorRT-LLM 的 Python API 的架构看起来与 PyTorch API 类似。 它为用户提供了包含 einsum、softmax、matmul 或 view 等函数的 functional 模块。 layers 模块捆绑了有用的构建块来组装 LLM; 比如: Attention 块、MLP 或整个 Transformer 层。 特定于模型的组件,例如: GPTAttention 或 BertAttention,可以在 models 模块中找到。

为了最大限度地提高性能并减少内存占用,TensorRT-LLM 允许使用不同的量化模式执行模型。 TensorRT-LLM 支持 INT4 或 INT8 权重量化(也称为仅 INT4/INT8 权重量化)以及 SmoothQuant 技术的完整实现。同时,TensorRT-LLM 优化了一系列知名模型在 NVIDIA GPU 上的性能。

支持的设备

TensorRT-LLM 在以下 GPU 上经过严格测试:

注意:如果是上面未列出 GPU,TensorRT-LLM 预计可在基于 Volta、Turing、Ampere、Hopper 和 Ada Lovelace 架构的 GPU 上工作。但是,可能存在某些限制。

关键特性

  • 支持多头注意力(Multi-head Attention,MHA)
  • 支持多查询注意力 (Multi-query Attention,MQA)
  • 支持分组查询注意力(Group-query Attention,GQA)
  • 支持飞行批处理(In-flight Batching)
  • Paged KV Cache for the Attention
  • 支持 张量并行
  • 支持 流水线并行
  • 支持仅 INT4/INT8 权重量化 (W4A16 & W8A16)
  • 支持 SmoothQuant 量化
  • 支持 GPTQ 量化
  • 支持 AWQ 量化
  • 支持 FP8
  • 支持贪心搜索(Greedy-search)
  • 支持波束搜索(Beam-search)
  • 支持旋转位置编码(RoPE)

支持的模型

支持的精度

TensorRT-LLM 支持各种数值精度。 但对其中一些数字精度的支持需要特定的GPU架构。

FP32 FP16 BF16 FP8 INT8 INT4
Volta (SM70) Y Y N N Y Y
Turing (SM75) Y Y N N Y Y
Ampere (SM80, SM86) Y Y Y N Y Y
Ada-Lovelace (SM89) Y Y Y Y Y Y
Hopper (SM90) Y Y Y Y Y Y

对于目前发布的v0.5.0,并非所有模型都实现了对 FP8 和量化数据类型(INT8 或 INT4)的支持,具体如下所示。

Model FP32 FP16 BF16 FP8 W8A8 SQ W8A16 W4A16 W4A16 AWQ W4A16 GPTQ
Baichuan Y Y Y . . Y Y . .
BERT Y Y Y . . . . . .
BLOOM Y Y Y . Y Y Y . .
ChatGLM Y Y Y . . . . . .
ChatGLM-v2 Y Y Y . . . . . .
Falcon Y Y Y . . . . . .
GPT Y Y Y Y Y Y Y . .
GPT-J Y Y Y Y Y Y Y Y .
GPT-NeMo Y Y Y . . . . . .
GPT-NeoX Y Y Y . . . . . Y
LLaMA Y Y Y . Y Y Y Y Y
LLaMA-v2 Y Y Y Y Y Y Y Y Y
OPT Y Y Y . . . . . .
SantaCoder Y Y Y . . . . . .
StarCoder Y Y Y . . . . . .

TensorRT-LLM 的性能

注意:

下表中的数据作为参考进行提供,以帮助用户验证观察到的性能。这不是 TensorRT-LLM 提供的峰值性能。

不同模型基于 FP16 在 A100 GPUs 上的吞吐量:

Model Batch Size TP (1) Input Length Output Length Throughput (out tok/s)
GPT-J 6B 64 1 128 128 3,679
GPT-J 6B 32 1 128 2048 1,558
GPT-J 6B 32 1 2048 128 526
GPT-J 6B 16 1 2048 2048 650
LLaMA 7B 64 1 128 128 3,486
LLaMA 7B 32 1 128 2048 1,459
LLaMA 7B 32 1 2048 128 529
LLaMA 7B 16 1 2048 2048 592
LLaMA 70B 64 4 128 128 1,237
LLaMA 70B 64 4 128 2048 1,181
LLaMA 70B 64 4 2048 128 272
LLaMA 70B 64 4 2048 2048 738
Falcon 180B 64 8 128 128 929
Falcon 180B 64 8 128 2048 923
Falcon 180B 64 8 2048 128 202

不同模型基于 FP16 在 A100 GPUs 上的首Token延迟:

针对批量大小为 1 时,第一个Token延迟的数据,代表终端用户感知在线流任务的延迟。

Model Batch Size TP (1) Input Length 1st Token Latency (ms)
GPT-J 6B 1 1 128 12
GPT-J 6B 1 1 2048 129
LLaMA 7B 1 1 128 16
LLaMA 7B 1 1 2048 133
LLaMA 70B 1 4 128 47
LLaMA 70B 1 4 2048 377
Falcon 180B 1 8 128 61
Falcon 180B 1 8 2048 509

结语

本文简要概述了TensorRT-LLM诞生的原因以及基本特征。码字不易,如果觉得有帮助,欢迎点赞收藏加关注。

参考文档

相关推荐
DigitalOcean13 小时前
DigitalOcean 基于 NVIDIA GPU 如何为 Workato 降低 67% AI 推理成本
llm·aigc
数据智能老司机14 小时前
Kubernetes 上的生成式 AI——模型数据
kubernetes·llm·agent
iceiceiceice14 小时前
从零开始构建 RAG + DeepSeek Demo
人工智能·llm
302AI15 小时前
大白话聊一聊:为什么OpenClaw那么火
llm·agent·vibecoding
数据智能老司机16 小时前
AI 智能体与应用——使用 LangGraph 构建基于工具的智能体
llm·agent
数据智能老司机16 小时前
AI 智能体与应用——问题转换
llm·agent
数据智能老司机16 小时前
AI 智能体与应用——使用 LangGraph 构建智能体工作流
llm·agent
数据智能老司机16 小时前
AI 智能体与应用——构建研究摘要引擎
llm·agent
数据智能老司机16 小时前
AI 智能体与应用——使用 LangChain 和 LangSmith 构建 Q&A 聊天机器人
llm·agent
Pitayafruit17 小时前
OpenClaw 从装完到真正会用,成为专业养🦞户的攻略
llm·aigc