TensorRT 与 ONNX Runtime 推理全解析

摘要

大模型从训练好的权重变成能对外提供服务的产品,中间必须经过"推理引擎"这一关。TensorRT(及其大模型分支 TensorRT-LLM)和 ONNX Runtime(及其生成式扩展 ONNX Runtime GenAI)是目前工程落地中最常被提到的两套推理方案,一个主打 NVIDIA GPU 上的极致性能,一个主打跨硬件、跨平台的通用部署。理解这两者的定位差异和使用方法,是做大模型推理绕不开的基础知识。

背景与问题

一个训练好的大模型直接用 PyTorch 跑推理,往往达不到生产环境要求的吞吐和延迟:显存占用高、算子没有针对硬件做融合优化、批处理调度粗放,GPU 利用率常常上不去。于是就出现了专门的推理引擎层,它们在模型权重之上做算子融合、低精度量化、批处理调度和内存管理,把同样的模型跑得更快、更省资源。

TensorRT 和 ONNX Runtime 是这条链路上最主流的两个选择,但它们的出发点完全不同:TensorRT 是 NVIDIA 深度绑定自家 GPU 硬件的优化引擎,ONNX Runtime 则是微软主导、面向多硬件后端的通用推理运行时。很多团队在选型时会纠结"到底该用哪个",实际上二者在大部分生产架构里并不是互斥关系,而是分别覆盖不同的部署场景。

核心思路与优势

TensorRT / TensorRT-LLM 的核心思路是"只服务 NVIDIA GPU,把优化做到极致"。TensorRT-LLM 基于 PyTorch 构建,提供高层 Python LLM API,可以从单卡一路扩展到多卡、多机部署,并能与 Triton Inference Server、NVIDIA Dynamo 等服务框架集成。它的主要优势集中在这几点:

  • 低精度量化:H100 及更新架构支持 FP8 自动转换,吞吐量最高提升一倍、显存占用减半;B200 上原生支持 FP4,配套专门优化的 kernel;此外还支持 INT4/AWQ 等量化方案。
  • In-flight batching + Paged Attention:把不同请求的 context 阶段和 generation 阶段动态编排在一起处理,显著提升 GPU 利用率、降低排队等待时间。
  • 投机采样(Speculative Decoding):支持 EAGLE、MTP、N-Gram 等算法,用小模型或历史信息预测后续 token,减少大模型的实际解码步数。
  • 多卡并行:tensor parallelism、pipeline parallelism,以及面向 MoE 模型的 expert parallelism。
  • Paged KV Cache:支持显存块的智能复用,降低长上下文场景下的显存开销。

ONNX Runtime / ONNX Runtime GenAI 的核心思路则是"一份模型,尽可能多硬件都能跑"。ONNX Runtime 本身是跨平台推理引擎,通过 Execution Provider 机制适配不同硬件后端;ONNX Runtime GenAI 在此基础上补齐了生成式模型专用的推理循环------预处理/后处理、logits 处理、greedy/beam search、采样、重复惩罚、KV Cache 管理,以及面向工具调用场景的 grammar 约束解码。它的优势在于:

  • 硬件覆盖面广:同时支持 CPU、CUDA、DirectML、OpenVINO、QNN(高通 NPU)、WebGPU,乃至面向消费级显卡的 TensorRT-RTX 后端。
  • 平台覆盖面广:Linux、Windows、macOS、Android、iOS、WebAssembly(浏览器端)均可运行,是目前 Windows 本地应用、移动端、边缘设备部署 AI 模型的事实标准之一。
  • 模型生态成熟:Llama、Phi、Mistral、Gemma、Qwen、DeepSeek、ChatGLM、Whisper 等主流开源模型都有现成支持;Hugging Face 上已经积累了大量预量化好的 ONNX 模型,下载后可以直接运行,不需要自己做格式转换。
  • 算子覆盖更全:不像 TensorRT 遇到冷门算子(比如 scatter_add)有时需要手写插件,ONNX Runtime 对大多数算子都有原生实现,减少了工程适配成本。

面向人群

  • 正在把大模型从训练环境搬到生产环境的算法工程师和后端工程师,需要为服务选择合适的推理引擎。
  • 负责云端 GPU 集群推理服务性能优化的基础设施/MLOps 工程师。
  • 需要把模型部署到 Windows 桌面应用、移动端 App 或浏览器端的端侧 AI 开发者。
  • 准备大模型推理相关技术面试、需要系统梳理推理框架知识体系的求职者。

实践步骤

用 TensorRT-LLM 跑一个模型

TensorRT-LLM 提供了高层的 LLM API,几行代码就能完成加载和生成:

python 复制代码
from tensorrt_llm import LLM, SamplingParams

def main():
    llm = LLM(model="TinyLlama/TinyLlama-1.1B-Chat-v1.0")

    prompts = [
        "Hello, my name is",
        "The capital of France is",
        "The future of AI is",
    ]

    sampling_params = SamplingParams(temperature=0.8, top_p=0.95)

    for output in llm.generate(prompts, sampling_params):
        print(f"Prompt: {output.prompt!r}, Generated text: {output.outputs[0].text!r}")

