简介:为什么 TensorRT-LLM 值得你花一个周末来构建
如果你曾经看到你的 GPU 在 LLM 缓慢运行时利用率只有 60%,你就知道还有剩余的性能可以挖掘。TensorRT-LLM 将这些剩余空间转化为吞吐量:融合内核、分页注意力、量化和图级优化,从而降低延迟并提高每秒 Token 数。在本操作指南中,我们将从安装到引擎构建再到服务进行端到端讲解,以便你可以自信地在 NVIDIA GPU 上部署更快、更便宜的推理。
本教程以实用和面向解决方案的风格编写。我们将使用问题引导结构,提供可复制的命令、常见的陷阱以及 FP16 与 INT8、批处理和 KV 缓存策略的决策点。我们还将引用官方资源,以便在适当的时候进行更深入的研究。
你将学到什么
- 如何准备用于引擎构建的模型(来自 Hugging Face 或检查点)
- 如何通过 Python/C++ 和 HTTP 服务运行推理
适用人群
- 在 NVIDIA GPU 上部署 LLM 的 ML 工程师
- 从 PyTorch Transformers 迁移到高度优化推理的构建者
- 什么是 TensorRT-LLM 以及何时应该使用它?
TensorRT-LLM 是一个推理堆栈,可将 Transformer 模型编译为高度优化的 GPU“引擎”。与原始 PyTorch 或通用运行时相比,你通常会获得:
- 通过分页 KV 缓存和量化实现更好的内存效率
当你使用 NVIDIA GPU 并且关心生产级性能时,请使用它。它对于仅解码的 LLM(例如,Llama, Mistral, Phi, BLOOM)以及聊天机器人、RAG 和高 QPS API 服务等场景尤其有价值。
- 具有最新计算能力的 NVIDIA GPU(例如,Ampere, Ada, Hopper)
- 匹配的 CUDA 和 TensorRT 版本,以及适当的驱动程序
- Python 3.8+ 和构建工具(如果从源代码编译)
版本说明:在安装之前,请务必查看官方 TensorRT 支持矩阵和发行说明,以了解兼容的 CUDA/TensorRT 版本和功能。
快速入门选项
- 容器化:使用 NVIDIA 的容器,其中预装了 CUDA/TensorRT,这是避免版本不匹配的最快方法。
- 原生安装:按照官方快速入门进行基本 TensorRT 安装,然后在之上分层构建 TensorRT-LLM。
- 准备好你的模型(Hugging Face → TensorRT-LLM)
常见来源
- Hugging Face: Llama/Mistral/BLOOM 变体
准备清单
- 如果需要,将 safetensors 转换为预期格式,或通过项目的脚本导出到 ONNX。
提示:官方快速入门通常包括用于获取模型并转换为正确中间形式的脚本。有关带有 BLOOM 示例的教程式演练,请参阅 Dell 关于将 Hugging Face LLM 转换为 TensorRT-LLM 的指南。
- 构建 TensorRT-LLM 引擎(工作流程的核心)
你应该知道的概念
- 精度:FP16/BF16 用于强大的基线;INT8 或 FP8 用于更高的吞吐量(如果准确性保持不变)。
- KV 缓存:分页 KV 缓存减少了内存碎片并提高了长上下文性能。
高层步骤
- 定义构建配置:最大批量、序列长度、精度、量化和 GPU 架构。
参考:使用官方文档和配置构建引擎。如果你计划通过 Hugging Face Text Generation Inference (TGI) 提供服务,请参阅 TRT-LLM 后端关于为每个 GPU 架构和配置预编译引擎的说明。
入门决策树
- 首次构建:FP16,中等最大序列长度(例如,4K–8K),适度批量(例如,4–8)。验证正确性。
- 扩大规模:启用分页 KV 缓存。增加最大批量/束大小。试验 FP8 或 INT8。
- 生产:确定满足延迟/QPS SLO 的配置;为每个场景创建单独的引擎(短提示与长上下文)。
- 运行推理:Python、C++ 和 HTTP
你有三个常见路径:
- Python:快速原型设计,非常适合流水线和笔记本。
- HTTP 服务:将 TGI 与 TRT-LLM 后端或运行时的服务示例一起使用,以实现可扩展的部署。
Hugging Face TGI 后端
- 使用 TRT-LLM 后端启动 TGI,并将其指向引擎目录。
- 通过 /generate 或 openai 兼容的路由发送请求,并使用副本进行缩放。
- 精度:FP16 是你可靠的基线。INT8/FP8 可以进一步降低延迟,但要验证质量。
- 批处理:动态批处理和请求合并显着提高吞吐量;测量尾部延迟。
- 分页 KV 缓存:对于长提示和流式传输至关重要;降低内存压力。
- 最大长度:更大的最大序列长度会增加引擎大小并可能降低时钟;构建适合用途的引擎。
实用技巧
- 使用真实的提示进行基准测试:分别测量预填充和解码阶段。
- Tokenizer 吞吐量很重要:如果你的框架支持,请在 GPU 上执行。
- 密切关注 CUDA 图/融合内核:它们减少了 CPU 开销和内核启动延迟。
- 对于多 GPU:根据你的模型大小和延迟要求,首选张量并行或流水线并行。
- 每个请求的首个 Token 时间 (TTFT) 和端到端延迟
- 准确性:如果你进行量化,则为 BLEU/困惑度或特定于任务的评估
在基线(PyTorch 与 TensorRT-LLM)中使用一致的种子和提示集,以验证正确性和差异。
- 版本不匹配:根据官方支持矩阵对齐 CUDA、驱动程序和 TensorRT 版本。
- 引擎对设备无效:专门为你的 GPU 架构重建引擎。
- 构建期间 OOM:减少最大序列长度或批量;启用分页 KV;考虑量化。
- INT8 导致准确性下降:根据具有代表性的领域数据进行校准;尝试每张量量化并验证层级敏感度。
- 尽管吞吐量很高,但 TTFT 缓慢:调整分页 KV 缓存,启用 CUDA 图,并检查 tokenizer 瓶颈。
- 示例工作流程:从 Hugging Face 模型到生产
场景:你想要 A100 上的低延迟聊天模型。
- 选择模型:7B–13B Llama/Mistral 变体。
- 准备:下载权重和 tokenizer;验证是否支持架构。
- 第一个引擎:FP16,最大输入 4K,最大输出 1K,批量 4;分页 KV 开启。
- 验证:将输出与你的 PyTorch 基线进行比较。
- 优化:尝试 INT8 或 FP8;测量 TTFT 和吞吐量。增加服务器模式的批量。
- 服务:使用 TGI TRT-LLM 后端;在负载均衡器后面扩展副本;添加流式传输。
- 每个 GPU 的吞吐量:测量目标上下文中的 tokens/秒。使用它来计算 QPS 容量。
- 每 100 万个 tokens 的价格:通过更快的解码和更高的批量利用率,TRT-LLM 通常会降低每个 token 的成本。
- 调整引擎大小:为短格式和长格式构建单独的引擎,以最大限度地减少空间浪费。
- 指南中的常见问题解答
问:我是否需要为每种 GPU 类型重建引擎?
答:是的。引擎是特定于硬件的。为你将要部署的每个 GPU 架构构建引擎。
问:INT8 对质量有多大影响?
答:这取决于模型和任务。通过良好的校准数据,许多模型在提供显着加速的同时,仍能保持接近 FP16 的质量。
问:我可以运行长上下文(例如,32K)吗?
答:可以,但要仔细规划内存。使用分页 KV 缓存并调整块大小;请注意,更长的上下文会增加引擎占用空间和解码成本。
问:是否需要 TGI?
答:不。你可以直接运行 Python/C++。TGI 方便用于具有自动缩放和日志记录的生产级 HTTP API。
值得注意的工作流程加速
如果你经常迭代提示、比较引擎之间的输出或记录实验,则支持快速重试、代码块执行和 Web 片段的并排 AI 助手可以加快你的循环。顺便说一句,Sider.AI 提供专为工程师定制的桌面体验——方便捕获基准、测试提示以及在优化 TensorRT-LLM 管道时整理笔记。 后续步骤清单
- 在支持矩阵中确认 CUDA/TensorRT 兼容性。
- 如果通过 TGI 提供服务,请预编译引擎并配置 TRT-LLM 后端。
- 或者,查看 Hugging Face 模型(如 BLOOM)的教程式演练。
主要收获
- TensorRT-LLM 将你的 Transformer 编译为 GPU 本机引擎,以实现最大吞吐量和更低延迟。
- 从 FP16 开始,启用分页 KV 缓存并进行测量。然后探索 INT8/FP8 以获得更多速度。
- 引擎是 GPU 和配置特定的;为每个部署目标构建。
- 对于生产,将引擎与强大的服务层(例如,TGI)配对,并监控 TTFT、吞吐量和质量。
常见问题
问 1:如何以正确的方式安装和设置 TensorRT-LLM?
使用具有匹配 CUDA/TensorRT 的容器,或按照官方快速入门和支持矩阵操作,以避免版本偏差。在编译引擎之前,验证 GPU 驱动程序和构建工具。
问 2:如何将 TensorRT-LLM 与 Hugging Face 模型一起使用?
下载模型和 tokenizer,确认支持,并在构建引擎之前根据需要进行转换。如果使用 TGI 提供服务,请为你的 GPU 编译引擎,并将后端指向引擎目录。
问 3:我应该为 TensorRT-LLM 选择 FP16、FP8 还是 INT8?
从 FP16 开始以获得稳定性,然后尝试 FP8/INT8 以提高吞吐量。始终在量化后验证任务准确性。
问 4:我可以通过 HTTP 提供 TensorRT-LLM 吗?
是的。你可以直接使用 Python/C++,也可以通过 Hugging Face TGI 的 TRT-LLM 后端提供服务,以获得具有流式传输的可扩展、生产就绪的 API。
问 5:使用 TensorRT-LLM 时常见的性能瓶颈是什么?
Tokenizer 开销、次优批处理和缺少分页 KV 缓存是常见问题。调整批量大小,启用 CUDA 图,并监控 TTFT 与总 tokens/秒。