2. 主流推理引擎概览

好,咱们进入正题。推理引擎这块,说白了就是帮你把训练好的模型跑得更快、更省资源。市面上选项不少,但真正经得起大规模实战考验的,我归纳下来就五个:TensorRT、ONNX Runtime、OpenVINO、Triton Inference Server,还有 PyTorch 自家的 torch.compile。

这五个东西,各有各的脾气。我这些年几乎每个都踩过坑,今天就把它们的底细给你捋一遍。

核心观点:没有银弹。选型的关键不是哪个最强,而是哪个最适合你的硬件、模型和部署场景。

主流推理引擎生态全景 推理引擎 TensorRT ONNX Runtime OpenVINO Triton Server torch.compile NVIDIA GPU 专属 跨平台中间格式 Intel 硬件优化 多模型服务管理 PyTorch JIT 升级版 自动驾驶 / 高吞吐 跨平台 / 快速集成 边缘计算 / CPU 推理 生产级服务 / 弹性 快速实验 / 动态图

1. TensorRT:NVIDIA 生态的加速之王

TensorRT 是 NVIDIA 的亲儿子。如果你用的是 NVIDIA GPU,那它基本就是性能天花板。我最早接触它是在一个自动驾驶项目里,模型是 ResNet-50,用原生 PyTorch 推理一帧要 30ms,换成 TensorRT 直接压到 8ms。当时我就一个感觉:这玩意儿有点东西。

它的核心手段是图优化 + 量化 + 内核自动调优。说白了,它会把你的计算图重新梳理,把能合并的层合并,能融合的算子融合,再配合 FP16 甚至 INT8 量化,性能翻倍是常事。

我的经验:TensorRT 对静态输入尺寸最友好。如果你的输入尺寸频繁变化(比如 NLP 里的变长序列),性能会打折扣。我踩过这个坑,后来用动态 shape 模式才解决,但配置起来麻烦不少。

2. ONNX Runtime:跨平台的瑞士军刀

ONNX Runtime(简称 ORT)是我个人最常用的引擎之一。为什么?因为它不挑硬件。你训练用 PyTorch,导出 ONNX 格式,然后 ORT 可以在 Windows、Linux、ARM、甚至手机上跑。它背后有微软撑着,生态很成熟。

ORT 支持多种执行提供者(Execution Provider):CUDA、TensorRT、OpenVINO、DirectML…… 你换硬件只需要改一行配置。我在一个边缘设备项目里,模型先用 ORT 在 x86 上调通,然后无缝切到 ARM 上,基本没改代码。

注意:ONNX 导出不是万能的。有些 PyTorch 算子 ONNX 不支持,需要写自定义算子或者绕路。我建议你在导出前先用 torch.onnx.export 的 dynamic_axes 参数把动态轴声明清楚,否则后面推理时容易崩。

3. OpenVINO:Intel 硬件的加速利器

OpenVINO 是 Intel 推出的推理框架,主要针对 Intel CPU、集成显卡、VPU 和 FPGA。如果你手头没有 NVIDIA GPU,或者你部署在服务器上用 Intel Xeon,那 OpenVINO 是首选。

它的优化思路和 TensorRT 类似:图优化 + 低精度量化。但 OpenVINO 对 Intel 的硬件指令集(比如 AVX-512、VNNI)做了深度适配。我记得有一次在 Intel Xeon 上跑 BERT,用 OpenVINO 的 INT8 量化后,延迟降低了 3 倍,吞吐量翻了 4 倍。

适用场景:边缘计算、工业检测、智慧安防。这些场景往往用 Intel CPU 或集成显卡,OpenVINO 几乎是唯一的高性能选择。

4. Triton Inference Server:生产级模型服务

前面三个引擎都是单模型推理加速,而 Triton 是模型服务管理平台。它由 NVIDIA 开源,支持 TensorRT、ONNX Runtime、PyTorch、TensorFlow 等多种后端。你可以把多个模型部署在同一个 Triton 实例上,它负责负载均衡、动态批处理、模型版本管理。

我在一个广告推荐系统里用过 Triton。当时有 5 个模型需要同时服务,每个模型有不同的延迟要求。Triton 的并发模型调度和动态批处理帮了大忙,吞吐量提升了 2 倍以上。

小技巧:Triton 支持模型预热(Model Warmup),避免冷启动时的首次推理延迟。我建议你在部署时一定要配这个,否则第一个请求会慢得离谱。

5. torch.compile:PyTorch 2.0 的原生加速

torch.compile 是 PyTorch 2.0 推出的新特性。它不像前面几个引擎需要导出模型,而是直接在 PyTorch 内部做 JIT 编译。你只需要在模型 forward 前加一行 model = torch.compile(model),就能获得 30%-80% 的性能提升。

它的底层用的是 TorchDynamo 和 TorchInductor,说白了就是把动态图转成静态图,然后做算子融合和内核优化。我试过一个 GPT-2 的推理,torch.compile 比原生 PyTorch 快了 40%,而且代码改动几乎为零。

注意:torch.compile 目前还在快速迭代中,对某些动态控制流(比如 if-else 分支)支持不够好。如果你的模型里有大量动态分支,建议先用 mode="reduce-overhead" 试试,不行再切回 eager 模式。

横向对比:一张表说清楚

引擎 硬件支持 性能优势 部署难度 典型场景
TensorRT NVIDIA GPU 极高(FP16/INT8) 中 自动驾驶、高吞吐服务
ONNX Runtime CPU/GPU/ARM 高(跨平台优化) 低 跨平台部署、快速集成
OpenVINO Intel CPU/GPU/VPU 高(Intel 硬件) 中 边缘计算、工业检测
Triton Server 多后端(GPU/CPU) 中(服务管理) 高 生产级多模型服务
torch.compile GPU/CPU 中高(动态图) 极低 快速实验、原型验证

选型思路:我一般怎么选

说实话,没有万能答案。但我个人有个简单的判断逻辑:

  • 如果你只用 NVIDIA GPU,追求极致性能 → 直接上 TensorRT。别犹豫。
  • 如果你需要跨平台,或者团队里硬件不统一 → ONNX Runtime 是最稳妥的选择。
  • 如果你部署在 Intel 服务器或边缘设备上 → OpenVINO 是唯一能打的选择。
  • 如果你要管理多个模型,需要生产级服务 → Triton Inference Server 是标配。
  • 如果你还在快速迭代模型,不想折腾导出流程 → torch.compile 是最省事的方案。

我的建议:别一开始就追求最优解。先用 torch.compile 或 ONNX Runtime 快速跑通,然后根据性能瓶颈再考虑是否切换到 TensorRT 或 OpenVINO。迭代式优化,比一步到位靠谱得多。