if __name__ == "__main__":
    main()

这里的 model 参数既可以是 HuggingFace 上的模型名,也可以是本地模型路径,或者是经过 Model Optimizer 量化处理后的 checkpoint。SamplingParams 用来控制温度、top_p 等采样参数。真实生产环境中,还需要根据显卡型号和显存大小选择合适的量化精度(FP8/FP4/INT4),并开启 in-flight batching 来提升并发吞吐。

用 ONNX Runtime GenAI 跑一个模型

ONNX Runtime GenAI 的调用方式更接近手动控制生成循环,适合需要精细定制的场景:

python 复制代码
import onnxruntime_genai as og

model = og.Model('model_path')
tokenizer = og.Tokenizer(model)

search_options = {'max_length': 2048, 'batch_size': 1}
params = og.GeneratorParams(model)
params.set_search_options(**search_options)

input_tokens = tokenizer.encode("Your prompt here")
generator = og.Generator(model, params)
generator.append_tokens(input_tokens)

while not generator.is_done():
    generator.generate_next_token()

model_path 指向的是转换成 ONNX 格式(通常已经量化好)的模型目录。整个生成过程是显式的 while 循环,每一步都可以插入自定义的 logits 处理逻辑,这也是它比"黑盒式"高层 API 更适合做深度定制的原因。ONNX Runtime GenAI 还提供 C#、C/C++、Java 等多语言 API,方便集成进 Windows 桌面应用或移动端 App。

两者怎么选

一个常见的生产实践是按部署环境分流:云端 GPU 集群、大批量高并发请求,优先用 TensorRT-LLM 追求极致吞吐和低延迟;CPU、端侧设备、浏览器或碎片化的小批量请求,用 ONNX Runtime 保证跨硬件的覆盖率和可移植性。二者甚至可以出现在同一套服务架构里:核心云端服务用 TensorRT-LLM,客户端本地推理或离线场景用 ONNX Runtime GenAI,互为补充而非互相替代。

对比总结

维度 TensorRT / TensorRT-LLM ONNX Runtime / ONNX Runtime GenAI
硬件支持 仅 NVIDIA GPU CPU、CUDA、DirectML、OpenVINO、QNN、WebGPU 等多后端
平台支持 主要面向云端/数据中心 Linux 服务器,Windows 仅有限支持 Linux、Windows、macOS、Android、iOS、WebAssembly 全覆盖
性能特点 深度绑定硬件做算子融合与低精度优化,吞吐和显存效率通常更高 通用性优先,性能依赖具体 Execution Provider 的实现质量
算子覆盖 冷门算子有时需要手写插件 覆盖更全,较少需要自定义实现
典型场景 云端大批量高并发推理服务 端侧、跨平台、离线场景

应用领域

TensorRT-LLM 主要活跃在云端大模型推理服务领域,通常与 Triton Inference Server、NVIDIA Dynamo 等组件配合,支撑在线聊天机器人、Agent 服务、批量文本生成等对吞吐和延迟要求较高的 GPU 集群场景。ONNX Runtime 和 ONNX Runtime GenAI 则更多出现在端侧和跨平台场景中:Windows 本地应用、Android/iOS 移动端功能、浏览器端 WebAssembly 推理,以及骁龙 NPU、Intel Core Ultra 处理器上的边缘设备智能------这类场景通常更看重离线可用性、隐私保护和多硬件兼容性,而不是极致的单卡吞吐。

对于任何要落地大模型推理服务的团队来说,把这两套工具的定位、优势和适用边界搞清楚,是绕不开的基础功课。

相关推荐
LuTshoes1 小时前
AI Agent 相关介绍
人工智能·ai
俊哥V2 小时前
每日 AI 研究简报 · 2026-09-14
人工智能·ai
严同学正在努力2 小时前
认识 SQL Server 的 T-SQL 语法
数据库·人工智能·ai·oracle·dba
果粒蹬i2 小时前
AI 不只回答问题:用 Hermes Agent 把微信指令接到 Windows 电脑上
人工智能·ai
宁渡AI大模型3 小时前
河南宁渡科技有限公司|宁渡课堂 AI 全栈面试分享,大模型 API 开发与流式输出面试题
人工智能·python·ai·大模型
IT·陈寒3 小时前
我的React组件莫名其妙重新渲染了8次
人工智能·大模型·api·创业·变现·简历优化
ruleslol3 小时前
System Prompt(系统提示词) 的用法
java·ai
寻道码路3 小时前
大模型工程化实战(十):Human-in-the-Loop 反馈闭环——三层清洗打造 Golden Set,拒绝“点赞即真理”
人工智能·大模型·ai工程化·hitl·反馈闭环·goldenset·数据回流
AI直播技术杂谈3 小时前
多路数字人直播的算力调度方案对比:单卡、多卡与分布式
ai·音视频