通用部署框架虽然灵活,但在 NVIDIA GPU 上为量化大型语言模型(LLM)争取最佳性能时,通常需要专门优化。NVIDIA 的 TensorRT-LLM 是为此目标设计的库,它通过将模型编译成高度优化的运行时引擎,显著提升推理速度和效率。TensorRT-LLM 的作用TensorRT-LLM 充当 LLM 的深度学习编译器和运行时,面向 NVIDIA GPU。它接收模型定义(可能已使用之前讨论的技术,如 INT8 PTQ、GPTQ 或 AWQ 进行量化),并在生成 TensorRT 引擎前应用一系列优化。此引擎是模型的高度优化版本,可供部署。TensorRT-LLM 的重要特点包括:图优化:它执行层和张量融合,将多个操作合并为单一核。这降低了核启动开销并改善了内存访问模式,在 GPU 上尤其有利。精度校准:TensorRT 可以分析模型并为不同层确定最佳精度水平,包括在硬件支持的情况下使用专门的低精度核。它内置支持 INT8 和 FP8 等格式,在正确校准时,能显著提升性能,同时对精度影响很小。核自动调优:TensorRT-LLM 从高度优化的实现库中,针对特定的模型架构和目标 GPU,选择性能最佳的核。优化组件:它包括核心 LLM 构成部分的高度优化实现,例如多头注意力(包括 FlashAttention 及其变体)和位置嵌入的版本。动态批处理:类似于 vLLM 等框架,TensorRT-LLM 采纳了先进的批处理策略(连续或动态批处理),通过并行处理多个请求而无需填充来最大化 GPU 利用率,大幅提升吞吐量。将量化与 TensorRT-LLM 结合TensorRT-LLM 旨在有效处理量化模型。它支持多种量化格式,包括:INT8 量化:训练后量化(PTQ)和量化感知训练(QAT)的 INT8 模型都可以进行优化。TensorRT-LLM 包括 SmoothQuant 等技术,以处理 INT8 量化过程中 LLM 中常出现的激活值异常。FP8 量化:对于较新的硬件(如 H100 GPU),TensorRT-LLM 提供对 FP8(E4M3 和 E5M2 格式)的支持,提供接近 FP16 的精度,同时显著减少内存占用并加快计算速度。INT4 量化:支持 INT4 量化方案,通常基于 AWQ(激活感知权重Q量化)等方法,也已集成,可以在进行大幅度模型压缩的同时,使用专用核来提升性能。工作流程通常包括:模型准备:您从一个预训练的 LLM 开始,可能已使用 AutoGPTQ 或 AutoAWQ 等库进行量化,或者,如果您打算使用 TensorRT 的 PTQ 功能,则使用全精度模型。引擎构建:使用 TensorRT-LLM Python API 或 trtllm-build 命令行工具,您可以定义模型架构并指定优化参数(如目标精度、量化模式、插件配置)。TensorRT-LLM 会将模型编译成优化后的引擎文件(.engine 或 .plan)。此步骤可能耗时,因为它涉及核选择和调优。运行时执行:生成的引擎由 TensorRT 运行时加载。您可以使用 TensorRT-LLM 运行时 API(或将其与 NVIDIA Triton Inference Server 等推理服务器集成)进行推理,从引擎中固有的优化中受益。性能提升使用 TensorRT-LLM 的主要目的是性能。通过针对特定 GPU 架构深度优化模型并使用较低精度,与在 PyTorch 或 TensorFlow 等通用框架中运行相同的量化模型相比,它可以显著提升延迟和吞吐量。{"layout": {"title": "量化 LLM 性能(GPU)", "xaxis": {"title": "指标"}, "yaxis": {"title": "相对性能(吞吐量越高越好)", "type":"log"}, "barmode": "group", "legend":{"traceorder":"reversed"}, "colorway":["#1c7ed6", "#f76707"]}, "data": [{"type": "bar", "name": "TensorRT-LLM (INT8)", "x": ["吞吐量(令牌/秒)", "延迟(毫秒/令牌)"], "y": [500, 2], "marker": {"color": "#1c7ed6"}}, {"type": "bar", "name": "基准框架 (INT8)", "x": ["吞吐量(令牌/秒)", "延迟(毫秒/令牌)"], "y": [150, 8], "marker": {"color": "#f76707"}}]}性能对比,表明使用 TensorRT-LLM 与标准框架相比,针对 GPU 上的 INT8 量化模型可能获得的优势。请注意 Y 轴采用对数刻度。实际结果很大程度上取决于模型、硬件和具体的量化方法。与部署系统集成TensorRT-LLM 引擎通常通过支持 TensorRT 后端的推理服务器进行部署。NVIDIA Triton Inference Server:这是一个常用选择,提供生产就绪环境来服务 TensorRT 引擎。Triton 处理请求批处理、模型版本控制,并暴露标准推理协议(HTTP/gRPC)。TensorRT-LLM 提供专门的 Triton 后端,旨在高效服务 LLM,并包含动态批处理等功能。独立运行时:您也可以直接在应用程序中使用 TensorRT-LLM 运行时,以实现更紧密的集成,尽管这需要更多手动设置来处理请求和批处理。考量与权衡TensorRT-LLM 尽管功能强大,但使用时涉及一些考量:构建时间:编译 TensorRT 引擎,特别是对于大型模型和进行广泛的核调优时,可能需要大量时间(数分钟到数小时)。硬件特定性:TensorRT 引擎通常针对特定的 NVIDIA GPU 架构和 TensorRT 版本进行优化。为 A100 GPU 构建的引擎在 H100 GPU 或不同的驱动/CUDA 版本上可能无法最佳运行,甚至无法运行,需要为不同的部署目标重新构建。灵活性:与 PyTorch 等框架中的动态执行相比,如果您需要频繁修改模型图结构,编译后的 TensorRT 引擎灵活性较低。复杂性:构建过程和 API 可能比使用更高层次的抽象库更复杂。TensorRT-LLM 代表了一种先进的方法,用于最大化 NVIDIA GPU 上量化(和非量化)LLM 的性能。当需要绝对最低延迟或最高吞吐量时,在构建和部署 TensorRT-LLM 引擎上的投入通常会带来可观的回报,使其成为生产级 LLM 推理服务的重要工具。